将文件/块从HDFS复制到从属节点

时间:2015-09-13 05:45:37

标签: hadoop mapreduce hdfs distributed-computing

在Hadoop中,我了解主节点(Namenode)负责在从属机器(Datanode)中存储数据块。

当我们从主设备使用-copyToLocal-get时,可以将文件从HDFS复制到主节点的本地存储。奴隶是否可以将存储在其中的块(数据)复制到自己的本地文件系统?

例如,128 MB的文件可以分成2个从属节点,每个节点存储64 MB。有没有办法让奴隶识别并将这块数据加载到本地文件系统?如果是这样,如何以编程方式完成?在这种情况下,命令-copyToLocal-get也可以使用吗?请帮忙。

3 个答案:

答案 0 :(得分:0)

简答:否

无法直接从data/files复制Datandode。原因是,Datanodes存储数据,但它们没有关于存储文件的任何元数据信息。对于他们来说,它们只是位和字节的块。文件的元数据存储在Namenode中。此元数据包含有关文件的所有信息(名称,大小等)。除此之外,Namenode还会跟踪文件的哪些块存储在Datanodes上。当实际文件在多个块中拆分时,Datanodes也不知道块的排序。

答案 1 :(得分:0)

  

在这种情况下,是否可以使用命令-copyToLocal或-get?

是的,你可以简单地从奴隶运行这些。然后,从站将联系namenode(如果您已正确配置它)并将数据下载到本地文件系统。

它没有做的是"短路"复制,它只会复制目录之间的原始块。也无法保证它会从本地计算机上读取块,因为您的命令行客户端并不知道它的位置。

答案 2 :(得分:0)

您可以使用distcp

将特定文件或目录从一个从站复制到另一个从站

用法:distcp slave1address slave2address