Hadoop, A Distributed Framework For Big Data
Hadoop, A Distributed Framework For Big Data
Hadoop, A Distributed Framework For Big Data
2. Architecture in detail
3. Hadoop in industry
What is Hadoop?
1996
1996
1996
1997
Google search engines
1998
2013
Hadoop’s Developers
2003
2004
2006
Some Hadoop Milestones
• Hadoop:
• Goals / Requirements:
• Fault-tolerance
NameNode:
DataNode:
MapReduce Engine:
• Design requirements:
• System requirements
o Low latency
o Disk-efficient sequential
and random read
performance
Hadoop in the Wild
• Classic alternatives
• Facebook’s solution
• A Block Sever
– Stores data in local file system
– Stores meta-data of a block - checksum
– Serves data and meta-data to clients
• Block Report
– Periodically sends a report of all existing blocks
to NameNode
• Facilitate Pipelining of Data
– Forwards data to other specified DataNodes
Block Placement
• Replication Strategy
– One replica on local node
– Second replica on a remote rack
– Third replica on same remote rack
– Additional replicas are randomly placed
• Clients read from nearest replica
Data Correctness
• Log processing
• Web search indexing
• Ad-hoc queries
Closer Look
• MapReduce Component
– JobClient
– JobTracker
– TaskTracker
– Child
• Job Creation/Execution Process
MapReduce Process
(org.apache.hadoop.mapred)
• JobClient
– Submit job
• JobTracker
– Manage and schedule job, split job into tasks
• TaskTracker
– Start and monitor the task execution
• Child
– The process that really execute the task
Inter Process Communication
IPC/RPC (org.apache.hadoop.ipc)
• Protocol
JobSubmissionProtocol
– JobClient <-------------> JobTracker
– TaskTracker
InterTrackerProtocol
<------------> JobTracker
• JobStatus status =
jobSubmitClient.submitJob(jobId);
– This is an RPC invocation, jobSubmitClient is
a proxy created in the initialization
Job initialization on JobTracker - 1
• Sort by priority
– resortPriority();
– compare the JobPrioity first, then compare the
JobSubmissionTime
• Wake JobInitThread
– jobInitQueue.notifyall();
– job = jobInitQueue.remove(0);
– job.initTasks();
JobInProgress - 1
• splits = JobClient.readSplitFile(splitFile);
• numMapTasks = splits.length;
• maps[i] = new TaskInProgress(jobId,
jobFile, splits[i], jobtracker, conf, this, i);
• reduces[i] = new TaskInProgress(jobId,
jobFile, splits[i], jobtracker, conf, this, i);
• JobStatus --> JobStatus.RUNNING
JobTracker Task Scheduling - 1
• Task getNewTaskForTaskTracker(String
taskTracker)
• Compute the maximum tasks that can be
running on taskTracker
– int maxCurrentMap Tasks =
tts.getMaxMapTasks();
– int maxMapLoad =
Math.min(maxCurrentMapTasks,
(int)Math.ceil(double)
remainingMapLoad/numTaskTrackers));
JobTracker Task Scheduling - 2
• initialize()
– Remove original local directory
– RPC initialization
• TaskReportServer = RPC.getServer(this,
bindAddress, tmpPort, max, false, this, fConf);
• InterTrackerProtocol jobClient =
(InterTrackerProtocol)
RPC.waitForProxy(InterTrackerProtocol.class,
InterTrackerProtocol.versionID, jobTrackAddr,
this.fConf);
Start TaskTracker - 2
• run();
• offerService();
• TaskTracker talks to JobTracker with
HeartBeat message periodically
– HeatbeatResponse heartbeatResponse =
transmitHeartBeat();
• TaskTracker.localizeJob(TaskInProgress tip);
Run Task on TaskTracker - 1
• launchTasksForJob(tip, new
JobConf(rjob.jobFile));
– tip.launchTask(); // TaskTracker.TaskInProgress
– tip.localizeTask(task); // create folder, symbol link
– runner = task.createRunner(TaskTracker.this);
– runner.start(); // start TaskRunner thread
• Run
TaskRunner.run();
Task on TaskTracker - 2
– Configure child process’ jvm parameters, i.e.
classpath, taskid, taskReportServer’s address
& port
– Start Child Process
• runChild(wrappedCommand, workDir, taskid);
Child.main()
• Child
– task.done(umilical);
• RPC call: umbilical.done(taskId,
shouldBePromoted)
• TaskTracker
– done(taskId, shouldPromote)
• TaskInProgress tip = tasks.get(taskid);
• tip.reportDone(shouldPromote);
– taskStatus.setRunState(TaskStatus.State.SUCCEEDED)
Finish Job - 2
• JobTracker
– TaskStatus report: status.getTaskReports();
– TaskInProgress tip = taskidToTIPMap.get(taskId);
– JobInProgress update JobStatus
• tip.getJob().updateTaskStatus(tip, report, myMetrics);
– One task of current job is finished
– completedTask(tip, taskStatus, metrics);
– If (this.status.getRunState() == JobStatus.RUNNING &&
allDone) {this.status.setRunState(JobStatus.SUCCEEDED)}
Demo
• Word Count
– hadoop jar hadoop-0.20.2-examples.jar
wordcount <input dir> <output dir>
• Hive
– hive -f pagerank.hive