我在本地有一个文件a.txt,我想将该文件移动到hadoop文件系统(HDFS),如下所示,
hadoop fs -put a.txt/user/hive/warehouse/sample_db/sample_table /
当文件a.txt从本地移动到Hadoop位置时,后台发生了什么?
小智 7
在后台,源文件被拆分为HDFS块,其大小可配置(通常为128 MB,默认为64 MB).对于容错,每个块都由HDFS自动复制.默认情况下,每个块的三个副本将写入三个不同的DataNode.复制因子是用户可配置的(默认为3).DataNode是服务器,它们是物理机或虚拟机/云实例.DataNodes构成了Hadoop集群,您可以在其中编写数据并运行MapReduce/Hive/Pig/Impala/Mahout /等.程式.
DataNodes是Hadoop集群的工作者,NameNodes是主人.
当要将文件写入HDFS时,编写该文件的客户端从NameNode获得可以托管该文件的第一个块的副本的DataNode列表.
客户端安排一个管道,通过该管道,源文件的第一个块的所有数据字节将被传输到所有参与的DataNode.管道从客户端到第一个DataNode到第二个DataNode到最终(在我们的例子中为第三个)DataNode.数据被分成用于传输的分组,并且跟踪每个分组直到所有DataNode返回acks以指示数据的成功复制.数据包将流式传输到管道中的第一个DataNode,后者存储数据包并将其转发到第二个DataNode,依此类推.如果一个或多个复制失败,基础结构将自动构建新管道并重试该副本.
当所有三个DataNode确认复制成功时,客户端将前进到下一个块,再次从NameNode请求主机DataNode列表,并构建新管道.遵循此过程,直到所有块都已复制到HDFS中.写入的最后一个块可能小于配置的块大小,但是从第一个块到倒数第二个块的所有块都将具有配置的块大小.
参考:Hadoop:汤姆怀特的权威指南.
| 归档时间: |
|
| 查看次数: |
10982 次 |
| 最近记录: |