猪:控制映射器的数量

Gau*_*ale 5 hadoop apache-pig

我可以通过在导致reducers的语句中使用PARALLEL子句来控制reducers的数量.

我想控制映射器的数量.数据源已经创建,我无法减少数据源中的部件数量.是否可以控制我的猪声明产生的地图数量?我可以在产生的地图数量上设置上限和上限吗?控制它是一个好主意吗?

我尝试使用pig.maxCombinedSplitSize,mapred.min.split.size,mapred.tasktracker.map.tasks.maximum等,但它们似乎无济于事.

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

ale*_*pab 9

对于映射器的数量有一个简单的经验法则:有多个映射器和文件分割一样多.文件拆分取决于HDFS拆分文件的块大小(64MB,128MB,256MB,具体取决于您的配置),请注意FileInput格式会考虑,但可以定义自己的行为.

拆分很重要,因为它们与集群中数据的物理位置相关联,Hadoop为数据提供代码而不向代码提供数据.

当文件的大小小于块的大小(64MB,128MB,256MB)时出现问题,这意味着将有与输入文件一样多的分割,这是无效的,因为每个Map任务通常启动时间.在这种情况下,最好的办法是使用pig.maxCombinedSplitSize,因为它会尝试将多个小文件读入一个Mapper,忽略分割.但是如果你把它做得太大,就会冒着将数据带入代码的风险,并且会遇到网络问题.如果强制使用太少的Mapper,则可能存在网络限制,因为必须从其他数据节点流式传输数据.保持数字接近块大小或一半,你应该没问题.

其他解决方案可能是将小文件合并到一个大的可拆分文件中,这将自动生成有效数量的Mapper.

  • 谢谢!它有帮助。我不需要将 pig.maxCombinedSplitSize 设置为 true,因为 true 是默认值。我没有尝试为 pig.maxCombinedSplitSize 提供足够好的价值来查看映射器的数量下降。作为实验,我尝试将其设置为 2GB 并显示了效果。我将该值设置为数据块大小的一半。 (2认同)