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 作业?的主要内容,如果未能解决你的问题,请参考以下文章