我需要在一个for循环中执行一组不同的Hive查询。
尽管这段代码在较小的X值上运行得像魔法一样,但当X>100时会出现问题。每次saveAsTable作业之间的延迟呈指数增长,但每个作业大致需要5秒钟的常数时间。
以下是我尝试过的解决方法,但都没有成功:
hc=HiveContext(sc)
queryList=[set of queries]
for i in range(0,X):
hc.sql(queryList[i])
sparkDF.write.saveAsTable('hiveTable', mode='append')
尽管这段代码在较小的X值上运行得像魔法一样,但当X>100时会出现问题。每次saveAsTable作业之间的延迟呈指数增长,但每个作业大致需要5秒钟的常数时间。
以下是我尝试过的解决方法,但都没有成功:
- 在for循环中添加一次gc.collect() (i%100==0)。但这会打破for循环。
- 关闭当前的Spark和Hive context (i%100==0),并创建新的context - 仍然无法解决问题。
- 使用yarn-cluster而不是yarn-client - 没有运气!