我有一个使用非常耗时的UDF的猪脚本。 Pig似乎将UDF设置为作为地图作业而不是减少作业运行。结果,创建了次优的少量映射器来运行该作业。我知道我可以使用setDefaultParallel
设置要在pig中使用的默认减速器数量,也可以使用PigLatin中的PARALELL x
命令设置给定线路的减速器数量。但是如何设置映射器的数量呢?我已经看过通过定义我自己的InputSplit大小来增加映射器数量的帖子,但是我想明确将映射器的数量设置为主机数量*核心数量,filesize不应该与它有任何关系。
如果我无法控制地图制作者的数量,那么无论如何都要强制我的UDF作为减速器发生,因为我可以控制它们吗?
答案 0 :(得分:4)
total input size
/ input split size
,但如果您有大量小文件(由于HDFS的工作原理而不鼓励这种情况),可能会出现偏差。所以基本上,Pig不允许你这样做,因为Hadoop根据定义没有那个选项。MAPREDUCE
命令从pig中调用它。但是,解决方案听起来不对,你可能会误解某些东西。你可以看看为什么强制减少Pig以获得一个好主意 - DISTINCT
,LIMIT
和ORDER
将始终这样做,GROUP
通常会这样做好。 JOIN
通常会同时获得映射器和缩减器。正如您所看到的,强制减少的操作是利用Hadoop的一些固有特性的操作(如ORDER
正在减少因为减速器输入被排序)。没有简单的方法可以在那里潜行UDF,因为没有任何类型的UDF(评估,过滤,加载,存储)可以与减速器轻松配合使用。答案 1 :(得分:0)
您可以使用“mapred.max.split.size”生成更多数量的地图制作者。拆分适用于某些输入格式和压缩格式。例如,GZ输入不可拆分。 Pig允许组合较小的输入文件。以下是combine small files
的方法答案 2 :(得分:0)
截至目前的Pig版本,这个技巧总是适用于我,使用DISTINCT,LIMIT,ORDER后嵌套FOREACH中的生成始终作为reducer运行, 对于Eg,
curl_setopt($ch, CURLOPT_REFERER, 'URL');
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
这些也会删除数据中的所有重复行。