0

我的 Hadoop 版本是 2.5.2。我正在更改主节点上 hdfs-site.xml 文件中的 dfs.blocksize。我有以下问题:

1)此更改是否会影响 HDFS 中的现有数据 2)我是否需要将此更改传播到 Hadoop 集群中的所有节点或仅在 NameNode 上就足够了

4

4 回答 4

3

1)这个变化会影响HDFS中已有的数据吗

不,它不会。它将在旧文件上保留旧块大小。为了让它接受新的块更改,您需要重写数据。您可以对数据执行 ahadoop fs -cp或 a distcp。新副本将具有新的块大小,您可以删除旧数据。

2)我是否需要将此更改传播到 Hadoop 集群中的所有节点或仅在 NameNode 上就足够了?

我相信在这种情况下,您只需要更改 NameNode。然而,这是一个非常非常糟糕的主意。出于多种原因,您需要保持所有配置文件同步。当您对 Hadoop 部署更加认真时,您可能应该开始使用 Puppet 或 Chef 之类的东西来管理您的配置。

另外,请注意,无论何时更改配置,都需要重新启动 NameNode 和 DataNode 以使它们更改其行为。

有趣的注意事项:您可以在编写单个文件时设置它们的块大小以覆盖默认块大小。例如,hadoop fs -D fs.local.block.size=134217728 -put a b

于 2015-02-18T17:38:18.830 回答
1

o更改 hdfs-site.xml 中的块大小只会影响新数据。

于 2015-02-18T16:36:27.753 回答
1

您还应该对所有从属设备的 hdfs-site.xml 进行更改... dfs.block 大小应该在所有数据节点上保持一致。

于 2015-02-18T17:04:41.627 回答
1

您正在使用哪个发行版...通过查看您的问题,您似乎正在使用 apache 发行版..我能找到的最简单的方法是编写一个 shell 脚本首先删除奴隶中的 hdfs-site.xml

ssh username@domain.com 'rm /some/hadoop/conf/hdfs-site.xml'
ssh username@domain2.com 'rm /some/hadoop/conf/hdfs-site.xml'
ssh username@domain3.com 'rm /some/hadoop/conf/hdfs-site.xml'

稍后将 hdfs-site.xml 从主服务器复制到所有从服务器

scp /hadoop/conf/hdfs-site.xml username@domain.com:/hadoop/conf/ 
scp /hadoop/conf/hdfs-site.xml username@domain2.com:/hadoop/conf/ 
scp /hadoop/conf/hdfs-site.xml username@domain3.com:/hadoop/conf/ 

于 2015-02-18T17:15:45.580 回答