Hadoop的核心组件有HDFS、MapReduce和Yarn,以及其他常用组件如:HBase、Hive、Hadoop Streaming、Zookeeper等。具体如下图:
HDFS:分布式海量数据存储功能
Yarn:提供资源调度与任务管理功能
资源调度:根据申请的计算任务,合理分配集群中的计算节点(计算机)。
任务管理:任务在执行过程中,负责过程监控、状态反馈、任务再调度等工作。
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
HDFS数据格式详解:
文件格式:文件格式按面向的存储形式不同,分为面向行和面向列的两大类文件格式。
压缩格式:压缩格式按其可切分计算性,分为可切分计算和不可切分计算两种
MapReducer的流程:Pre-map 对数据进行切割,分成多个split。Map 把数据转换成K,V形式,然后进行partition分区并且排序,然后进行combine本地聚合,然后到shuffle ,拷贝map节点的数据,然后进行文件合并,然后sort排序,然后到reducer阶段,对数据聚合,然后输出到hdfs上。
流程图如下:
在平台上运行 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可能会导致数据出现不一样的情况。
运行流程图如下:
Yarn特点:
资源管理与计算框架解耦设计,一个集群资源共享给上层各个计算框架,按需分配,大幅度提高资源利用率
运维成本显著下降,只需运维一个集群,同时运行满足多种业务需求的计算框架
集群内数据共享一致,数据不再需要集群间拷贝转移,达到共享互用
避免单点故障、集群资源扩展得到合理解决
Yarn常用调度策略:
1先进先出:排队进行任务的处理,先到先做
2容器调度器:允许多用户共享整个集群,每个用户或组织分配专门的队列,不支持抢占式。队列内部默认使用FIFO,也支持Fair调度
3公平调度器:目标是为所有用户分配公平的资源。也支持多用户共享集群,也可划分多队列。队列内部不是FIFO,而是采用公平分配的方式。
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