Hive优化--定位调优指导

1.1.    日志搜集

1.1.1.   HiveServer日志获取

Hive调优需要看HiveServer的运行日志及GC日志。

HiveServer日志路径为:HiveServer节点的/var/log/Bigdata/hive/hiveserver/

文件名

日志内容

hive.log

HiveServer运行日志

hive-omm-gc.log.0.current

HiveServer GC日志



 

1.1.1.   MapReduce日志查看

    Hive提交的MapReduce的日志中详细地记录了map和reduce任务的运行情况。

通过Yarn原生界面可以查看,如下:

 

1.2.    定位调优思路

第一步,分析SQL待处理的表及文件,统计待处理的表的文件数、数据量、条数、文件格式、压缩格式,分析是否有更适合的文件存储格式、压缩格式,是否能够使用上分区或分桶,是否有大量小文件需要map前合并。如果有优化空间,则执行优化。

第二步,分析SQL的结构,是否有重复的子查询可以存到中间表,是否可以使用相关性优化器,是否出现笛卡尔积需要去除,是否可以使用Multiple Insert语句,是否使用了低性能的UDF或SerDe需要替换。如果有优化空间,则执行优化。

第三步,分析SQL的操作,是否可利用MapJoin,是否可使用SMB Join,是否需要设置map端聚合,是否需要优化count(distinct),是否全局排序可以使用局部排序代替,是否可以使用向量化优化、基于代价的优化等优化器。如果有优化空间,则执行优化。

第四步,观察SQL启动的MR运行情况,如果map运行缓慢,考虑减小Map处理的最大数据量提高并发度,考虑增大map的内存和虚拟核数;如果是reduce运行缓慢,是否有group by倾斜需要解决,是否有join倾斜需要处理,当大量重复数据做去重时减少Reduce数量,当大量匹配记录做关联时增加Reduce数量。

 

1.3.    常见问题处理

1.3.1.   OOM(内存溢出)

1.3.1.1.      问题描述

HiveServer运行日志及MR日志报以下错误:

Container [pid=48338,containerID=container_1417574466181_3484_01_000043] is running beyond physical memory limits. Current usage:1.0 GB of 1 GB physical memory used; 2.0 GB of 2.1 GB virtual memory used. Killing container. Dump of the process-tree for container_1417574466181_3484_01_000043 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE |- 48345 48338 48338 48338 (java) 2432 61 2062110720 272981

 

1.3.1.2.      解决方案

从日志可以看出,Container物理内存不够用了,观察YARN界面该container是map还是reduce。

如果是map,则增大mapreduce.map.memory.mb的设置,如设置成6144(默认值为4096),但不能超过yarn.scheduler.maximum-allocation-mb的值。

如果是reduce,则增大mapreduce.reduce.memory.mb的设置,如设置成6144(默认值为4096),但不能超过yarn.scheduler.maximum-allocation-mb的值。

 



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Hive on MapReduce的性能调优,可以采取以下几个方面的优化策略: 1. 数据倾斜处理:在数据倾斜的情况下,可以使用Hive提供的一些技术来解决,如使用倾斜连接优化(Skew Join Optimization)或者使用动态分区(Dynamic Partitioning)来解决数据倾斜问题。 2. 数据压缩:Hive支持对数据进行压缩存储,可以通过设置适当的压缩算法和参数来减少磁盘IO,提高作业执行速度。 3. 数据分区和分桶:合理使用数据分区(Partition)和分桶(Bucketing)机制,可以减少数据扫描量,提高查询效率。 4. 动态分区:对于动态增长的表,可以使用动态分区(Dynamic Partitioning)来避免全表扫描,提高查询性能。 5. 调整MapReduce参数:根据作业的特性和集群的资源情况,可以调整MapReduce相关参数,如mapreduce.tasktracker.map.tasks.maximum、mapreduce.tasktracker.reduce.tasks.maximum等来优化作业的执行效率。 6. 使用索引:Hive支持创建索引,在查询频繁的列上创建索引可以加速查询操作。 7. 数据格式选择:选择合适的数据格式,如ORC、Parquet等,这些格式在存储和查询方面有较好的性能表现。 8. 并行度调整:根据集群资源和作业特性,调整任务的并行度,如mapred.map.tasks、mapred.reduce.tasks等,以充分利用集群资源。 9. 数据倾斜检测:使用Hive提供的一些工具,如Hive Explain、Hive Profile等来检测和分析作业中的数据倾斜问题,并针对性地进行优化。 总之,通过合理使用数据倾斜处理、数据压缩、数据分区和分桶、调整MapReduce参数等优化策略,可以提高Hive on MapReduce的性能和执行效率。根据具体的业务需求和数据特点,选择合适的优化策略,并结合实际情况进行调整和优化

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值