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

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

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

【问题讨论】:

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

标签: hadoop


【解决方案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

【讨论】:

【解决方案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 我们必须放置关闭标签/
  • 这会更新所有现有文件和新文件的块大小吗?
猜你喜欢
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
相关资源
最近更新 更多