Hadoop默认没有开启机架感知功能,默认情况下每个Block都是随机分配DataNode,需要进行相关的配置,那么在NameNode启动时,会将机器与机架的对应信息保存在内存中,用于在HDFS Client申请写文件时,能够根据预先定义的机架关系合理的分配DataNode。
Hadoop机架感知默认对3个副本的存放策略为:
- 第1个Block副本存放在和HDFS Client所在的节点中(若HDFS Client不在集群范围内则随机选取)
- 第2个Block副本存放在与第一个节点不同机架下的节点中(随机选择)
- 第3个Block副本存放在与第2个副本所在节点的机架下的另一个节点中,如果还有更多的副本则随机存放在集群的节点中。
*使用此策略可以保证对文件的访问能够优先在本机架下找到,并且如果整个机架上发生了异常也可以在另外的机架上找到该Block的副本。
2.2 YARN
YARN是分布式资源调度框架(任务计算框架的资源调度框架),主要负责集群中的资源管理以及任务调度并且监控各个节点。
ResourceManager
- 是整个集群的资源管理者,管理并监控各个NodeManager。
- 处理客户端的任务请求。
- 启动和监控ApplicationMaster。
- 负责资源的分配以及调度。
NodeManager
- 是每个节点的管理者,负责任务的执行。
- 处理来自ResourceManager的命令。
- 处理来自ApplicationMaster的命令。
ApplicationMaster
- 数据切分,用于并行计算处理。
- 计算任务所需要的资源。
- 负责任务的监控与容错。
任务运行在YARN的流程
客户端提交任务请求到ResourceManager。
- ResourceManager生成一个ApplicationManager进程,用于任务的管理。
- ApplicationManager创建一个Container容器用于存放任务所需要的资源。
- ApplicationManager寻找其中一个NodeManager,在此NodeManager中启动一个ApplicationMaster,用于任务的管理以及监控。
- ApplicationMaster向ResourceManager进行注册,并计算任务所需的资源汇报给ResourceManager(CPU与内存)
- ResourceManager为此任务分配资源,资源封装在Container容器中。
- ApplicationMaster通知集群中相关的NodeManager进行任务的执行。
- 各个NodeManager从Container容器中获取资源并执行Map、Reduce任务。
2.3 MapReduce
MapReduce是分布式离线并行计算框架,高吞吐量,高延时,原理是将分析的数据拆分成多份,通过多台节点并行处理,相对于Storm、Spark任务计算框架而言,MapReduce是最早出现的计算框架。
MapReduce、Storm、Spark任务计算框架对比:
MapReduce执行流程
MapReduce将程序划分为Map任务以及Reduce任务两部分。
Map任务处理流程
- 读取文件中的内容,解析成Key-Value的形式 (Key为偏移量,Value为每行的数据)
- 重写map方法,编写业务逻辑,生成新的Key和Value。
- 对输出的Key、Value进行分区(Partitioner类)
- 对数据按照Key进行排序、分组,相同key的value放到一个集合中(数据汇总)
*处理的文件必须要在HDFS中。
Reduce任务处理流程
- 对多个Map任务的输出,按照不同的分区,通过网络复制到不同的reduce节点。
- 对多个Map任务的输出进行合并、排序。
- 将reduce的输出保存到文件,存放在HDFS中。
3.Hadoop的使用
3.1 安装
由于Hadoop使用Java语言进行编写,因此需要安装JDK。
从CDH中下载Hadoop 2.X并进行解压,CDH是Cloudrea公司对各种开源框架的整合与优化(较稳定)
- etc目录:Hadoop配置文件存放目录。
- logs目录:Hadoop日志存放目录。
- bin目录、sbin目录:Hadoop可执行命令存放目录。
etc目录
bin目录
sbin目录
3.2 Hadoop配置
1.配置环境 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|