我想运行一个hadoop单元测试,使用本地文件系统模式...理想情况下,我希望看到多个part-m-*文件写入磁盘(而不仅仅是1个)。然而,由于这只是一个测试,我不想处理64M的数据(我相信默认大小是每块64兆)。
在分布式模式中,我们可以使用以下命令进行设置
dfs.block.size
我想知道是否有一种方法可以让我的本地文件系统写出小的part-m文件,也就是说,这样我的单元测试就可以用几个(尽管非常小的)文件来模拟大规模数据的内容。
发布于 2012-03-20 00:50:02
假设您的输入格式可以处理可拆分的文件(请参阅org.apache.hadoop.mapreduce.lib.input.FileInputFormat.isSplitable(JobContext, Path)
方法),您可以修改输入拆分大小,以处理具有多映射器的较小文件(我假设您使用的是新的API mapreduce包):
例如,如果您正在使用TextInputFormat
(或大多数扩展FileInputFormat
的输入格式),则可以调用static util方法:
FileInputFormat.setMaxInputSplitSize(Job, long)
FileInputFormat.setMinInputSplitSize(Job, long)
long参数是拆分的字节大小,因此只需将其设置为所需的大小
在幕后,这些方法设置了以下作业配置属性:
mapred.min.split.size
mapred.max.split.size
最后要注意的是,一些输入格式可能会覆盖FileInputFormat.getFormatMinSplitSize()
方法(对于Hadoop默认为1字节),所以如果您设置了一个值,而hadoop似乎忽略了它,请务必小心。
最后一点--你有没有考虑过用MRUnit http://incubator.apache.org/mrunit/对你的MR代码进行真正的“单元”测试?
发布于 2017-03-21 19:08:32
试着这样做,它会起作用的
hadoop fs -D dfs.block.size=16777216 -put 25090206.P .
https://stackoverflow.com/questions/9773931
复制相似问题