更改 Hadoop 中现有文件的块大小

Posted

技术标签:

【中文标题】更改 Hadoop 中现有文件的块大小【英文标题】:Change Block size of existing files in Hadoop 【发布时间】:2015-04-13 12:01:21 【问题描述】:

考虑一个 hadoop 集群,其中 hdfs-site.xml 中的默认块大小为 64MB。但是,后来团队决定将其更改为 128MB。以下是我对上述场景的问题?

    此更改是否需要重新启动集群,或者它会被自动占用并且所有新文件的默认块大小为 128MB? 块大小为 64M 的现有文件会怎样?配置中的更改会自动应用于现有文件吗?如果它会自动完成,那么什么时候完成 - 一旦完成更改或集群启动时?如果没有自动完成,那么如何手动进行这个块更改?

【问题讨论】:

【参考方案1】:

此更改是否需要重新启动集群或将被占用 自动,所有新文件的默认块大小为 128MB

需要重新启动集群才能使此属性更改生效。

块大小为 64M 的现有文件会怎样? 配置中的更改是否适用于现有文件 自动?

现有块不会改变它们的块大小。

如果不自动完成,那么如何手动进行这个块更改?

要更改现有文件,您可以使用 distcp。它将复制具有新块大小的文件。但是,您将不得不手动删除具有较旧块大小的旧文件。这是您可以使用的命令

hadoop distcp -Ddfs.block.size=XX /path/to/old/files /path/to/new/files/with/larger/block/sizes.

【讨论】:

【参考方案2】:

正如你提到的here :

    每当您更改配置时,您都需要重新启动 NameNode 和 DataNode 以使其行为发生变化。 不,不会。它将在旧文件上保留旧块大小。为了让它接受新的块更改,您需要重写数据。您可以对数据执行 hadoop fs -cp 或 distcp。新副本将具有新的块大小,您可以删除旧数据。

查看链接了解更多信息。

【讨论】:

【参考方案3】:

第 1 点 - 在 Hadoop 1.2.1 上,更改 hdfs-site.xml 文件中的 dfs.block.size 后不需要重新启动。文件块大小可以通过查看http://namenode:50070/dfshealth.jsp的Hadoop管理页面轻松验证

确保更改所有数据节点上的 dfs.block.size。

【讨论】:

以上是关于更改 Hadoop 中现有文件的块大小的主要内容,如果未能解决你的问题,请参考以下文章

更改 dfs 文件的块大小

Hadoop块大小和文件大小问题?

在 Hadoop 中更改文件拆分大小

Hadoop如何修改HDFS文件存储块大小

Hadoop MapReduce Block 与 InputSplit 的区别与联系

使用由列变量确定的块大小加载熊猫数据框