HDFS
HDFS概述
HDFS(Hadoop Distributed File System)是 Hadoop 项目的一个子项目。是 Hadoop 的核心组件之一, Hadoop 非常适于存储大型数据 (比如 TB 和 PB),其就是使用 HDFS 作为存储系统. HDFS 使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统
HDFS架构
HDFS有三个核心组件,分别是NameNode,DataNode,SecondaryNamenode:
NameNode:存储数据的元数据信息,不存储具体的数据
-管理HDFS的名称空间
-管理数据库的映射信息
-配置副本测量
-处理客户端读写请求
DataNode:负责管理用户的文件数据块,每一个数据块都可以在多个 DataNode 上存储多个副本,默认为3个。
-存储实际的数据库
-执行数据块的读写操作
SecondaryNamenode:最主要作用是辅助 NameNode 管理元数据信息。
HDFS的特性
HDFS的读写流程
读流程
1.客户端发送请求到NAMENODE
2.NAMENODE检查是否有权限,读取的文件是否存在,如果存在的话,
如果都无误则将文件所在最近的DataNode的节点位置,发送给客户端部分或者全部的DataNode的节点位置
3.客户端得到文件块存储的位置后,会调用read()方法,去读取数据
4.在读取之前会先进行一个checksum的操作,去判断一下校验和是否正确,正确则读,不正确则去下一个存放该block块的DataNode节点上读取
5.读取完NameNode这次发送过来的所有的block块后,会再去询问是否还有block块,如果有则接着读取,如果没有则调用close方法,将读取到的文件合并成一个大文件
写流程
1.客户端提交请求到NAMENODE的同时,把文件切分成block块
2.NAMENODE检查是否权限,同时上传位置的父级目录是否存在,没问题的话,就找到三个DATANODE的地址,然后我们可以称之为ABC,返回给客户
3.客户端会去ABC三个DataNode节点上建立pipeline A-B B-C然后C建立完成后会将结果返回给B B返回给A A返回给客户端
4.开始往A写入 依次进行流水线的复制,重复上述过程就完成写入
总结:从 HDFS 文件读写过程中,可以看出,HDFS 文件写入时是串行写入的,数据包先发送给节点A,然后节点A发送给B,B在给C;而HDFS文件读取是并行的, 客户端 Client 直接并行读取block所在的节点。
HDFS的其他功能
1.本地文件拷贝scp
2.不同集群就是distcp
hadoop归档文件archive
二、MapReduce
MapReduce的概念
MapReduce思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。
Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
Reduce负责“合”,即对map阶段的结果进行全局汇总。
MapReduce运行在yarn集群
-ResourceManager
-NodeManager
MapReduce 编程规范
1.map有两个阶段,shuffle有四个阶段,reduce有两个阶段
MAP:
-设置 InputFormat 类, 将数据切分为 Key-Value(K1和V1) 对, 输入到第二步
-自定义 Map 逻辑, 将第一步的结果转换成另外的 Key-Value(K2和V2) 对, 输出结果
SHUFFLE
-对输出的 Key-Value 对进行分区
-对不同分区的数据按照相同的 Key 排序
-对数据进行分组, 相同 Key 的 Value 放入一个集合中
REDUCE
-对多个 Map 任务的结果进行排序以及合并, 编写 Reduce 函数实现自己的逻辑, 对输入的 Key-Value 进行处理, 转为新的 Key-Value(K3和V3)输出
-设置 OutputFormat 处理并保存 Reduce 输出的 Key-Value 数据
yarn的架构和原理
YARN是Hadoop2引入的通用的资源管理和任务调度的平台,可以在YARN上运行MapReduce、Tez、Spark等多种计算框架,只要计算框架实现了YARN所定义的接口,都可以运行在这套通用的Hadoop资源管理和任务调度平台上。
MAPREDUCE的缺点:
扩展性差,可靠性低,资源利用率低,不支持多种计算框架
YARN的优点:
数据可共享,运维成本低,资源利用率高,支持多种计算框架