福哥答案2020-09-11:
[Hive调优及优化的12种方式](https://zhuanlan.zhihu.com/p/80718835?utm_source=qq)
1.请慎重使用COUNT(DISTINCT col)。可以考虑使用Group By 或者 ROW_NUMBER() OVER(PARTITION BY col)方式代替COUNT(DISTINCT col)。
2.小文件会造成资源的多度占用以及影响查询效率。在数据源头HDFS中控制小文件产生的个数。
3.请慎重使用SELECT *。在查询数据表时,指定所需的待查字段名,而非使用 * 号。
4.不要在表关联后面加WHERE条件。采用谓词下推的技术,提早进行过滤有可能减少必须在数据库分区之间传递的数据量。
5.处理掉字段中带有空值的数据。
6.设置并行执行任务数。
7.设置合理的Reducer个数。
8.JVM重用。
9.为什么任务执行的时候只有一个reduce?避免使用全局排序,可以使用sort by进行局部排序。使用GROUP BY进行统计,不会进行全局排序。
10.选择使用Tez引擎。
11.选择使用本地模式。
12.选择使用严格模式。
[Hive 任务优化策略-整合,持续更新。](https://zhuanlan.zhihu.com/p/90953307)
1、好的模型设计事半功倍 。
2、解决数据倾斜问题 。
3、减少 job 数 。
4、设置合理的 MapReduce 的 task 数,能有效提升性能。(比如,10w+级别的计算,用 160个 reduce,那是相当的浪费,1 个足够) 。
5、了解数据分布,自己动手解决数据倾斜问题是个不错的选择。这是通用的算法优化,但算法优化有时不能适应特定业务背景,开发人员了解业务,了解数据,可以通过业务逻辑精 确有效的解决数据倾斜问题 。
6、数据量较大的情况下,慎用 count(distinct),group by 容易产生倾斜问题 。
7、对小文件进行合并,是行之有效的提高调度效率的方法,假如所有的作业设置合理的文 件数,对云梯的整体调度效率也会产生积极的正向影响 。
8、优化时把握整体,单个作业最优不如整体最优。