20210103
大数据 | 大数据基础--系统之大数据计算框架实例:Hadoop
亲爱的读者朋友大家晚上好,上次我们介绍了大数据计算框架的概述。今天分析一个计算框架的实例Hadoop~
简介
Hadoop的计算场景是处理批处理任务,具体的任务处理的实现接口被抽象为Map-Reduce。在使用Hadoop进行实践的时候需要重载MapReduce函数,函数的接口的使用如下所示:
学习Hadoop的理论知识,应当从以下几个方面入手:
- Hadoop的系统结构
- Hadoop的底层计算框架MapReduce的执行过程
- Hadoop的数据相关的底层技术,比如数据存储和文件系统
接下来就让我们按照上述顺序依次对Hadoop进行解析。
Hadoop系统结构
Hadoop有一套自己的生态,包括自己的计算框架、数据存储机制、任务执行的流程调度、事务的处理机制,具体如下所示:
系统架构:Hadoop生态
数据存储机制:HDFS
基本数据操作:数据重分布
流程优化:无 (额外的DAG模型生成工具)
流程调度:基础任务调度、Map与Reduce函数的执行
事务处理:失效结点处理
各个部分之间的关系如图所示:
MapReduce的执行
MapReduce程序运行流程
以wordcount为例,任务处理分为split、map、shuffle、reduce、output
MapReduce计算框架
这里需要了解几个概念
- 作业(Job):MapReduce程序指定的一个完整计算过程;一个作业在执行过程中可以被拆分为若干Map和Reduce任务完成。
- 任务(Task):MapReduce框架中进行并行计算的基本事务单元;分为Map和Reduce任务,一个作业通常 包含多个任务。
- JobClient:替程序与MapReduce运行框架交互的对象
- JobTracker:MapReduce框架的管理者;协调MapReduce作业;分配任务;监控任务
- TaskTracker:执行JobTracker分配的任务;分为Map和Reduce两类
程序执行流程的分解动作
作业启动
作业初始化
- MapReduce程序创建新的JobClient实例
- JobClient向JobTracker请求获得一个新的JobId标识本次作业
- JobClient将运行作业需要的相关资源放入作业对应的HDFS目录、计算分片数量和map任务数量
- 向JobTracker提交作业,并获得作业的状态对象句柄
作业调度
- 作业提交请求放入队列等待调度
- 从HDFS中取出作业分片信息,创建对应数量的TaskInProgress调度和监控Map任务
Map任务执行:作业调度完成后,每个client都收到了相应的计算任务
- 从HDFS提取相关资源(Jar包、数据)
- 创建TaskRunner运行Map任务
- 在单独的JVM中启MapTask执行map函数
- 中间结果数据定期存入缓存
- 缓存写入磁盘
- 定期报告进度
shuffle:这个过程大致可以理解成为Reduce构造输入数据,因此整个过程包括:Map端保存、Partition、Sort、Combine、Reduce端拉取,最终将经过Map阶段处理之后具有相同key的数据聚集到一台机器上处理
Reduce任务执行
- 分配Reduce任务
- 创建TaskRunner运行Reduce任务
- 在单独的JVM中启 动ReduceTask执行 reduce函数
- 从Map节点下载中间结果数据
- 输出结果临时文件
- 定期报告进度
作业完成
- 4.6/5.6 进度更新
- 6.1 JobClient轮询获知任务完成
- 6.2 通知用户
底层数据管理系统
底层的数据管理系统由数据存储Hbase和文件存储HDFS共同构成,关于这部分将会在下一篇中进行更加详细的介绍。
总结
这次我们把Hadoop的系统结构以及其比较重要的MapReduce程序的执行流程都介绍了一下,关于数据管理系统下次进行介绍,敬请期待~