Pig:具有4节点集群的最佳映射数量?

时间:2016-05-10 12:08:51

标签: hadoop apache-pig cloudera

我使用的是一个只有4个节点的hadoop Cloudera系统,但是有很多磁盘空间( 200TB )。

在我的pig脚本中,我加载了几个每月大小 200Gb 的月份文件。

我注意到如果我在我的猪脚本中加载大约一年的数据,Pig会创建大约15k mappers,整个过程大约需要3个小时(包括reduce步骤。)

相反,如果我加载三年的数据(大约 5TB ),那么Pig会创建大约30k mappers并且基本上所有节点在处理超过15小时后变得不健康。

我在这里遇到某种瓶颈吗? 或者我应该使用一些默认选项?我的猪脚本是非常基本的:我算一下。

非常感谢!

1 个答案:

答案 0 :(得分:1)

我可能迟到了(迟到总比没有好),但让我分享一下我的想法,

1)Mapper和Reducer计数设置 确保为tasktraker节点分配适量的映射器和缩减器插槽。 MapTask - mapred.tasktracker.map.tasks.maximum ReduceTask - mapred.tasktracker.reduce.tasks.maximum 例: 假设您有4个节点集群,每个节点有36 GB RAM,那么让我们假设每个map / reduce任务需要4GB RAM。为通用提供4GB,我们可以假设剩余的32 GB将是 任务使用(map / reduce)。一项任务需要4GB,我们最终会得到8个任务(4Map,4Reduce)

2)充分利用可用内存 每个JVM的RAM分配 - mapred.child.java.opts -Xmx3500M 例: 考虑到我们已根据上面的示例设置了每个任务跟踪器上的任务数,那么我们可以为每个任务设置最大RAM大小为3500M。

基于这两个选项,您可以从群集中获得最佳性能。如果您要处理更多泄漏事件,您可能还需要查看io.sort.factor和io.sort.mb。

除了上述选项之外,如果多个用户使用相同的群集,最好还是利用公平的调度程序/公平池来确保单个用户不会整个集群。