Hadoop
Hadoop的简单介绍
分布式:
存储: hdfs : hadoop distributed file system
计算: mapreduce : map + shuffle + reduce
面向集群:
构成:
管理数据
Namenode * 2(Active | Standby)
Datanode * N
管理资源和任务
yarn
resourcemanager : 资源(CPU:MEN:DISK)
applicationManager : 任务(计算)
nodemanager * N
高可靠,高可用
副本机制: 3份
Hadoop的启动
# 首次启动
# 格式化 namenode
hdfs namenode -format
# 格式化 namenode 之后
cd /opt/software/hadoop-3.1.3/data/dfs/name/current
# 启动服务
start-all.sh
# 再次启动
# 单启或者关闭
hdfs --daemon start|stop HDFS_SERVICE_NAME
yarn --daemon start|stop YARN_SERVICE_NAME
mapred --daemon start historyserver
#群启或者关闭
start-dfs.sh
start-yarn.sh
hadoop启动后的进程
1698 NameNode
2018 SecondaryNameNode
2898 Jps
2419 NodeManager
1829 DataNode
2287 ResourceManager
hadoop启动后的服务
HDFS(Hadoop Distributed File System):
HDFS是Hadoop的分布式文件系统,它包括NameNode(主控节点)和多个DataNode(数据节点)
HDFS用于存储和管理数据,确保数据的高可用和容错性
YARN ResourceManager:
YARN ResourceManager是Hadoop的资源管理器,它负责集群中的资源分配和任务调度。
它包括两个主要组件:ResourceScheduler和ApplicationManager
YARN NodeManager:
YARN NodeManager运行在每个数据节点上,负责监控资源使用情况,并向ResourceManager注册节点上的可用资源,它还负责执行ResourceManager分配的任务。
MapReduce任务跟踪器和作业跟踪器:
这两个组件用于监视和跟踪MapReduce作业的执行状态和进度。
日志和监控:
Hadoop集群生成各种日志和指标,这些日志和指标可以用于监控和诊断集群性能、问题和健康状态。
Hadoop核心组件
HDFS
MapReduce
Yarn
一张图片带你简单了解前几篇文章简介
Hadoop心跳机制
NameNode和DataNode 心跳
1.确定 DataNode 的存活状态:
通过定期接收 DataNode 的心跳信号,NameNode 可以判断 DataNode 是否处于存活状态。
如果 NameNode 在一段时间内没有收到来自 DataNode 的心 跳信号,就会认为该 DataNode 宕机,并将其排除出集群。
2.收集块信息:
DataNode 在发送心跳信号时会附带自己持有的块信息,包括块的ID、长度和位置等。
NameNode 通过接收这些信息来了解集群中存储的数据块情况,以便进行块的管理和复制。
3.块报告:
如果 DataNode 发现自己存储的某个块丢失或损坏,它会在心跳信号中向 NameNode 发送块报告,提供有关损坏块的详细信息。
NameNode 接收到块报告后,可以采取相应措施修复或处理这些损坏的数据块。
NodeManager和ResourceManager 心跳
NodeManager是YARN资源管理器(ResourceManager)的组件,负责管理集群中的节点资源。
NodeManager会向ResourceManager发送心跳,汇报节点的可用资源和状态,ResourceManager使用这些信息来进行资源分配和容错管理。
Hadoop Job的一些优化手段
合并小文件
在执行MR任务前将小文件进行合并,大量的小文件会产生大量的Map任务,增大Map任务装载次数,而任务的装载比较耗时,从而导致MR运行较慢。
采用CombineTextInputFormat来作为输入,解决输入端大量小文件场景。
Map阶段优化
增大环形缓冲区大小,由 100m 扩大到 200m
增大环形缓冲区溢写的比例,由 80%扩大到 90%
减少对溢写文件的 merge 次数(10 个文件,一次 20 个 merge)
不影响实际业务的前提下,采用 Combiner 提前合并,减少 I/O
Reduce阶段优化
合理设置 Map 和 Reduce 数:
两个都不能设置太少,也不能设置太多。太少,会导致 Task 等待,延长处理时间;太多,会导致 Map、Reduce 任务间竞争资源,造成处理超时等错误。
设置 Map、Reduce 共存:
调整 slowstart.completedmaps 参数,使 Map 运行到一定程度后,Reduce 也开始运行,减少 Reduce 的等待时间。
合理规避使用 Reduce,因为 Reduce 在用于连接数据集的时候将会产生大量的网络消耗。