Hadoop的四大模块:
Hadoop Common:是一个公共的工具,为其他的Hadoop模块提供基础设施。
Hadoop DFS(HDFS):是一个能提供高可靠,高吞吐量的数据存储服务的分布式文件系统。
Hadoop MapReduce:是一个具有高容错和高扩展的分布式计算框架。
Hadoop Yarn:是一个负责集群资源管理和调度的分布式资源管理框架。
Hadoop的三大核心:
HDFS,MapReduce,Yarn。
HDFS:
HDFS采用的是主从架构模式,图中可以很明显的看出,是由一个主-NameNode(NN)带N个从-DataNode(DN)。
NN负责的功能:客户端请求的响应,元数据(文件名称,副本系数)的管理。
DN负责的功能:存储用户的文件对应的数据块Block,要定期向NN发送心跳信息,汇报自身以及Block信息和健康状况。
HDFS的优点
高容错性:数据自动保存多个副本且丢失后会自动恢复。
适合一次写入多次读取的场景。
适合批处理和大数据处理。
MapReduce:
MapReduce是一个用于处理海量数据的运算的分布式计算框架。
MapReduce的组成阶段:
input:输入数据。
splitting:将数据分片,通常大小与HDFS分块一致,也可以调节。
record reader:通过输入格式将输入split解析成记录。并将数据转化成key/value对的形式传递给mapper处理。
mapping:处理record reader解析的每个key/value对来产生0个或多个新的key/value对结果。
shuffing:数据从map中出来到reduce之前成为shuffle阶段,将maptask输出的处理结果数据分发给reducetask。
reduce:一个实现单词计数的规约过程。
final result:最后得到词频统计。
MapReduce的特点:
易于编程,高容错性。
Map阶段并行处理输入数据,Reduce阶段对Map结果进行汇报。用户只需要编写map()和reduce()两个函数,就能完成简单的分布式程序设计。
由于MapReduce1.0的各种缺点,比如:资源利用率低,无法支持多种计算框架,可靠性差。所以Hadoop2.0推出了资源管理器Yarn,有效解决了这些问题。
Yarn:
Yarn是一种新的hadoop资源管理器,它对MapReduce1.0框架进行了设计重构。
它是一个可以为上层应用提供统一的资源管理和调度的通用资源管理系统。
ResourceManager(RM):
负责集群资源的统一管理和调度。
处理客户端的请求:提交一个作业,杀死一个作业。
监控NM,一旦有一个NM挂了,那么这个NM上运行的任务需要告诉AM如何处理。
NodeManager(NM):
负责自身节点管理和使用。
定时向RM汇报自身资源使用情况,并接收处理来自RM的各种指令。
处理来自AM的命令。
单个节点的资源管理。
ApplicationMaster(AM):
为应用程序向RM申请资源,分配给内部mask。
需要与NM通信:启动/停止mask。
Container:
封装了CPU,Memory等资源的容器。
是一个任务运行环境的抽象。
Client:
提交作业,查询作业的运行进度,杀死作业。
Yarn的工作流程:
1.用户向Yarn中提交应用程序。
2.RM为该应用程序分配第一个container,并与对应的NM通信,要求它在这个container中启动应用程序的AM。
3.AM首先向RM注册,这样用户可以直接通过RM查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,重复4~7,直到结束。
4.AM采用轮询的方式通过RPC协议向RM申请和领取资源。
5.一旦AM申请到资源后,便与对应的NM通信,要求它启动任务。
6.NM为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
7.各个任务通过某个RPC协议向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向AM查询应用程序的当前运行状态。
8.应用程序运行完成后,AM向RM注销并关闭自己。