我可以通过在导致reducers的语句中使用PARALLEL子句来控制reducers的数量.
我想控制映射器的数量.数据源已经创建,我无法减少数据源中的部件数量.是否可以控制我的猪声明产生的地图数量?我可以在产生的地图数量上设置上限和上限吗?控制它是一个好主意吗?
我尝试使用pig.maxCombinedSplitSize,mapred.min.split.size,mapred.tasktracker.map.tasks.maximum等,但它们似乎无济于事.
有人可以帮我理解如何控制地图的数量并可能分享一个工作示例吗?
对于映射器的数量有一个简单的经验法则:有多个映射器和文件分割一样多.文件拆分取决于HDFS拆分文件的块大小(64MB,128MB,256MB,具体取决于您的配置),请注意FileInput格式会考虑,但可以定义自己的行为.
拆分很重要,因为它们与集群中数据的物理位置相关联,Hadoop为数据提供代码而不向代码提供数据.
当文件的大小小于块的大小(64MB,128MB,256MB)时出现问题,这意味着将有与输入文件一样多的分割,这是无效的,因为每个Map任务通常启动时间.在这种情况下,最好的办法是使用pig.maxCombinedSplitSize,因为它会尝试将多个小文件读入一个Mapper,忽略分割.但是如果你把它做得太大,就会冒着将数据带入代码的风险,并且会遇到网络问题.如果强制使用太少的Mapper,则可能存在网络限制,因为必须从其他数据节点流式传输数据.保持数字接近块大小或一半,你应该没问题.
其他解决方案可能是将小文件合并到一个大的可拆分文件中,这将自动生成有效数量的Mapper.
| 归档时间: |
|
| 查看次数: |
9674 次 |
| 最近记录: |