一、背景:
Google首先遇到的大数据存储、计算、搜索问题,在解决这些问题的过程中,发表了GFS、Map-Reduce、Bigtable三篇论文。为后来的大数据提供参考和思想。
二、hadoop组件构成
hdfs:分布式文件存储系统
MapReduce:分布式计算处理框架
yarn:资源调度
三、hadoop2.0时期架构图
四、各个组件部分介绍(这里只介绍hdfs,MapReduce,yarn,至于其他相关组件,详细可以参考我的其他针对模块)
1.HDFS:
简述:分布式文件存储系统,只负责存储数据,大小默认为256M(之前有64M,到128M,现在为256M,可以人为设置,最小为1M),将数据切割为若干个block分散存储在集群节点中。副本数默认为3个,实际生产中为了节省空间,部分公司会设置为2,已上传的文件block数可以修改,大小不变。
结构:
①client:负责与namenode交互元数据信息,提交用户想要执行的操作
②NameNode:存储文件的元数据信息,配置副本策略及其他信息,处理客户端提交的读写请求
③DataNode:存储实际的数据文件,执行对数据的读写操作
④Secondary NameNode:定期合并 fsimage 和 edits推送给NameNode,当NameNode宕机重启后,会先去读取推送的文件,最大限度保证数据不会丢失
读写流程及原理:
https://blog.csdn.net/fly_sky333/article/details/106874396
官方文档介绍:
http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Replica_Selection
2.MapReduce(由于现在很少会有公司去要求写MR,所以这里代码部分就不过多介绍了):
简述:MapReduce作为hadoop的核心计算框架,将客户端编写的业务逻辑代码和自带组件整合,最终成为一个完整的分布式运算程序,跑在hadoop集群上。
核心思想:基于处理海量数据的计算,采取先分后总的思想,将需要处理的数据先根据数据量大小,文件数量,通过调节参数来分为若干份小文件,在map阶段并行执行,执行结果进入不同的reduce进行汇总计算。
阶段:
①mapper:获取数据,按自定义方式去对数据进行切分,组合
②reducer:接收到mapper输出的数据,按照目标格式编写聚合程序进行汇总计算
③driver:将MapReduce和相关运行参数封装好后提交到yarn
切片和块:
这里要区分切片和块不是一回事,切片大小默认等于块大小,但是切片是逻辑上的,块是物理上的。切片是对单个文件的划分操作,块是在hdfs上存储的文件大小,默认256M。例:现在有两个文件,大小分别为300M,12M。切片大小和块大小和划分规则 参数等都是默认值(这里可以通过参数设置块大小,也可以通过setInputFormatClass来设置切片大小),那么在划分并行度的时候,会分为3个,也就是3个切片(256M,44M,12M),这样最后落到hdfs上的数据块大小就是256M,44M,12M这三个。
shuffle过程及细节:
https://blog.csdn.net/fly_sky333/article/details/106885673
3.yarn:
简述:对集群上的任务,资源进行统一管理,作业调度,监控。
结构:
①ResourceManager:1)处理客户端请求。2)监控nodemanager。3)启动和监控ApplicationManager。4)资源的分配与调度
②NodeManager:1)管理单个节点上的资源。2)处理来自ResourceManager的命令。3)处理来自ApplicationMaster的命令
③ApplicationMaster:1)负责数据的切分。2)为应用程序为申请资源并且分配任务。3)任务的监控与容错
④Container:作为yarn中资源的抽象,封装了某个节点上的多维度资源,如内存,CPU,磁盘,网络
实际应用:(后面补充)