Hadoop Pig:映射器的控制数量

Hadoop Pig:映射器的控制数量,hadoop,apache-pig,Hadoop,Apache Pig,我可以通过在产生减缩器的语句中使用PARALLEL子句来控制减缩器的数量 我想控制地图绘制者的数量。数据源已经创建,我无法减少数据源中的部件数量。可以控制我的pig语句生成的映射数吗?我可以对生成的地图数量保持一个下限和上限吗?控制这是个好主意吗 我尝试使用pig.maxCombinedSplitSize、mapred.min.split.size、mapred.tasktracker.map.tasks.max等,但它们似乎没有帮助 有人能帮助我了解如何控制地图的数量,并可能分享一个工作示例吗

我可以通过在产生减缩器的语句中使用PARALLEL子句来控制减缩器的数量

我想控制地图绘制者的数量。数据源已经创建,我无法减少数据源中的部件数量。可以控制我的pig语句生成的映射数吗?我可以对生成的地图数量保持一个下限和上限吗?控制这是个好主意吗

我尝试使用pig.maxCombinedSplitSize、mapred.min.split.size、mapred.tasktracker.map.tasks.max等,但它们似乎没有帮助


有人能帮助我了解如何控制地图的数量,并可能分享一个工作示例吗?

有一个简单的经验法则:地图的数量与文件拆分的数量一样多。文件拆分取决于HDFS将文件拆分成的块的大小(64MB、128MB、256MB,具体取决于您的配置),请注意,FileInput格式会考虑这些大小,但可以定义它们自己的行为

拆分很重要,因为它们与集群中数据的物理位置有关,Hadoop将代码带入数据,而不是数据

当文件的大小小于块的大小(64MB、128MB、256MB)时会出现问题,这意味着拆分的数量与输入文件的数量相同,这是不高效的,因为每个映射任务通常需要启动时间。在这种情况下,最好使用pig.maxCombinedSplitSize,因为它将尝试将多个小文件读入一个映射器,某种程度上忽略拆分。但是,如果将其设置得太大,则会有将数据带入代码的风险,并会遇到网络问题。如果强制使用太少的映射器,则可能存在网络限制,因为数据必须从其他数据节点进行流式传输。将数字保持在块大小或块大小的一半附近,就可以了


另一种解决方案可能是将小文件合并到一个大的可拆分文件中,这样将自动生成并有效地分配映射程序的数量。

您可以将属性mapred.map.tasks更改为所需的数量。此属性包含默认映射任务/作业。不要全局设置,而是为会话设置属性,以便在完成任务后恢复默认值。

数据的性质是什么?大小,每个投影的小文件数?@alexeipab,我的输入数据是一对(7到8)GBs的数据,每个部分文件有一对(10到20)mbs的数据。这些参数会影响吗?我的问题相当笼统。我想了解控制地图绘制者数量的不同方法。谢谢你的回答。正如我在问题中提到的,我尝试将pig.maxCombinedSplitSize设置为我的块大小(512MB),但这根本没有改变映射器的数量。当前生成的映射程序数量约为2500。除了pig.maxCombinedSplitSize之外,我还需要设置其他内容吗?请选中此pig.splitCombination–打开或关闭合并拆分文件(默认设置为“true”)。谢谢!这有帮助。我不需要将pig.maxCombinedSplitSize设置为true,因为true是默认值。我没有尝试为pig.maxCombinedSplitSize设置足够好的值,以查看映射器的数量下降。作为一个实验,我尝试将其设置为2GB,结果显示了效果。我将该值设置为数据块大小的一半。