pig:Map器的控制数量

ngynwnxp  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(253)

我可以通过在产生reducer的语句中使用parallel子句来控制reducer的数量。
我想控制Map绘制者的数量。数据源已经创建,我无法减少数据源中的部件数量。是否可以控制由pig语句生成的Map的数量?我能对生成的Map数量保持一个上限和下限吗?控制这是个好主意吗?
我试过使用pig.maxcombinedsplitsize、mapred.min.split.size、mapred.tasktracker.map.tasks.maximum等,但似乎没有用。
有人能帮助我了解如何控制Map的数量,并可能分享一个工作的例子?

h6my8fg2

h6my8fg21#

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

5fjcxozz

5fjcxozz2#

Map器的数量有一个简单的经验法则:Map器的数量和文件分割的数量一样多。文件分割取决于hdfs将文件分割成的块的大小(64mb、128mb、256mb,具体取决于您的配置),请注意,fileinput格式会考虑到这一点,但可以定义它们自己的行为。
拆分很重要,因为它们与集群中数据的物理位置有关,hadoop将代码带到数据中,而不是将数据带到代码中。
当文件的大小小于块的大小(64mb、128mb、256mb)时,问题就会出现,这意味着分裂的数量将与输入文件的数量一样多,这是不高效的,因为每个Map任务通常需要启动时间。在这种情况下,最好的选择是使用pig.maxcombinedsplitsize,因为它将尝试将多个小文件读入一个Map器,而忽略拆分。但如果将其设置得太大,则有可能将数据带入代码,并会遇到网络问题。如果强制太少的Map器,则可能会有网络限制,因为数据必须从其他数据节点流式传输。保持数字接近块大小或它的一半,你应该没事。
另一个解决方案可能是将小文件合并成一个大的可拆分文件,这将自动生成和有效地Map程序数量。

相关问题