dfs.block.size 用于本地 hadoop 作业?

Posted

技术标签:

【中文标题】dfs.block.size 用于本地 hadoop 作业?【英文标题】:dfs.block.size for Local hadoop jobs ? 【发布时间】:2012-03-19 16:26:43 【问题描述】:

我想运行一个 hadoop 单元测试,使用本地文件系统模式...我希望看到几个 part-m-* 文件写入磁盘(而不仅仅是 1 个)。但是,由于它只是一个测试,我不想处理 64M 的数据(我相信默认大小是每块 ~64megs)。

在分布式模式下,我们可以使用

dfs.block.size

我想知道是否有一种方法可以让我的本地文件系统将小部分 m 文件写出,即我的单元测试将模拟包含多个(尽管非常小的)文件的大规模数据的内容。

【问题讨论】:

【参考方案1】:

假设您的输入格式可以处理可拆分文件(请参阅org.apache.hadoop.mapreduce.lib.input.FileInputFormat.isSplitable(JobContext, Path) 方法),您可以修改输入拆分大小以处理具有多个映射器的较小文件(我假设您正在使用新的 API mapreduce包):

例如,如果您使用 TextInputFormat(或大多数扩展 FileInputFormat 的输入格式),您可以调用静态 util 方法:

FileInputFormat.setMaxInputSplitSize(Job, long) FileInputFormat.setMinInputSplitSize(Job, long)

long 参数是以字节为单位的拆分大小,因此只需设置为您想要的大小

在后台,这些方法设置了以下作业配置属性:

mapred.min.split.size mapred.max.split.size

最后注意,某些输入格式可能会覆盖 FileInputFormat.getFormatMinSplitSize() 方法(FileInputFormat 默认为 1 个字节),所以如果您设置了一个值并且 hadoop 似乎忽略了它,请小心。

最后一点 - 您是否考虑过 MRUnit http://incubator.apache.org/mrunit/ 对您的 MR 代码进行实际“单元”测试?

【讨论】:

【参考方案2】:

尝试这样做会奏效

hadoop fs -D dfs.block.size=16777216 -put 25090206.P .

【讨论】:

以上是关于dfs.block.size 用于本地 hadoop 作业?的主要内容,如果未能解决你的问题,请参考以下文章

如何hadoop 看hive执行日志

HDFS文件系统Block块

详解HDFS读写流程

更改 dfs 文件的块大小

hadoo简介

Hadoop中map数的计算