文章目录
Hadoop的优势
- 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失
- 高拓展性:在集群间分配任务数据,可方便的拓展数以千计的节点
- 高效性:在MR的思想下,Hadoop是并行工作的,以加快任务处理速度
- 高容错性:能够自动将失败的任务重新分配
Hadoop的组成:
HDFS(数据存储)架构概述
HDFS时一个文件系统,用于存储文件,通过目录树来定义文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
使用场景:适合一次写入,多读读出的场景,且不支持文件的修改。适合用来做数据分析,不适合用来做网盘应用
优缺点:
优点——
1) 高容错,数据自动保存多个副本。它通过增加副本的形式,提高容错性。一个副本丢失之后,它自动恢复。
2)适合处理大数据。
3)可构建在廉价的机器上,通过多副本机制,提高可靠性。
缺点——
1)不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
2)无法高效的对大量小文件进行存储。存储大量的小文件,会占用NameNode大量的内存来存储文件目录和块信息。而且小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
3)不支持并发写入、文件随机修改。一个文件只能有一个写,不允许多个线程同时写。仅支持数据追加,不支持文件的随机修改。
NameNode(nn)
就是master,它是一个主管、管理者。
1) 管理HDFS的名称空间
2)配置副本策略
3)管理数据块(block)映射信息
4)处理客户端读写请求
存储文件的元数据,如文件名,文件目录结构,文件属性,以及每个文件的块列表和块所在的Datanode //书籍目录
DataNode(dn)
1)存储实际的数据块
2)执行数据块的读/写操作
在本地文件系统存储文件块数据,以及数据的校检和。 //书籍内容
Client客户端
1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的block,然后进行上传
2)与NameNode交互,获取文件的位置信息。
3)与DataNode交互,读取或写入数据。
4)Client提供一些命令来管理HDFS,比如NameNode格式化。
5)Client可用通过一些命令来对HDFS增删改查操作。
Secondary NameNode(2nm)
用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照;
并非是NameNode的热备,当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode;
2) 在紧急情况下,可辅助恢复NameNode
HDFS文件块的大小
HDFS中的文件在物理上是分块存储,块的大小可以通过配置参数来规定,默认大小在Hadoop2.0x版本是128M,老版本是64M。
HDFS块的设置大小取决于磁盘传输速率。
1)如果块的设置太小,会增加寻址时间,程序一直在找块的开始位置
2)如果块的设置太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
YARN(资源调度)架构概述
ResourceManager(RM)
- 处理客户端请求
- 监控NodeManager
- 启动或监控ApplicationMaster
- 资源的分配和调度
NodeManager(NM)
- 管理来自单个节点上的资源
- 处理来自ResourceManager的命令
- 处理来自ApplicationMaster的命令
ApplicationMaster(AM)
- 负责数据的切分
- 为应用程序申请资源并分配给内部的任务
- 任务的监控与容错
Container
Container的YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等
MapReduce架构
MapReduce将结果分为两个阶段:Map和Reduce
从HDFS内部看,一个文件储存到HDFS后,被分成一个或多个数据块(block),这些数据块存储在Datenode上。数据块与MapReduce的处理单位split相对应:
1.map任务处理
(a)读取文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一个map函数。
(b)在map函数中可以编写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
©对输出的key、value进行分区。
(d)对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中。
2.reduce任务处理
(a)对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
(b)对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、reduce处理,转换成新的key、value输出。
©把reduce的输出保存到文件中。