这篇文章将为大家详细讲解有关Java大数据开发中Hadoop的HDFS内部原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1、客户端向NameNode请求上传文件,NameNode会检查目标文件是否已存在,父目录是否存在。所以NameNode起到了统一管理的作用。
2、NameNode返回是否可以上传,NameNode知道每一个数据节点的情况。
3、客户端请求第一个块( block)上传到集群上哪几个DataNode服务器上。
4、NameNode返回3个DataNode节点,分别为dn1、dn2、dn3三个节点。集群在启动的时候NameNode就已经知道DataNode节点了、
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步)。
网络拓扑概念
在数据处理中,两个节点间的带宽作为距离的衡量标准。
节点距离:两个节点到达最近的共同祖先的距离总和。
例如,假设有数据中心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读数据的流程
1、客户端向NameNode请求下载文件,NameNode会通过查询元数据,找到DataNode地址,即文件块所在的地址。
2、挑选一台DataNode服务器,至于选哪一台机器是就近原则,然后随机 ,请求读取数据。
3、DataNode开始传输数据给客户端,从磁盘里面读取数据输入流,以packet为单位来做校验。
4、客户端以packet为单位接收,先在本地缓存,然后写入目标文件。
关于“Java大数据开发中Hadoop的HDFS内部原理是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。