【Hive】优化策略

Hive对于表的操作大部分都是转换为MR作业的形式,为了提高OLAP[online analysis process 在线分析处理]的效率,Hive自身给出了很多的优化策略

1. explain[解释执行计划]

通过explain命令,可以查看Hive语句的操作情况,是否为慢查询,是否走索引,一目了然

explain select sum(...) from table_name;

2. 动态分区调整

hive.exec.dynamic.partition.mode = strict       // 默认是strict

3. bucket表

4. 索引

5. 文件格式优化

TEXTFILE, SEQUENCEFILE, RCFILE[可切分], ORC[增强的RCFILE], 和 PARQUET

6. 压缩

SET hive.exec.compress.intermediate=true        // 设置MR中间数据可以进行压缩,默认是false
SET hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec   // 设置MR中间数据压缩算法
SET hive.exec.compress.output=true              // 设置MR输出数据可以进行压缩,默认是false
SET mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec   // 设置MR输出数据压缩算法,Hadoop的配置

7. 设置本地模式,在当台机器上处理所有任务

适用于小数据情况
hive.exec.mode.local.auto = true // 默认false
mapreduce.framework.name = local
运行本地模式的job需要满足的条件
  job的输入总大小要小于hive.exec.mode.local.auto.inputbytes.max // 默认是134217728
  map任务的数量要小于hive.exec.mode.local.auto.input.files.max // 默认是4
  reduce任务的数量要是1或者是0

8. JVM重用

SET mapreduce.job.jvm.numtasks=5;               // 每个JVM能运行的任务数,默认是1,即为每一个任务开一个JVM,如果设为-1,则没有限制

9. 并行执行

如果Job之间没有依赖,可以并行执行

hive.exec.parallel = true                       // 默认是false
SET hive.exec.parallel.thread.number=16         // 默认是8,能够并行执行的job数

10. 启动limit调优,避免全表扫描,使用抽样机制

select * from ... limit 1,2
hive.limit.optimize.enable = true               // 默认是false

11. JOIN

动态mapjoin使用(/*+ streamtable(table_name)*/)
连接查询表的大小从左到右依次增长
默认是true
SET hive.auto.convert.join=true // 默认是true
SET hive.mapjoin.smalltable.filesize=600000000 // 默认是25000000,mapjoin的阀值,如果小表小于该值,则会将普通join[reduce join]转为mapjoin

可以参考mapjoin的MR实现

12. 严格模式

启用严格模式:hive.mapred.mode = strict // Deprecated
hive.strict.checks.large.query = true
该设置会禁用:1. 不指定分页的orderby
         2. 对分区表不指定分区进行查询
         3. 和数据量无关,只是一个查询模式

hive.strict.checks.type.safety = true
严格类型安全,该属性不允许以下操作:1. bigint和string之间的比较
                  2. bigint和double之间的比较

hive.strict.checks.cartesian.product = true
该属性不允许笛卡尔积操作

13. 调整Mapper和Reducer的个数

hive.exec.reducers.bytes.per.reducer = 256000000    // 每个reduce任务的字节数,256M
hive.exec.reducers.max = 1009                       // reduce task的最大值,属性为负数时,会使用该属性

14. 推测执行[hadoop]

让多个map/reduce多个实例并发执行

mapreduce.map.speculative = true                    // 默认是true
mapreduce.reduce.speculative = true                 // 默认是true

15. 多个分组优化

hive.multigroupby.singlereducer = true              // 默认是true

若多个groupby使用的是一个公用的字段,则这些groupby可以生成一个MR

16. 虚拟列

hive.exec.rowoffset = true                          // 默认是false
时间: 2024-08-30 03:53:26

【Hive】优化策略的相关文章

Hive优化策略介绍

作为企业Hadoop应用的核心产品之一,Hive承载着公司95%以上的离线统计,甚至很多企业里的离线统计全由Hive完成: Hive在企业云计算平台发挥的作用和影响越来越大,如何优化提速已经显得至关重要: Hive作业的规模决定着优化层级,一个Hive作业的优化和一万个Hive作业的优化截然不同: 后续文章将从如下三个方面进行hive的优化介绍: 1)  架构方面(高效.全局.局部)----最有效的优化,好的架构能让作业性能提高很多 a)  分表:(日志表量大而且作业访问次数多,造成耗时较长:将

Hive优化策略

Hive的优化策略大致分为:配置优化(hive-site.xml和hive-cli执行前配置).表优化.hive数据倾斜解决方案. 回答的时候需要,需要准确的说出具体的配置参数,准确的说出具体的配置参数,这是一个深刻的教训. 配置优化 1-Fetch抓取配置 Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算.例如:SELECT * FROM employees;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台.

常见性能优化策略的总结

本文是一位美团老师把之前所做的各种性能优化的案例和方案加以提炼.总结,以文档的形式沉淀下来,并在内部进行分享.力求达到如下效果: 形成可实践.可借鉴.可参考的各种性能优化的方案以及选型考虑点,同时配合具体的真实案例,其他人遇到相似问题时,不用从零开始: 有助于开阔视野,除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识.思维以及做各种权衡的能力: 常见性能优化策略分类: 代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视.很多技术人员拿到

常见性能优化策略的总结(转)

add by zhj: 我个人感觉性能优化分析影响性能的因素有哪些,然后按影响力的大小进行排序,然后进行排序. 然后进一步分析每个因素为何会影响性能,把这些因素再找出来,再按影响力大小进行排序.基本上,经过 这两层的分析,基本就够用了.对这些因素思考解决办法. 1. 数据库层 我们的目标是减少IO访问,或者将IO访问进行负载均衡,分配到多台服务器,并行计算. 1.1 数据库的数据存储在硬盘,硬盘访问速度比内存慢太多,即IO多 1.2 数据量大导致扫描记录多,间接导致IO多 1.3 所有数据库访问

常见性能优化策略总结

常见性能优化策略分类 代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视.很多技术人员拿到一个性能优化的需求以后,言必称缓存.异步.JVM等.实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略.有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如for循环次数过多.作了很多无谓的条件判断.相同逻辑重复多次等. 数据库 数据库的调优,总的来说分为以下三部分: SQL调优 这是最常用.每一个技术人员都应该掌握基本的SQL调优手段

Spark SQL 优化策略

查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟.除了查询优化, Spark SQL 在存储上也进行了优化,从以下几点查看 Spark SQL 的一些优化策略. (1)内存列式存储与内存缓存表       Spark SQL 可以通过 cacheTable 将数据存储转换为列式存储,同时将数据加载到内存进行缓存. cacheTable 相当于在分布式集群的内存物化视图,将数据进行缓存,这样迭代的或者交互式的查询不用再从 HDFS 读数据,直接从内存读取数据大大减少了 I/O

常见性能优化策略的总结 good

阅读目录 代码 数据库 缓存 异步 NoSQL JVM调优 多线程与分布式 度量系统(监控.报警.服务依赖管理) 案例一:商家与控制区关系的刷新job 案例二:POI缓存设计与实现 案例三:业务运营后台相关页面的性能优化 add by zhj: 我个人感觉性能优化分析影响性能的因素有哪些,然后按影响力的大小进行排序,然后进行排序. 然后进一步分析每个因素为何会影响性能,把这些因素再找出来,再按影响力大小进行排序.基本上,经过 这两层的分析,基本就够用了.对这些因素思考解决办法. 1. 数据库层

Hive优化总结

优化时,把hive sql当做map reduce程序来读,会有意想不到的惊喜. 理解hadoop的核心能力,是hive优化的根本.这是这一年来,项目组所有成员宝贵的经验总结. 长期观察hadoop处理数据的过程,有几个显著的特征: 1.不怕数据多,就怕数据倾斜. 2.对jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,没半小时是跑不完的.map reduce作业初始化的时间是比较长的. 3.对sum,count来说,不存在数据倾斜问题.

SEO链轮策略的优势,整体的SEO优化策略

SEO链轮策略的优势 从整体的SEO优化策略上来讲,seo链轮策略不仅仅可以很好的提升我们网站的权重,还能够帮助我们的网页加快收录速度,当搜索引擎蜘蛛爬进来的时候,利用SEO链轮策略可以很好的把蜘蛛给"团团围住"从而让蜘蛛更加广泛的抓取我们的网页.进而增加网站的收录数量以及访问数量. 理论上来讲,互联网上的每一个网站本来都是一个独立的网站,因为有了SEO链轮策略,因为有了友情链接,互联网上面的网站从此不再独立,从此让每一个网站紧密相联. 四:SEO链轮策略的缺点 虽然说SEO链轮策略在