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



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

在分布式模式下,我们可以使用进行设置

dfs.block.size

我想知道是否有一种方法可以让我的本地文件系统写出小的part-m文件,也就是说,我的单元测试将用几个(尽管很小)文件模拟大规模数据的内容。

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

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

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

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

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

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

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

最后一点-你考虑过MRUnit吗http://incubator.apache.org/mrunit/用于MR代码的实际"单元"测试?

尝试这样做,它将工作

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

最新更新