Hadoop的核心组件有HDFS、MapReduce和Yarn,以及其他常用组件如:HBase、Hive、Hadoop Streaming、Zookeeper等。具体如下图:

hadoop组件结构图 hadoop各组件_Hadoop

 

  • HDFS:分布式海量数据存储功能
  • Yarn:提供资源调度与任务管理功能
  1. 资源调度:根据申请的计算任务,合理分配集群中的计算节点(计算机)。
  2. 任务管理:任务在执行过程中,负责过程监控、状态反馈、任务再调度等工作。
  • MapReduce:分布式并行编程模型和计算框架。解决分布式编程门槛高的问题,基于其框架对分布式计算的抽象map和reduce,可以轻松实现分布式计算程序。
  • Hive:提供数据摘要和查询的数据仓库。解决数据仓库构建问题,基于Hadoop平台的存储与计算,与传统SQL相结合,让熟悉SQL的编程人员轻松向Hadoop平台迁移。
  • Streaming:解决非Java开发人员使用Hadoop平台的语言问题,使各种语言如C++、python、shell等均可以无障碍使用Hadoop平台。
  • HBase:基于列式存储模型的分布式数据库。解决某些场景下,需要Hadoop平台数据及时响应的问题。

Zookeeper:分布式协同服务。主要解决分布式下数据管理问题:统一命名、状态同步、集群管理、配置同步等。

Hdfs架构设计图及各主要模块和运行流程:

Hdfs主要有:namenode:管理元数据,DataNode:储存数据,client 和客户端交互。有两个模块 一个是读文件 一个是写文件。

读文件的流程:client 接收到请求,client 请求namenode获取文件的位置,然后client读取DataNode上的数据,在客户端处理好之后给用户。

写文件的流程:client接收到请求,client 请求namenode询问应该把数据放到哪里。然后client流式储存这个数据到block上,然后这个数据复制到备份机上,备份机存好之后。另外一台备份机上再存储一次。

HDFS高可用性措施

1 冗余备份 2 跨机架副本存放 3 心跳检测 4 数据完整性检测 5 安全模式 6 核心文件备份 7 空间回收。

HDFS的主要命令有:

Hdfs dfs -ls

Hdfs dfs -put

Hdfs dfs -mkdir

Hdfs dfs -get

Hdfs dfs -help

Hdfs dfs -cat

Hdfs dfs -rm

Hdfs dfs -text

Hdfs dfs -touch

Hdfs dfs -cp

hadoop组件结构图 hadoop各组件_Hadoop_02

HDFS数据格式详解:

文件格式:文件格式按面向的存储形式不同,分为面向行和面向列的两大类文件格式。

hadoop组件结构图 hadoop各组件_hdfs_03

压缩格式:压缩格式按其可切分计算性,分为可切分计算和不可切分计算两种

hadoop组件结构图 hadoop各组件_hdfs_04

 

 

MapReducer的流程:Pre-map 对数据进行切割,分成多个split。Map 把数据转换成K,V形式,然后进行partition分区并且排序,然后进行combine本地聚合,然后到shuffle ,拷贝map节点的数据,然后进行文件合并,然后sort排序,然后到reducer阶段,对数据聚合,然后输出到hdfs上。

流程图如下:

hadoop组件结构图 hadoop各组件_hdfs_05

在平台上运行 yarn jar testhdfs-jar-with-dependencies.jar 类名 +文件地址;

 MapReduce技术特征

1向“外”横向扩展,而非向“上”纵向扩展

2失效被认为是常态

3移动计算,把处理向数据迁移(数据本地性)

4顺序处理数据、避免随机访问数据

5推测执行

6平滑无缝的可扩展性

7为应用开发隐藏系统底层细节

Yarn双层调度架构设计图及各模块的主要作用和运行流程:

Yarn 主要是由resourcemanager,nodemanager,applicationmaster和container组成。

Resourcemanager的作用有:1处理客户端的请求,2监控nodemanager,3启动applicationmaster。4资源分配与调度。

Nodemanager的主要作用有:1管理单个节点上的资源,2处理resourcemanager的命令,3处理applicationmaster的命令。

Applicationmaster的作用有:1向resourcemanager汇报心跳,2向resourcemanager申请资源,开启任务,3 Applicationmaster负责task的管理。

Container的作用有:1是yarn中资源的抽象,Applicationmaster和task都运行在这里。要注意的是:使用Container可能会导致数据出现不一样的情况。

运行流程图如下:

hadoop组件结构图 hadoop各组件_hadoop_06

 

Yarn特点:

  • 资源管理与计算框架解耦设计,一个集群资源共享给上层各个计算框架,按需分配,大幅度提高资源利用率
  • 运维成本显著下降,只需运维一个集群,同时运行满足多种业务需求的计算框架
  • 集群内数据共享一致,数据不再需要集群间拷贝转移,达到共享互用
  • 避免单点故障、集群资源扩展得到合理解决

Yarn常用调度策略:

1先进先出:排队进行任务的处理,先到先做

hadoop组件结构图 hadoop各组件_Hadoop_07

2容器调度器:允许多用户共享整个集群,每个用户或组织分配专门的队列,不支持抢占式。队列内部默认使用FIFO,也支持Fair调度

hadoop组件结构图 hadoop各组件_mapreduce_08

 

3公平调度器:目标是为所有用户分配公平的资源。也支持多用户共享集群,也可划分多队列。队列内部不是FIFO,而是采用公平分配的方式。

hadoop组件结构图 hadoop各组件_hadoop_09

 

 

hadoop组件结构图 hadoop各组件_数据_10

 Yarn容错性说明

  • ResourceManager(RM) Failure

同时启动多个RM,基于Zookeeper实现HA避免单点故障,但同时只有一个是active状态

  • ApplicationMaster(AM) Failure

ApplicationMaster挂掉后,由ResourceManager负责重启。ResourceManager的ApplicationsManager模块会保存已经完成的Task,重启后无需重新运行。ApplicationMaster需要处理内部任务的容错问题,如Task Failure。

  • NodeManager(NM) Failure

若包含Task计算任务执行失败后,ApplicationMaster决定处理方法。若包含AM任务,则由RM重启一个新的Container运行AM。

  • Task Failure

通过心跳把信息反馈给AM,或者心跳超时被AM感知,由AM通过重试恢复Task。