Hadoop 包括 hdfs 与 mapreduce 两部分,在试用期期间我主要看了 mapreduce 部分, 即 hadoop 执行作业的部分。 1. mapreduce 中几个主要的概念 mapreduce 整体上可以分为这么几条执行的线索, jobclient , JobTracker 与 TaskTracker 。 1. JobClient 每一个 job 都会在用户端通过 JobClient 类将应用程序以及配置参数打包成 jar 文件存储在 HDFS ,并把路径提交到 JobTracker ,然后由 JobTracker 创建每一个 Task (即 MapTask 和 ReduceTask )并将它们分发到各个 TaskTracker 服务中去执行。 2. JobTracker JobTracker 是一个 master 服务,软件启动之后 JobTracker 接收 job ,负责调度 job 的每一个子任务 task 运行于 TaskTracker 上, 并监控它们, 如果发现有失败的 task 就重新运行它。一般情况应该把 JobTracker 部署在单独的机器上。 3. TaskTracker TaskTracker 是运行于多个节点上的 slaver 服务。 TaskTracker 主动与 JobTracker 通信, 接收作业, 并负责直接执行每一个任务。 TaskTracker 都需要运行在 HDF S 的 DataNode 上, 下图简单的描述了三者之间的关系: 暂无 2. 数据结构 JobInProgress JobClient 提交 job 后, JobTracker 会创建一个 JobInProgress 来跟踪和调度这个 job , 并把它添加到 job 队列里。 JobInProgress 会根据提交的 job jar 中定义的输入数据集(已分解成 FileSplit ) 创建对应的一批 TaskInProgress 用于监控和调度 MapTask , 同时在创建指定数目的 TaskInProgress 用于监控和调度 ReduceTask ,缺省为 1个 ReduceTask 。 TaskInProgress JobTracke r 启动任务时通过每一个 TaskInProgres s来 launchTask , 这时会把 Tas k 对象(即 MapTask 和 ReduceTask ) 序列化写入相应的 TaskTracker 服务中, TaskTracker 收到后会创建对应的 TaskInProgress (此 TaskInProgress 实现非 JobTracker 中使用的 TaskInProgress ,作用类似)用于监控和调度该 Task 。启动具体的 Task 进程是通过 TaskInProgress 管理的 TaskRunner 对象来运行的。 TaskRunner 会自动装载 job jar ,并设置好环境变量后启动一个独立的 java child 进程来执行 Task ,即 MapTask 或者 ReduceTask ,但它们不一定运行在同一个 TaskTracker 中。 MapTask 和 ReduceTask 一个完整的 job 会自动依次执行 Mapp
hadoop中mapreduce部分执行流程 来自淘豆网m.daumloan.com转载请标明出处.