较小的块大小用于更密集的作业hadoop

bt1cpqcv  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(420)

对于执行更密集任务的作业,使用更小的块是否有好处?
例如,在mapper中,我正在计算两个信号之间的距离,这可能需要一些时间,具体取决于信号长度,但另一方面,我的数据集大小目前没有那么大。这让我开始尝试指定更小的块大小(比如16mb)并增加集群中的节点数。这有道理吗?
我该怎么做?如果可以用更小的积木,怎么做?我以前没做过。。。

r1wp621o

r1wp621o1#

这对你的工作是否有意义,只有通过测试性能才能真正知道。与启动额外的jvm示例相关联的开销是存在的,问题是是否为额外的并行化提供了足够的负载来抵消这一开销,并且仍然使它成为一个胜利。
您可以为特定作业而不是整个集群更改此设置。在决定是否将此作为全局更改时,您必须确定什么是正常用例。如果您想在全局范围内进行此更改,可以将该属性放在xml配置文件或cloudera管理器中。如果只想对特定作业执行此操作,请将其放入作业的配置中。
无论哪种方式,值越小 mapreduce.input.fileinputformat.split.maxsize ,将获得更多的Map器(默认为 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 减少Map器的数量(默认为1)。

相关问题