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