Apache Pig使用MongoLoader产生大量空文件问题

版权声明:欢迎转载,注明出处即可 https://blog.csdn.net/yolohohohoho/article/details/87476868

问题描述

项目中需要利用Pig MongoLoader将MongoDB里面的数据每日增量备份到hive的外部分区表中,但是在检查hdfs文件发现分区文件夹下产生了大量的小文件/空文件。

原因分析

由于MongoDB表没有设置retention,该表中的数据也没有被定期清理,随着该表的体力不断增多。这样导致mongoloader在计算split数目的时候会根据totalsize产生大量的split。
详见源代码

解决方法

根本pig版本的不同,可以有如下解决方法:

  • 版本0.13及以上:

     set pig.output.lazy true
    
  • 0.12以下可以配合使用以下设置:

      set mongo.input.query {…}
      set mongo.input.split_size 128
      set mongo.input.splits.filter_empty true
    
  • 其他方法:
    可以使用进阶的pig编程,比如python包装pig来判断如果为空文件,如果是,则移除(如调用rmf等)。

猜你喜欢

转载自blog.csdn.net/yolohohohoho/article/details/87476868