一、大数据处理系统
大量节点服务器组成集群,用户根据需要输入不同处理请求,经过复杂计算过程,输出对应结果,整个计算过程对用户来说透明。 对于这个大量节点组成的数据处理系统,需要考虑的问题有很多,比如数据存储、数据处理、资源管理、容错性、扩展性、较好的吞吐量......等问题。在目前来说,Hadoop框架可以有效解决以上大部分问题,而且由于Hadoop对于集群上的节点硬件要求不高,因此目前很多公司都采用Hadoop作为解决方案。
二、Hadoop1.0简单回顾介绍
(1)Hadoop1.0包含了以下几个模块:
- Common(http、io、net等)
- HDFS(数据存储)
- MapReduce(数据处理、任务调度、资源调度)
其中,MapReduce和HDFS依赖于Common提供的通用功能。MapReduce同时依赖于HDFS提供的数据存储功能。
(2)HDFS架构
- Master/Slave架构(NameNode/DataNode)
- NameNode负责管理和控制文件读写(metadata保存在fsimage,修改保存在edits)
- DataNode负责存储具体文件block分块,并向NameNode定期汇报
- Secondary NameNode定期为NameNode合并fsimage和edits
- 文件被分成不同的block块,每块都会经过复制并存储到不同的DataNode上,提供高容错性。
- 提供接口尽量保证data-local数据处理。
- 缺点:单点故障问题、NameNode容易负载过大
(3)MapReduce架构
- JobTracker负责分配TaskTracker的资源和调度作业
- TaskTracker使用“slot”等量划分本节点上资源量(CPU、内存等)
- “slot”分为Map Slot和Reduce Slot两种,分别给Map Task和ReduceTask使用
- 集中式调度架构
- 缺点:可扩展性差、资源利用率低、多框架支持不足
三、Hadoop2.0特性介绍
(1)Hadoop2.0主要包含了以下几个模块:
- Common
- HDFS(新增HA、Federation特性,解决单点故障以及NameNode负载过大问题)
- YARN(任务调度和集群资源管理)(新增模块)
- MapReduce(基于YARN的数据处理)
(2)Hadoop 1.0 vs Hadoop 2.0
从图中可以看到HDFS在2.0里增加了HA(高可用性)特点。另外,1.0的MapReduce模块的功能被细化了。2.0中YARN是整个Hadoop的资源管理模块,MapReduce主要处理逻辑还是沿用1.0的,不过为了能够在YARN上运行,增加了不少处理。另外,2.0还允许不同的开源框架在YARN上一并共享集群资源。
(3)HDFS高可用性
- 利用共享存储来在两个NN间同步edits信息
- DN同时向两个NN汇报块信息
- Fence机制可以防止“脑裂”(两个Active NameNode)进行修改共享存储、一个NN响应客户端、一个NN向DN下发命令
- 用于监视和控制NN进程的ZKFailoverController进程
- 共享存储模块有NFS/QJM方案
- Fence有SSH/Shell方案
(4)HDFS Federation
- 多个NN共用一个集群里DN上的存储资源,每个NN都可以单独对外提供服务
- 每个NN都会定义一个存储池,有单独的id,每个DN都为所有存储池提供存储
- DN会按照存储池id向其对应的NN汇报块信息,同时,DN会向所有NN汇报本地存储可用资源情况
- Performance - 可以增加读写吞吐量
- Isolation - 有助于隔离不同用户的数据
(5)YARN模块介绍
- RM负责资源管理和调度控制
- AM负责与RM请求分配资源并分配给内部任务,通知NM启动/停止任务
- NM定期向RM汇报资源和Container状况
- Container作为YARN的一个抽象概念,封装了节点的多维度资源(CPU,内存),方便划分每个节点的资源
-
双层调度架构
-
分离资源管理ResourceManager/NodeManager和任务管理ApplicationMaster
-
支持多种框架共享集群,提高资源利用率
-
暂不支持动态资源管理、细粒度资源控制等
(6)MapReduce on YARN
- MRAppMaster - 实现MapReduce的ApplicationMaster
- Map/Reduce作业管理
- 向RM申请资源并且再分配到具体的Map/Reduce Task
- Container启动与释放
- 作业恢复
- 采用MRv1的Map/Reduce Task处理逻辑,在Shuffle阶段进行优化
四、基于YARN的开源框架
- Tez(DAG计算框架)Hive新引擎stinger基于Tez
- Spark(内存计算框架,可多个并行任务迭代计算)
- Impala (交互式低延迟基于HDFS的SQL引擎)
- Drill(Google’s Dremel的实现,低延迟基于HDFS的SQL引擎。YARN版本开发中)
- 还有各种例如图形计算等开源框架
五、Hadoop2.0升级过程问题
- 没有了Slot的概念,资源分配要显示指示集群可用内存以及CPU,要注意选择合适值,超过阀值会被杀死(可配置)
- HBase的0.94版本默认不兼容Hadoop2,选择升级到0.98版本
- HBase的lib依赖要替换为Hadoop2.6.0
- 需要更新服务器的GLIBC到2.14版本
- HDFS启用了NameService机制,因此必须更新Hive、HBase的metadata的hdfs location,如: hdfs://namenode.demo.com -> hdfs://mydemo
-
New Web UI 查看NameNode状态(NN1和NN2分别为Active和StandBy NameNode): http://namenode1.com:50070http://namenode2.com:50070 查看YARN状态(包括各个Application状态): http://yarnnode.com:8088