我是Hadoop的新手。
当我使用hadoop -fs put
commoad存储Excel文件时,它存储在HDFS中。
复制因子为3。
我的问题是:是否需要3份副本并将它们分别存储到3个节点中?
答案 0 :(得分:9)
这是HDFS工作的漫画。
答案 1 :(得分:2)
是否需要3份副本并将其存储在3个节点中。
答案是:否
复制在流水线 中完成 也就是它将文件的某些部分复制到datanode1,然后从datanode1复制到datanode2,从datanode1复制到datanode3
http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html#Replication+Pipelining
请参阅此处了解复制流水线
答案 2 :(得分:1)
您的HDFS客户端(在这种情况下为hadoop fs)将被赋予块名称和数据节点位置(如果NameNode可以从机架感知脚本确定这一点,第一个是最近的位置)NameNode存储这些文件的位置
然后,客户端将块复制到最近的数据节点。然后,数据节点负责将块复制到第二个数据节点(最好是在另一个机架上),最后第二个数据节点将复制到第三个节点(与第三个数据节点在同一个机架上)。
因此,您的客户端只会将数据复制到其中一个数据节点,框架将负责数据节点之间的复制。
答案 3 :(得分:0)
它会将原始文件存储到一个(或大文件的情况下)块中。这些块将被复制到另外两个节点。
编辑:我的回答适用于Hadoop 2.2.0。我没有以前版本的经验。
答案 4 :(得分:0)
是的,它将在3个节点中复制(最多3个节点)。
Hadoop客户端将数据文件分解为较小的“块”,并将这些块放在整个群集中的不同计算机上。您拥有的块越多,能够并行处理此数据的机器就越多。同时,这些机器可能容易出现故障,因此可以安全地确保每个数据块同时在多台机器上,以避免数据丢失。
因此,每个块都将在加载时在群集中复制。 Hadoop的标准设置是拥有群集中每个块的(3)个副本。这可以使用文件hdfs-site.xml中的dfs.replication参数进行配置。
复制数据根本不是Hadoop的缺点,实际上它是使Hadoop有效的一个组成部分。它不仅为您提供了良好的容错能力,而且还有助于在靠近数据的情况下运行您的地图任务,以避免在网络上施加额外的负担(阅读有关数据的位置)。
答案 5 :(得分:0)
是的,它在hdfs中创建了n个(复制因子)数字副本
使用此命令查找文件的位置,找到存储的#rack,所有机架上的块名称是什么
hadoop fsck / path / to / your / directory -files -blocks -locations -racks
答案 6 :(得分:0)
使用此命令将数据加载到带复制的hdfs
hadoop fs -Ddfs.replication=1 -put big.file /tmp/test1.file
和-Ddfs.replication=1
您可以定义在将数据加载到hdfs