在Hadoop中,我了解主节点(Namenode)负责在从属机器(Datanode)中存储数据块。
当我们从主设备使用-copyToLocal
或-get
时,可以将文件从HDFS复制到主节点的本地存储。奴隶是否可以将存储在其中的块(数据)复制到自己的本地文件系统?
例如,128 MB的文件可以分成2个从属节点,每个节点存储64 MB。有没有办法让奴隶识别并将这块数据加载到本地文件系统?如果是这样,如何以编程方式完成?在这种情况下,命令-copyToLocal
或-get
也可以使用吗?请帮忙。
答案 0 :(得分:0)
简答:否
无法直接从data/files
复制Datandode
。原因是,Datanodes
存储数据,但它们没有关于存储文件的任何元数据信息。对于他们来说,它们只是位和字节的块。文件的元数据存储在Namenode
中。此元数据包含有关文件的所有信息(名称,大小等)。除此之外,Namenode
还会跟踪文件的哪些块存储在Datanodes
上。当实际文件在多个块中拆分时,Datanodes
也不知道块的排序。
答案 1 :(得分:0)
在这种情况下,是否可以使用命令-copyToLocal或-get?
是的,你可以简单地从奴隶运行这些。然后,从站将联系namenode(如果您已正确配置它)并将数据下载到本地文件系统。
它没有做的是"短路"复制,它只会复制目录之间的原始块。也无法保证它会从本地计算机上读取块,因为您的命令行客户端并不知道它的位置。
答案 2 :(得分:0)
您可以使用distcp
用法:distcp slave1address slave2address