当我在hdfs中存储文件时,它们会被复制吗?

fnatzsnv  于 2021-06-04  发布在  Hadoop
关注(0)|答案(7)|浏览(375)

我是hadoop新手。
当我使用 hadoop -fs put commoad,它存储在hdfs中。
复制因子是3。
我的问题是:它是否需要3个副本,并将它们分别存储到3个节点中?

8ljdwjyq

8ljdwjyq1#

它是否需要3个副本并将它们分别存储到3个节点中。
答案是:没有

复制是在流水线中完成的,即它将文件的一部分复制到datanode1,然后从datanode1复制到datanode2,从datanode1复制到datanode3
http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html#replication+流水线
请参见此处了解复制管道

ia2d9nvy

ia2d9nvy2#

您的hdfs客户机(在本例中为hadoop fs)将被赋予块名和datanode位置(如果namenode可以从rack awareness脚本中确定这一点,则第一个位置是最近的位置)namenode将这些文件存储在何处。
然后,客户机将这些块复制到最近的数据节点。然后,数据节点负责将数据块复制到第二个数据节点(最好是在另一个机架上),最后第二个数据节点将复制到第三个数据节点(与第三个数据节点在同一机架上)。
因此,您的客户机将只将数据复制到其中一个数据节点,而框架将负责数据节点之间的复制。

mgdq6dx1

mgdq6dx13#

是的,它将在3个节点中复制(最多3个节点)。
hadoop客户机将把数据文件分解成更小的“块”,并将这些块放在集群中不同的机器上。您拥有的块越多,能够并行处理这些数据的机器就越多。同时,这些机器可能容易发生故障,因此确保每个数据块同时位于多台机器上是安全的,以避免数据丢失。
因此,每个块都将在集群中作为其加载的数据块进行复制。hadoop的标准设置是集群中每个块有(3)个副本。这可以使用文件hdfs-site.xml中的dfs.replication参数进行配置。
而复制数据根本不是hadoop的缺点,事实上它是hadoop有效性的组成部分。它不仅为您提供了良好的容错性,而且有助于在靠近数据的位置运行map任务,以避免给网络带来额外的负载(了解数据位置)。

pbgvytdp

pbgvytdp4#

使用此命令可以通过复制将数据加载到hdfs中 hadoop fs -Ddfs.replication=1 -put big.file /tmp/test1.file 以及 -Ddfs.replication=1 您可以定义将数据加载到hdfs时将创建的复制副本数

z2acfund

z2acfund5#

这是一个漫画的hdfs工作。
https://docs.google.com/file/d/0b-zw6khotbt4mmrkzwjjyzetyji3ni00ntfjlwe0ogitytu5ogmxyjc0n2m1/edit?pli=1

fdbelqdn

fdbelqdn6#

它将原始文件存储到一个(或多个在大文件的情况下)块。这些块将被复制到另外两个节点。
编辑:我的答案适用于hadoop2.2.0。我没有以前版本的经验。

vd8tlhqk

vd8tlhqk7#

是的,它在hdfs中生成n个拷贝(复制因子)
使用此命令查找文件的位置,查找存储的#机架,所有机架上的块名是什么
hadoop fsck/path/to/your/directory-文件-块-位置-机架

相关问题