我的Hadoop版本是2.5.2。我正在主节点上的hdfs-site.xml文件中更改我的dfs.blocksize。我有以下问题:
1)此更改是否会影响HDFS中的现有数据 2)我是否需要将此更改传播到Hadoop集群中的所有节点或仅在NameNode上足够
答案 0 :(得分:3)
1)此更改是否会影响HDFS中的现有数据
不,它不会。它将保留旧文件的旧块大小。为了使其更改新块,您需要重写数据。您可以对数据执行hadoop fs -cp
或distcp
。新副本将具有新的块大小,您可以删除旧数据。
2)我是否需要将此更改传播到Hadoop集群中的所有节点或仅在NameNode上足够?
我相信在这种情况下你只需要更改NameNode。但是,这是一个非常糟糕的主意。出于多种好的原因,您需要保持所有配置文件同步。当您对Hadoop部署更加认真时,您应该开始使用Puppet或Chef之类的东西来管理您的配置。
另请注意,无论何时更改配置,都需要重新启动NameNode和DataNode,以便更改其行为。
有趣的提示:您可以在编写单个文件时设置块大小以覆盖默认块大小。例如,hadoop fs -D fs.local.block.size=134217728 -put a b
答案 1 :(得分:1)
在hdfs-site.xml中修改块大小只会影响新数据。
答案 2 :(得分:1)
你应该在所有从站的hdfs-site.xml中进行更改... dfs.block size应该在所有datanode上保持一致。
答案 3 :(得分: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从master复制到所有从属
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/