较小的块大小,适用于更激烈的工作Hadoop

时间:2015-05-12 15:17:24

标签: hadoop

是否可以将较小的块用于执行更紧张任务的作业?

例如,在Mapper中,我正在计算两个信号之间的距离,这可能需要一些时间,具体取决于信号长度,但另一方面,我的数据集大小目前还不是很大。这让我想要指定更小的块大小(如16MB)并增加集群中的节点数量。这有意义吗?

我该怎么做?如果可以使用较小的块,怎么做?我之前没有这样做过......

1 个答案:

答案 0 :(得分:0)

通过测试性能,才能真正了解为您的工作做的事情。启动其他JVM实例会产生一些开销成本,这是一个问题,即额外的并行化是否有足够的负载来抵消该成本并仍然使其成为胜利。

您可以为特定作业而不是整个群集更改此设置。在决定是否将其作为全局更改时,您必须确定正常用例是什么。如果要全局进行此更改,则将该属性放在XML配置文件或Cloudera Manager中。如果您只想为特定作业执行此操作,请将其置于作业的配置中。

无论哪种方式,mapreduce.input.fileinputformat.split.maxsize中的值越小,您获得的映射器就越多(默认为Integer.MAX_VALUE)。这适用于使用块大小来确定它的分割的任何InputFormat(大多数都是这样,因为大多数扩展FileInputFormat)。

因此,为了最大限度地利用您的利用率,您可能会做这样的事情

long bytesPerReducer = inputSizeInBytes / numberOfReduceTasksYouWant;
long splitSize = (CLUSTER_BLOCK_SIZE > bytesPerReducer) ? CLUSTER_BLOCK_SIZE : bytesPerReducer);
job.getConfiguration.setLong("mapreduce.input.fileinputformat.split.maxsize", splitSize);

请注意,您还可以增加mapreduce.input.fileinputformat.split.minsize的值以减少映射器的数量(默认为1)。