更改 dfs 文件的块大小

Posted

技术标签:

【中文标题】更改 dfs 文件的块大小【英文标题】:Change block size of dfs file 【发布时间】:2010-04-19 18:18:19 【问题描述】:

在解析一组特定文件(总共 2 TB)时,我的地图目前效率低下。我想更改 Hadoop dfs 中文件的块大小(从 64MB 到 128MB)。我无法在文档中找到仅针对一组文件而不是整个集群的操作方法。

上传时哪个命令会更改块大小? (比如从local复制到dfs。)

【问题讨论】:

不确定参数是否/何时更改,但现在称为“dfs.block.size”。 你为什么不改变你的地图缩小作业的分割大小? @ozw1z5rd AFAIK 您无法更改拆分大小或拆分数量。对于 MR2,它取决于您的块大小,并且在作业提交时会自动计算拆分的数量。 【参考方案1】:

对我来说,我不得不稍微更改 Bkkbrad 的答案以使其与我的设置一起使用,以防其他人稍后发现此问题。我在 Ubuntu 10.10 上运行了 Hadoop 0.20:hadoop fs -D dfs.block.size=134217728 -put local_name remote_location 我的设置不是fs.local.block.size,而是dfs.block.size

【讨论】:

注意 hadoop 2.0.4 的新变化:dfs.blocksize (hadoop.apache.org/docs/r2.0.4-alpha/hadoop-project-dist/…) dfs.blocksize: hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/…【参考方案2】:

我改变我的答案!您只需要在使用命令行时适当地设置fs.local.block.size 配置设置即可。

hadoop fs -D fs.local.block.size=134217728 -put local_name remote_location

原答案

您可以在使用 Hadoop API 创建文件时以编程方式指定块大小。不幸的是,您不能在命令行中使用hadoop fs -put 命令执行此操作。要做你想做的事,你必须编写自己的代码来将本地文件复制到远程位置;这并不难,只需为本地文件打开一个FileInputStream,使用FileSystem.create 创建远程OutputStream,然后使用Apache Commons IO 中的IOUtils.copy 之类的东西在两个流之间进行复制。

【讨论】:

使用上述命令后,我尝试检查文件中的块。 hdfs fsck hvr.out1 -files -blocks -locations。 hvr.out1 是我的文件。看起来它没有使用我指定的块大小进行拆分。相反,它使用了默认的块大小【参考方案3】:

你也可以像这样在你的程序中修改你的块大小

Configuration conf = new Configuration() ;

conf.set( "dfs.block.size", 128*1024*1024) ;

【讨论】:

此配置设置将如何影响已经以特定默认块大小存储的数据? Hadoop 2.5.2 128MB?【参考方案4】:

我们可以使用 hdfs-site.xml 文件中名为 dfs.block.size 的属性更改块大小。 笔记: 我们应该提到比特的大小。 例如 : 134217728 位 = 128 MB。

【讨论】:

你确定大小是位吗?在您的示例中,值 134217728 以字节为单位,而不是以位为单位。【参考方案5】:

在conf/文件夹中,我们可以更改配置文件hdfs-site.xml中dfs.block.size的值。 在 hadoop 1.0 版中,默认大小为 64MB,在 2.0 版中,默认大小为 128MB。

<property> 
    <name>dfs.block.size<name> 
    <value>134217728<value> 
    <description>Block size<description> 
<property>

【讨论】:

dfs.block.size134217728Block size 我们必须放置关闭标签/ 这会更新所有现有文件和新文件的块大小吗?

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

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

HDFS 块和 Input Splits 的区别与联系

我的块大小中没有足够的块 - PHP 下载脚本导致 20% 的文件大小下载

计算C中嵌套目录中文件的块大小

文件系统中的块大小和inode大小

Hadoop MapReduce Block 与 InputSplit 的区别与联系