猪减速器尺寸优化的最佳方法是什么?
What is the best way for reducer size optimization in pig?
我是 Pig 的新手,正在编写我面临的情况的脚本。对于大多数减速器,我的工作运行效率很高,但最后几个减速器需要数小时才能完成。我能想到的唯一合理的解释是很少有 reducer 拥有大量数据,这是很有可能的,因为我必须将一个拥有超过 1000 万行的数据集连接到一个拥有大约 500 行的数据集作为映射练习.
我发现的两种方法是使用并行设置减速器的数量,另一种是使用 pig.exec.reducers.bytes.per.reducer
。
哪种方法更适合我的情况? (可能有大量记录映射到单个键)。
另外,对于pig.exec.reducers.bytes.per.reducer
,正确的实现方法是什么?
这是一篇关于调整 map-reduce 作业的好文档:-
http://blog.cloudera.com/blog/2015/07/how-to-tune-mapreduce-parallelism-in-apache-pig-jobs/
您也猜到了,这似乎是数据偏斜问题 - 很少有键的记录数比其他键高。
如果您的某个文件很小并且可以轻松放入内存,请尝试使用复制连接。这是映射器端连接,通常它会处理数据偏斜问题
为了优化连接,您应该使用复制连接作为
C = JOIN big BY b1, tiny BY t1, mini BY m1 USING 'replicated';
要并行处理您的工作或增加所有步骤的减速器数量,您只需添加一行
SET default parallel 100;
在 pig 脚本的开头,或者您可以使用
parallel 100; //on the line of the code
我是 Pig 的新手,正在编写我面临的情况的脚本。对于大多数减速器,我的工作运行效率很高,但最后几个减速器需要数小时才能完成。我能想到的唯一合理的解释是很少有 reducer 拥有大量数据,这是很有可能的,因为我必须将一个拥有超过 1000 万行的数据集连接到一个拥有大约 500 行的数据集作为映射练习.
我发现的两种方法是使用并行设置减速器的数量,另一种是使用 pig.exec.reducers.bytes.per.reducer
。
哪种方法更适合我的情况? (可能有大量记录映射到单个键)。
另外,对于pig.exec.reducers.bytes.per.reducer
,正确的实现方法是什么?
这是一篇关于调整 map-reduce 作业的好文档:- http://blog.cloudera.com/blog/2015/07/how-to-tune-mapreduce-parallelism-in-apache-pig-jobs/
您也猜到了,这似乎是数据偏斜问题 - 很少有键的记录数比其他键高。
如果您的某个文件很小并且可以轻松放入内存,请尝试使用复制连接。这是映射器端连接,通常它会处理数据偏斜问题
为了优化连接,您应该使用复制连接作为
C = JOIN big BY b1, tiny BY t1, mini BY m1 USING 'replicated';
要并行处理您的工作或增加所有步骤的减速器数量,您只需添加一行
SET default parallel 100;
在 pig 脚本的开头,或者您可以使用
parallel 100; //on the line of the code