Java大数据开发(三)Hadoop(10)-HDFS理论

2021年11月21日 阅读数:3
这篇文章主要向大家介绍Java大数据开发(三)Hadoop(10)-HDFS理论,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
导读:咱们已经掌握了Java操做HDFS,可是对于hdfs的内部流程,却没有掌握,接下来就一块儿看一下hdfs的内部理论吧。

HDFS写数据流程


一、客户端向NameNode请求上传文件,NameNode会检查目标文件是否已存在,父目录是否存在。因此NameNode起到了统一管理的做用。java


二、NameNode返回是否能够上传,NameNode知道每个数据节点的状况。面试


三、客户端请求第一个块( block)上传到集群上哪几个DataNode服务器上。缓存


四、NameNode返回3个DataNode节点,分别为dn一、dn二、dn3三个节点。集群在启动的时候NameNode就已经知道DataNode节点了、服务器


五、客户端请求dn1上传数据,dn1收到请求会继续调用dn2,而后dn2调用dn3,将这个通讯管道创建完成。微信


六、dn一、dn二、dn3依次逐级应答客户端。网络


七、客户端开始往dn1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,dn1收到一个packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。大数据


八、当一个block传输完成以后,客户端再次请求NameNode上传第二个block的服务器。(重复执行3-7步)。spa


网络拓扑概念.net


在数据处理中,两个节点间的带宽做为距离的衡量标准。3d


节点距离:两个节点到达最近的共同祖先的距离总和。


例如,假设有数据中心d1(d1为集群)机架r1中的节点n1。该节点能够表示为/d1/r1/n1。利用这种标记,这里给出四种距离描述。


Range(/d1/r1/n1, /d1/r1/n1)=0(同一节点上的进程)

Range(/d1/r1/n1, /d1/r1/n2)=2(同一机架上的不一样节点)

Range(/d1/r1/n1, /d1/r3/n2)=4(同一数据中心不一样机架上的节点)

Range(/d1/r1/n1, /d2/r4/n2)=6(不一样数据中心的节点)


注意:

对于n0 n1 n2 ,机架r1是共同祖先
对于机架r1 机架r12 机架r13,集群d1是共同祖先

依次类推......



举例:为何Range(/d1/r1/n1, /d2/r4/n2)=6?



副本存储节点选择




第一个副本在集群节点上,随机选一个。


第二个副本和第一个副本位于相同机架上,但节点是随机的。


第三个副本位于不一样机架的随机节点上。


HDFS读数据的流程



一、客户端向NameNode请求下载文件,NameNode会经过查询元数据,找到DataNode地址,即文件块所在的地址。


二、挑选一台DataNode服务器,至于选哪一台机器是就近原则,而后随机 ,请求读取数据。


三、DataNode开始传输数据给客户端,从磁盘里面读取数据输入流,以packet为单位来作校验。


四、客户端以packet为单位接收,先在本地缓存,而后写入目标文件。


今天咱们主要介绍的内容是HDFS读写的流程,以及节点之间如何计算距离,这些在有些面试的时候,会常常问到。


关注「跟我一块儿学大数据」

跟我一块儿学大数据

本文分享自微信公众号 - 跟我一块儿学大数据(java_big_data)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。