Hive的企业优化(上)

简介: 笔记

一、Hive企业优化之Fetch Task讲解


hive.fetch.task.conversion

1

Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。启用 MapReduce Job 是会消耗系统开销的。对于这个问题,从 Hive0.10.0 版本开始,对于简单的不需要聚合的类似 select  from  limit n语句,不需要起 MapReduce job,直接通过 Fetch task 获取数据。


比如:select * from user_table;在这种情况下,Hive 可以简单地读取 user_table 对应的存储目录下的文件,然后输出查询结果到控制台。


在 hive-default.xml.template 文件中hive.fetch.task.conversion默认是 more,老版本 hive 默认是 minimal,该属性修改为 more 以后,在全局查找、字段查找、limit 查找等都不走 MapReduce。

>>none:所有的语句都走MR
>>minimal:
        select *  ;
        select * from order where day ='20180910';
        select * from order limit 5;
如以上查询方式都不会执行mapreduce程序
>>more:
    select *,select column...
如以上查询方式都不会执行mapreduce程序
<property>
    <name>hive.fetch.task.conversion</name>
    <value>more</value>
    <description>
      Expects one of [none, minimal, more].
      Some select queries can be converted to single FETCH task minimizing latency.
      Currently the query should be single sourced not having any subquery and should not have
      any aggregations or distincts (which incurs RS), lateral views and joins.
      0. none : disable hive.fetch.task.conversion
      1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
      2. more    : SELECT, FILTER, LIMIT only (support TABLESAMPLE and virtual columns)
    </description>
</property>


二、Hive企业优化之执行计划讲解


EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION] query

不跑MapReduce的情况执行计划

explain select * from order;
Explain
STAGE DEPENDENCIES:
  Stage-0 is a root stage
STAGE PLANS:
  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        TableScan
          alias: order
          Statistics: Num rows: 1 Data size: 346 Basic stats: COMPLETE Column stats: NONE
          Select Operator
            expressions: userid (type: string), username (type: string), order_date (type: string), product_name (type: string), price (type: int), city (type: string)
            outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
            Statistics: Num rows: 1 Data size: 346 Basic stats: COMPLETE Column stats: NONE
            ListSink

group by执行计划如下:

explain select count(1) city_nun,city from order group by city;
Explain
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1
STAGE PLANS:
<!--stage定义,一个stage对应一个MapReduce-->
  Stage: Stage-1
  <!--Map过程-->
    Map Reduce
      Map Operator Tree:
          TableScan
            alias: order
            Statistics: Num rows: 3 Data size: 346 Basic stats: COMPLETE Column stats: NONE
            Select Operator
              expressions: city (type: string)
              outputColumnNames: city
              Statistics: Num rows: 3 Data size: 346 Basic stats: COMPLETE Column stats: NONE
              Group By Operator
                aggregations: count(1)
                keys: city (type: string)
                mode: hash
                outputColumnNames: _col0, _col1
                Statistics: Num rows: 3 Data size: 346 Basic stats: COMPLETE Column stats: NONE
                Reduce Output Operator
                  key expressions: _col0 (type: string)
                  sort order: +
                  Map-reduce partition columns: _col0 (type: string)
                  Statistics: Num rows: 3 Data size: 346 Basic stats: COMPLETE Column stats: NONE
                  value expressions: _col1 (type: bigint)
      Reduce Operator Tree:
        Group By Operator
          aggregations: count(VALUE._col0)
          keys: KEY._col0 (type: string)
          mode: mergepartial
          outputColumnNames: _col0, _col1
          Statistics: Num rows: 1 Data size: 115 Basic stats: COMPLETE Column stats: NONE
          Select Operator
            expressions: _col1 (type: bigint), _col0 (type: string)
            outputColumnNames: _col0, _col1
            Statistics: Num rows: 1 Data size: 115 Basic stats: COMPLETE Column stats: NONE
            File Output Operator
              compressed: false
              Statistics: Num rows: 1 Data size: 115 Basic stats: COMPLETE Column stats: NONE
              table:
                  input format: org.apache.hadoop.mapred.TextInputFormat
                  output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                  serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink


三、Hive企业优化之表拆分方案讲解


在实际应用中,根据我们的业务需求会将部分的大表拆分成多个小表。

1)大表拆分小表:
   源数据  ——>  拆分(中间表) ->  轻量分析
2)抽取共性数据到中间表
   select * from (select * from a,b,c where a.id = b.id and b.id = c.id)
   共性提取(中间表):select * from a,b,c where a.id = b.id and b.id = c.id  

方案一:对一个大表,根据不同的业务,拆分成多个小表,做业务分析。8.png

方案二:可以将之前每部分的业务表共性的数据提取出来组成一个中间表

9.png方案三:如果不同的业务都需要一个大表中的共同的几个数据字段,那么可以先提取一个公共数据


10.png


四、Hive企业优化之外部分区表优化方案


  在实际的应用中:
  >>外部表和分区表结合使用
  >>多级分区   partition(yean = '2018',month='09',day='01')
  合并输入结果方式一:
  select count(1) from order where day = '01'
  UNION ALL
  select count(1) from order where day = '02'
  合并输入结果方式二:
  [-getmerge [-nl] <src> <localdst>]


五、Hive企业优化之SQL优化


1.数据格式和压缩

  >>数据存储格式:textFile、orcFile、parquet
  >>数据压缩:snappy
  大数据平台:CDH 

2.SQL语句

注重SQL执行的性能

3.reduce number

根据业务数据量多次测试得出合适的number


相关文章
|
6月前
|
SQL 存储 分布式计算
Hive数据仓库设计与优化策略:面试经验与必备知识点解析
本文深入探讨了Hive数据仓库设计原则(分区、分桶、存储格式选择)与优化策略(SQL优化、内置优化器、统计信息、配置参数调整),并分享了面试经验及常见问题,如Hive与RDBMS的区别、实际项目应用和与其他组件的集成。通过代码样例,帮助读者掌握Hive核心技术,为面试做好充分准备。
585 0
|
SQL 分布式计算 监控
Hive性能优化之计算Job执行优化 2
Hive性能优化之计算Job执行优化
228 1
|
6月前
|
SQL 分布式计算 资源调度
Hive 优化总结
Hive优化主要涉及HDFS和MapReduce的使用。问题包括数据倾斜、操作过多和不当使用。识别倾斜可通过检查分区文件大小或执行聚合抽样。解决方案包括整体优化模型设计,如星型、雪花模型,合理分区和分桶,以及压缩。内存管理需调整mapred和yarn参数。倾斜数据处理通过选择均衡连接键、使用map join和combiner。控制Mapper和Reducer数量以避免小文件和资源浪费。减少数据规模可调整存储格式和压缩,动态或静态分区管理,以及优化CBO和执行引擎设置。其他策略包括JVM重用、本地化运算和LLAP缓存。
148 4
Hive 优化总结
|
5月前
|
SQL 资源调度 数据库连接
Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南
在Tez上优化Hive查询,包括配置参数调整、理解并行化机制以及容器管理。关键步骤包括YARN调度器配置、安全阀设置、识别性能瓶颈(如mapper/reducer任务和连接操作),理解Tez如何动态调整mapper和reducer数量。例如,`tez.grouping.max-size` 影响mapper数量,`hive.exec.reducers.bytes.per.reducer` 控制reducer数量。调整并发和容器复用参数如`hive.server2.tez.sessions.per.default.queue` 和 `tez.am.container.reuse.enabled`
435 0
|
6月前
|
SQL 存储 大数据
Hive的查询、数据加载和交换、聚合、排序、优化
Hive的查询、数据加载和交换、聚合、排序、优化
138 2
|
6月前
|
SQL 存储 分布式计算
【Hive】Hive优化有哪些?
【4月更文挑战第16天】【Hive】Hive优化有哪些?
|
6月前
|
SQL 分布式计算 资源调度
一文看懂 Hive 优化大全(参数配置、语法优化)
以下是对提供的内容的摘要,总长度为240个字符: 在Hadoop集群中,服务器环境包括3台机器,分别运行不同的服务,如NodeManager、DataNode、NameNode等。集群组件版本包括jdk 1.8、mysql 5.7、hadoop 3.1.3和hive 3.1.2。文章讨论了YARN的配置优化,如`yarn.nodemanager.resource.memory-mb`、`yarn.nodemanager.vmem-check-enabled`和`hive.map.aggr`等参数,以及Map-Side聚合优化、Map Join和Bucket Map Join。
341 0
|
6月前
|
SQL 分布式计算 Hadoop
Hive SQL 优化
Hive SQL 优化
99 1
|
6月前
|
SQL 存储 关系型数据库
Presto【实践 01】Presto查询性能优化(数据存储+SQL优化+无缝替换Hive表+注意事项)及9个实践问题分享
Presto【实践 01】Presto查询性能优化(数据存储+SQL优化+无缝替换Hive表+注意事项)及9个实践问题分享
762 0
|
SQL 分布式计算 资源调度
Hive性能优化之计算Job执行优化 1
Hive性能优化之计算Job执行优化
168 0
Hive性能优化之计算Job执行优化 1
下一篇
无影云桌面