Hadoop是什么
- Hadoop是一个开源的大数据框架
- Hadoop是一个分布式计算的解决方案
- Hadoop = HDFS(分布式文件系统)+ MapReduce(分布式计算)
Hadoop核心
- HDFS分布式文件系统:存储是大数据技术的基础
- MapReduce编程模型:分布式计算是大数据应用的解决方案
Hadoop基础架构
HDFS概念
数据块
NameNode
DataNode
数据块:抽象块而非整个文件作为存储单;默认大小64MB一般设置为128M,备份X3。
NameNode:管理文件系统的命名空间,存放文件元数据;维护着文件系统的所有文件和目录,文件与数据块的映射;记录每个文件中各个块所在数据节点的信息。
DataNode:存储并检索数据块;向NameNode更新所存储块的列表。
HDFS优点
- 适合大文件存储,支持TB、PB级的数据存储,并有副本策略。
- 可以构建在廉价的机器上,并有一定的容错和恢复机制。
- 支持流式数据访问,一次写入多次读取最高效。
HDFS缺点
- 不适合大量小文件存储
- 不适合并发写入,不支持文件随机修改。
- 不支持随机读取等低延时的访问方式。
Hadoop各个功能模块的理解
1、HDFS模块
HDFS负责大数据的存储,通过将大文件分块后进行分布式存储方式,突破了服务器硬盘大小的限制,解决了单台机器无法存储大文件的问题,HDFS是个相对独立的模块,可以为YARN提供服务,也可以为HBase等其他模块提供服务。
2、YARN模块
YARN是一个通用的资源协同和任务调度框架,是为了解决Hadoop1.x中MapReduce里NameNode负载太大和其他问题而创建的一个框架。
YARN是个通用框架,不止可以运行MapReduce,还可以运行Spark、Storm等其他计算框架。
3、MapReduce模块
MapReduce是一个计算框架,它给出了一种数据处理的方式,即通过Map阶段、Reduce阶段来分布式地流式处理数据。它只适用于大数据的离线处理,对实时性要求很高的应用不适用。
延伸思考
- 如何通过Hadoop存储小文件?
a、在客户端将小文件合并为大文件。
Hadoop会把每一个小文件传递给map()函数,而Hadoop在调用map()函数时会创建一个映射器,这样就会创建了大量的映射器,应用的运行效率并不高。如果使用和存储小文件,通常就会创很多的映射器。解决小文件问题的主要目的就是通过合并小文件为更大的文件来加快Hadoop的程序的执行,解决小文件问题可以减少map()函数的执行次数,相应地提高hadoop作业的整体性能。
b、使用Hadoop的CombineFileInputFormat<K,V>实现小文件的合并。
使用Hadoop API(抽象类CombineFileInputFormat)来解决小文件的问题。抽象类CombineFileInputFormat的基本思想是通过使用一个定制的InputFormat允许将小文件合并到Hadoop的分片(split)或块(chunk)中。 - 当有节点故障的时候,集群是如何继续提供服务的,如何读、写?
- 哪些是影响MapReduce性能的因素?
a、硬件(或者资源)因素,如CPU、磁盘I/O、网络带宽和内存大小。
b、底层存储系统。
c、输入数据、分拣(shuffle)数据以及输出数据的大小,这与作业的运行时间紧密相关。
d、作业算法(或者程序),如map、reduce、partition、combine和compress。有些算法很难在MapReduce中概念化,或者在MapReduce中效率可能会降低。
HDFS写流程
1、客户端想NameNode发起写数据请求
2、分块写入DataNode节点,DataNode自动完成副本备份
3、DataNode向NameNode汇报存储完成,NameNode通知客户端
HDFS读流程
1、客户端向NameNode发起读数据请求
2、NameNode找出距离最近的DataNode节点信息
3、客户端从DataNode分块下载文件
MapReduce
MapReduce是一种编程模型,是一种编程方法,是抽象的理论。
- YARN概念(通用的资源协同和任务调度框架)
- ResourceManager
分配和调度资源、启动并监控ApplicationMaster、监控NodeManager - ApplicationMaster
为MR类型的程序申请资源,并分配给内部任务、负责数据的切分、监控任务的执行及容错 - NodeManager
管理单个节点的资源、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令
- ResourceManager
MapReduce四个阶段
- Split阶段
- Map阶段(需要编码)
- Shuffle阶段
- Reduce阶段(需要编码)
MapReduce编程模型
- 输入一个大文件,通过split之后将其分为多个分片
- 每个文件分片由单独的机器去处理,这就是Map方法
- 将各个机器计算的结果进行汇总并得到最终的结果,这就是Reduce方法。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/194980.html