【转载】Hadoop简介

【注】本文为搜集整理而成,并非原创,来源见文中链接或图片水印,如有侵权请联系删除。

Hadoop是一个分布式的系统生态

hadoop是一个用java编写的apache开源框架,是一个分布式的解决方案,提供分布式存储和计算。

hadoop框架主要包括四个模块:

hadoop Common:其他hadoop模块所需的java库和实用程序,这些库提供文件系统和操作系统级抽象,并包含启动hadoop所需的java文件和脚本。

hadoop yarn:一个用于作业调度和集群资源管理的框架。

hadoop distribute file system(HDFS):分布式文件系统,提供对应用程序数据的存储及高吞吐量的访问。

hadoop MapReduce:这个是基于yarn的用于并行处理大数据集的系统。

这四个模块的关系图:


其中,重点介绍HDSF及MapReduce

HDFS框架分析:

HDFS是主从结构,master和slave。主要由NameNode、Secondary NameNode、DataNode组成。



NameNode

管理HDFS的名称空间和数据块映射信息,存储元数据与文件到数据块映射的地方。当它运行的时候,这些信息是存在内存中的,但这些信息也可以持久化到磁盘上。

通常为了避免NameNode挂掉文件无法重组,会将Hadoop配置成HA即高可用集群,集群中有两个NameNode节点,一台active主节点,另一台stand-by备用节点,两者数据时刻保持一致。当主节点不可用时,备用节点马上自动切换。

Secondary NameNode

辅助NameNode,分担NameNode工作,紧急情况可辅助会服NameNode,注意它不是NameNode的备份,只是一个助手节点。

详细介绍可参看https://www.cnblogs.com/sddai/p/9281235.html

DataNode

slave节点,实际存储数据、执行数据块的读写并汇报存储信息给NameNode。

Block

一般用户数据存储在HDFS的文件中。文件系统中的文件被分成一个或多个端和 /或存储在各个数据节点中。这些文件段称为块。换句话说,HDFS可以读取或写入的最小数据量称为块。默认块的大小为64MB,但可以根据需要更改HDFS配置来增加。

HDFS文件的读写

文件按照数据块的方式进行存储在DataNode上,数据块是抽象块,作为存储和传输单元,而非整个文件。


文件按照块来存储,屏蔽了文件的概念,简化存储系统的设计,比如100T的文件大于磁盘的存储,需要把文件分成多个数据块进而存储到多个磁盘;为了保证数据的安全,需要备份的,而数据块非常适用于数据的备份,进而提升数据的容错能力和可用性。

数据块的大小设置要合理,如果设置太小,一般的文件也要被分割成多个数据块,那么在访问的时候也就要访问多个数据块地址,这样效率不高,同时也会对NameNode的内存消耗比较严重;数据块设置的太大,对并行的支持就不太好了,同时系统如果重启需要加载数据,数据块越大,系统恢复就会越长。

HDFS文件读流程

1、先向NameNode通信查询元数据(block所在的datanode节点),找到文件块所在的datanode服务器

2、挑选一台dataNode(就近原则,然后随机)服务器,请求建立socket流

3、datanode开始发送数据(从磁盘里面读取数据放入流,以packekt为单位来做校验)

4、客户端以packet为单位接收,先在本地缓存然后写入目标文件,后边的block块相当于是append到前面的block块最后合成最终需要的文件。

HDFS文件写流程

1、向namenode通信请求上传文件,NameNode检查目标文件是否已经存在,父目录是否存在。

2、NameNode返回确认可以上传。

3、client会先对文件进行切分,比如block块128M,文件有300M就会被切分成3个块,一个128M,一个128M,一个44M。请求第一个block该传输到哪些DataNode服务器上。

4、NameNode返回DataNode的服务器。

5、client请求一台DataNode上传数据,第一个DataNode收到请求会继续调用第二个DataNode,然后第二个调用第三个DataNode,将整个通道建立完成,逐级返回客户端。

6、client开始往A上传第一个block,当然在写入的时候DataNode会进行数据校验。第一台DataNode收到后就会传给第二台,第二台传给第三台。

7、当第一个block传输完成之后,client再次请求NameNode上传第二个block的服务器。

MapReduce介绍

MapReduce擅长处理大数据,它为什么具有这种能力呢?这可由MapReduce的设计思想发觉。MapReduce的思想就是“分而治之”。

  (1)Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。“简单的任务”包含三层含义:

一是数据或计算的规模相对原任务要大大缩小;二是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;三是这些小任务可以并行计算,彼此间几乎没有依赖关系。

  (2)Reducer负责对map阶段的结果进行汇总。至于需要多少个Reducer,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。


实体一:客户端,用来提交MapReduce作业。

实体二:JobTracker,用来协调作业的运行。

实体三:TaskTracker,用来处理作业划分后的任务。

实体四:HDFS,用来在其它实体间共享作业文件。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容