目前我有一个脚本生成100+ csv摘录。它运行如下命令:
beeline -u "jdbc:hive2://<host>:<port>/default;principal=hive" --outputformat=csv -f <query.sql> > <extract_file.csv>
beeline -u "jdbc:hive2://<host>:<port>/default;principal=hive" --outputformat=csv -f <query1.sql> > <extract_file1.csv>
beeline -u "jdbc:hive2://<host>:<port>/default;principal=hive" --outputformat=csv -f <query2.sql> > <extract_file2.csv>
....
beeline -u "jdbc:hive2://<host>:<port>/default;principal=hive" --outputformat=csv -f <query100.sql> > <extract_file100.csv>
每次运行这个脚本时,它都会使YARN队列完全拥挤,并导致其他作业失败。我试图将这100个摘录分成更小的组,并一个接一个地运行它,它有一点帮助,但它运行得慢得多,仍然从YARN队列中占用大量资源,并影响其他用户/作业。我想知道是否有办法使连接一次在脚本中,并使用相同的连接来生成多个csv摘录?
感谢调整整个过程的几个方法-
-
检查您是否可以在非高峰时间运行一些作业?
-
检查是否可以停用某些文件?或者将2/3个文件合并为一个。
-
只选择需要的列,删除不需要的列。同样,如果需要,可以添加更多的过滤器来减少行数。
-
调整每个查询,使它们占用更少的时间和资源。
-
检查是否每天转储一些静态文件。你可以让它们在周末自动运行。
-
将所有任务分成多个组,长时间运行的任务均匀分布。
-
现在,您可以开始hive heap内存调优了。您可以使用下面的链接来调整它。将查询分组,为长时间运行的作业提供更多内存。https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/admin_hive_tuning.html
-
如果你做了以上的步骤,你可以考虑增加内存和cpu:)。