一、Hadoop架构
Hadoop1.0版本两个核心:HDFS+MapReduce
Hadoop2.0版本,引入了Yarn。核心:HDFS+Yarn+Mapreduce
Yarn是资源调度框架。能够细粒度的管理和调度任务。此外,还能够支持其他的计算框架,比如spark等。
二、HDFS
NameNode
名字节点。要管理元数据信息(Metadata),只存储元数据信息。
namenode对于元数据信息的管理,放在内存一份,供访问查询,也会通过fsimage和edits文件,将元数据信息持久化到磁盘上。
DataNode
数据节点。用于存储文件块。为了防止datanode挂掉造成的数据丢失,对于文件块要有备份,一个文件块有三个副本。
HDFS存储机制
写入:
1、客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。
2、namenode返回是否可以上传。
3、客户端请求第一个 block上传到哪几个datanode服务器上。
4、namenode返回3个datanode节点,分别为dn1、dn2、dn3。
5、客户端请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成
6、dn1、dn2、dn3逐级应答客户端
7、客户端开始往dn1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,dn1收到一个packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答
8、当一个block传输完成之后,客户端再次请求namenode上传第二个block的服务器。(重复执行3-7步)
读取:
1、客户端向namenode请求下载文件,namenode通过查询元数据,找到文件块所在的datanode地址。
2、挑选一台datanode(就近原则,然后随机)服务器,请求读取数据。
3、datanode开始传输数据给客户端(从磁盘里面读取数据放入流,以packet为单位来做校验)。
4、客户端以packet为单位接收,先在本地缓存,然后写入目标文件。
SecondaryNameNode工作机制
第一阶段:namenode启动
1、第一次启动namenode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
2、客户端对元数据进行增删改的请求
3、namenode记录操作日志,更新滚动日志。
4、namenode在内存中对数据进行增删改查
第二阶段:Secondary NameNode工作
1、SecondaryNameNode询问namenode是否需要checkpoint。直接带回namenode是否检查结果。
2、SecondaryNameNode请求执行checkpoint。
3、namenode滚动正在写的edits日志
4、将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode
5、SecondaryNameNode加载编辑日志和镜像文件到内存,并合并。
6、生成新的镜像文件fsimage.chkpoint
7、拷贝fsimage.chkpoint到namenode
8、namenode将fsimage.chkpoint重新命名成fsimage
NameNode与SecondaryNameNode 的区别与联系
区别:
1、NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
2、SecondaryNameNode主要用于定期合并命名空间镜像和命名空间镜像的编辑日志。
联系:
1、SecondaryNameNode中保存了一份和namenode一致的镜像文件(fsimage)和编辑日志(edits)。
2、在主namenode发生故障时(假设没有及时备份数据),可以从SecondaryNameNode恢复数据。
三、Hadoop常用命令
单进程启动 sbin/start-dfs.sh sbin/start-yarn.sh 格式化集群: hadoop namenode –formate --初次启动集群使用 hdfs常见命令: hadoop fs -ls / 以全路径的方式展示当前目录下及当前目录下所有子目录的全部文件,与linux系统下tree命令类似 hadoop fs -lsr / 显示目录下所有子目录或文件占用空间(逻辑空间) hadoop fs -du / 显示该目录所占用的实际空间 hadoop fs -count -q / hadoop fs -mv hadoop fs -cp hadoop fs -rm hadoop fs -rm -skipTrash 不进入回收站直接删除 hadoop fs -rmr / 递归删除文件夹所有文件 hadoop fs -expunge 清空回收站 hadoop fs -put 被上传文件 /上传文件
四、MapReduce
MapReduce运行流程
1、split阶段
2、map阶段
map阶段就是程序员编写的map函数了,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行。
3、shuffle阶段
shuffle阶段主要负责将map端生成的数据传递给reduce端,因此shuffle分为在map端的过程和在reduce端的执行过程。
在Map端的shuffle过程是对Map的结果进行分区(partition)、排序(sort)和分割(spill),然后将属于同一个划分的输出合并在一起并写在硬盘上,同时按照不同的划分将结果发送给对应的Reduce(Map输出的划分与Reduce的对应关系由JobTracker确定)。
Reduce端又会将各个Map送来的属于同一个划分的输出进行合并(merge),然后对merge的结果进行排序,最后交给Reduce处理。
4、reduce阶段
reduce对shuffle阶段传来的数据进行最后的整理合并
优缺点
优点:
1、易于编程
2、良好的扩展性
3、高容错性
4、适合PB级别以上的大数据的分布式离线批处理。
缺点:
1、难以实时计算(MapReduce处理的是存储在本地磁盘上的离线数据)
2、不能流式计算(MapReduce设计处理的数据源是静态的)
3、难以DAG计算MapReduce这些并行计算大都是基于非循环的数据流模型,也就是说,一次计算过程中,不同计算节点之间保持高度并行,这样的数据流模型使得那些需要反复使用一个特定数据集的迭代算法无法高效地运行。