Spark内存溢出解决方案

项目背景:

  • flume收集数据后存储在hdfs上,数据定期装在到hive中,前端使用sql通过spark查询数据。flume接入数据后被切分为很多小文件, 具体配置:hdfs.roundValue=4表示4分钟生成一个文件。小文件之间是没有顺序,所以数据在查询的时候就必须排序,每次排序都会耗费大量的内存资源,此时spark会出现OOM的情况。

处理方案:

  • 专有线程合小文件,并且在合并时排序,这样每次查询就不用再次排序,避免了资源的消耗。每次合并前设置 SET spark.sql.shuffle.partitions=1,后再进行表数据转储,这样每次合并后就会得到1个排序过的文件。

  • 目前测试parquet文件格式如果合并失败会造成原有的文件损坏的问题,所以建议使用textfile存放数据,合并失败后还可以继续用排序的方式查询数据。

猜你喜欢

转载自blog.csdn.net/qq_40990732/article/details/80831980
今日推荐