Hive-4.hive 的 性能调优_艾文编程的博客-CSDN博客_hive stage太多


本站和网页 https://blog.csdn.net/shenfuli/article/details/50593056 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Hive-4.hive 的 性能调优_艾文编程的博客-CSDN博客_hive stage太多
Hive-4.hive 的 性能调优
艾文编程
于 2016-01-27 11:35:24 发布
2954
收藏
分类专栏:
分布式数据计算技术
文章标签:
hive
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shenfuli/article/details/50593056
版权
分布式数据计算技术
专栏收录该内容
81 篇文章
0 订阅
订阅专栏
1. 使用EXPLAIN
通过EXPLAIN功能,可以帮助我们了解如何将查询转化成MapReduce任务的。
1、使用explain查看hive如何将查询转化成MapReduce任务的 1.1 创建表 create table onecol(number int) 1.2 初始化数据并加载 [hadoop@mycluster ~]$ vi onecol  1 2 3 4 5   hive (default)> load data local inpath '/home/hadoop/onecol' overwrite into table onecol;   1.3 通过explain查看 hive (default)> explain select sum(number) from onecol; OK Explain STAGE DEPENDENCIES:   Stage-1 is a root stage   Stage-0 is a root stage   STAGE PLANS:   Stage: Stage-1     Map Reduce       Map Operator Tree:           TableScan             alias: onecol             Statistics: Num rows: 2 Data size: 10 Basic stats: COMPLETE Column stats: NONE             Select Operator               expressions: number (type: int)               outputColumnNames: number               Statistics: Num rows: 2 Data size: 10 Basic stats: COMPLETE Column stats: NONE               Group By Operator                 aggregations: sum(number)                 mode: hash                 outputColumnNames: _col0                 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE                 Reduce Output Operator                   sort order:                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE                   value expressions: _col0 (type: bigint)       Reduce Operator Tree:         Group By Operator           aggregations: sum(VALUE._col0)           mode: mergepartial           outputColumnNames: _col0           Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE           Select Operator             expressions: _col0 (type: bigint)             outputColumnNames: _col0             Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE             File Output Operator               compressed: false               Statistics: Num rows: 1 Data size: 8 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  
首先,会打印抽象语法数。
一个Hive任务会包含有一个或者多个stage(阶段),不同的stage间会存在着依赖关系。一个stage可以是一个MapReduce,也可以是一个抽象阶段。默认情况下,Hive会一次只执行一个stage(阶段)。
STAGE PLAN部分比较复杂。Stage-1包含了这个job大部分的处理过程,而且触发了一个MapReduce job。TableScan以这个表作为输入,然后产生一个nunber的输出。
由于这个job没有LIMIT语句,因此stage-0阶段是一个没有任何操作的阶段。
2. EXPLAIN EXTENDED 
使用EXPLAIN EXTENDED 语句可以产生更多的输出信息。可以比较Reduce Operator Tree。
hive (default)> explain extended select sum(number) from onecol; OK Explain ABSTRACT SYNTAX TREE:    TOK_QUERY    TOK_FROM       TOK_TABREF          TOK_TABNAME             onecol    TOK_INSERT       TOK_DESTINATION          TOK_DIR             TOK_TMP_FILE       TOK_SELECT          TOK_SELEXPR             TOK_FUNCTION                sum                TOK_TABLE_OR_COL                   number     STAGE DEPENDENCIES:   Stage-1 is a root stage   Stage-0 is a root stage   STAGE PLANS:   Stage: Stage-1     Map Reduce       Map Operator Tree:           TableScan             alias: onecol             Statistics: Num rows: 2 Data size: 10 Basic stats: COMPLETE Column stats: NONE             GatherStats: false             Select Operator               expressions: number (type: int)               outputColumnNames: number               Statistics: Num rows: 2 Data size: 10 Basic stats: COMPLETE Column stats: NONE               Group By Operator                 aggregations: sum(number)                 mode: hash                 outputColumnNames: _col0                 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE                 Reduce Output Operator                   sort order:                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE                   tag: -1                   value expressions: _col0 (type: bigint)       Path -> Alias:         hdfs://mycluster:9000/user/hive/warehouse/onecol [onecol]       Path -> Partition:         hdfs://mycluster:9000/user/hive/warehouse/onecol            Partition             base file name: onecol             input format: org.apache.hadoop.mapred.TextInputFormat             output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat             properties:               COLUMN_STATS_ACCURATE true               bucket_count -1               columns number               columns.comments                columns.types int               file.inputformat org.apache.hadoop.mapred.TextInputFormat               file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat               location hdfs://mycluster:9000/user/hive/warehouse/onecol               name default.onecol               numFiles 1               numRows 0               rawDataSize 0               serialization.ddl struct onecol { i32 number}               serialization.format 1               serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe               totalSize 10               transient_lastDdlTime 1452234517             serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe                          input format: org.apache.hadoop.mapred.TextInputFormat               output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat               properties:                 COLUMN_STATS_ACCURATE true                 bucket_count -1                 columns number                 columns.comments                  columns.types int                 file.inputformat org.apache.hadoop.mapred.TextInputFormat                 file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat                 location hdfs://mycluster:9000/user/hive/warehouse/onecol                 name default.onecol                 numFiles 1                 numRows 0                 rawDataSize 0                 serialization.ddl struct onecol { i32 number}                 serialization.format 1                 serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe                 totalSize 10                 transient_lastDdlTime 1452234517               serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe               name: default.onecol             name: default.onecol       Truncated Path -> Alias:         /onecol [onecol]       Needs Tagging: false       Reduce Operator Tree:         Group By Operator           aggregations: sum(VALUE._col0)           mode: mergepartial           outputColumnNames: _col0           Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE           Select Operator             expressions: _col0 (type: bigint)             outputColumnNames: _col0             Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE             File Output Operator               compressed: false               GlobalTableId: 0               directory: hdfs://mycluster:9000/tmp/hive-hadoop/hive_2016-01-07_22-52-10_167_7966169081292339689-1/-ext-10001               NumFilesPerFileSink: 1               Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE               Stats Publishing Key Prefix: hdfs://mycluster:9000/tmp/hive-hadoop/hive_2016-01-07_22-52-10_167_7966169081292339689-1/-ext-10001/               table:                   input format: org.apache.hadoop.mapred.TextInputFormat                   output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat                   properties:                     columns _col0                     columns.types bigint                     escape.delim \                     hive.serialization.extend.nesting.levels true                     serialization.format 1                     serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe                   serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe               TotalFiles: 1               GatherStats: false               MultiFileSpray: false     Stage: Stage-0     Fetch Operator       limit: -1
3. LIMIT限制调整
一般情况下,LIMIT语句需要执行整个查询局域,然后在返回部分结果的。因此这种情况通常是浪费的,所以应该进可能地避免出现这种情况。Hive有一个配置属性可以开启,当使用LIMIT语句时,其可以对数据源进行抽样。
4. JOIN优化
对JOIN操作优化,一般讲最大的表放在JOIN的最右边或者直接使用/*streamtable(table_name)*/语句指出。
如果所有表中有一个表足够小,时可以完成载入内存中,那么这是Hive可以执行一个map-site join,这样可以减少reduce过程,有时可以减少map task任务。
5. 本地模式
对于大多数情况,Hive可以通过本地模式在单台机器上处理所有任务。对于小数据,执行时间可以明显被缩短。通过set hive.exec.mode.local.auto=true设置本地模式。
6. 并行模式
Hive会将一个查询转化成一个或者多个阶段。这样的阶段可以是MapReduce阶段、抽样阶段、合并阶段、limit阶段。默认情况下,Hive一次只会执行一个阶段,由于job包含多个阶段,而这些阶段并非完全互相依赖,即:这些阶段可以并行执行,可以缩短整个job的执行时间。设置参数:set hive.exec.parallel=true,或者通过配置文件来完成。
7. 严格模式
Hive提供一个严格模式,可以防止用户执行那些可能产生意想不到的影响查询,通过设置
Hive.mapred.modestrict来完成
7.1 分区表限制
Where语句的条件字段如果非分区字段,则要求必须通过limit限制来执行。
7.2 ORDER BY语句
由于order by为了执行排序构成会将所有的结果数据分发到同一个reducer中进行处理,强制要求用户增加LIMIT语句可以防止reducer额外执行一段时间。
7.3 限制笛卡尔乘积
对于表A,B ,进行获取两个表的笛卡尔积,一般查询语句:
select * from A join B where A.id=B.id
对于关系型数据库通过where条件可以转为on语句,但是Hive并不会执行这种优化。因此,如果表足够大,那么这个查询就会出现不可控的情况。一般采用下面的方法来完成:
select * from A join B on a.id=b.id
8. 调整mapper和reducer个数
默认情况下,Hive是按照输入的数据量大小来确认reducer个数的。其中属性:
Hive.exec.reducers.per.reducer默认为1GB。Hive默认的reducer个数应该是3,可以通过属性mapred.reduce.tasks的数值为不同的数值来确认,为控制资源的使用情况一般需要设置reducer任务的最大的数值,通过hive.exec.reducers.max可以阻止某个查询下消耗太多的reducer资源。一般可以在hive-site.xml来设置。
9. JVM重用
Hadoop通常是使用派生JVM来执行map和reduce任务的。这时JVM的启动过程可能会造成相当大的开销,尤其是执行的job包含偶成百上千的task任务的情况。JVM重用可以使得JVM示例在同一个job中时候使用N此。通过参数mapred.job.reuse.jvm.num.tasks来设置。
10. 推测执行
Hadoop推测执行可以触发执行一些重复的任务,尽管因对重复的数据进行计算而导致消耗更多的计算资源,不过这个功能的目标是通过加快获取单个task的结果以侦测执行慢的TaskTracker加入到没名单的方式来提高整体的任务执行效率。
Hadoop的推测执行功能由2个配置控制着,通过mapred-site.xml中配置
mapred.map.tasks.speculative.execution=true
mapred.reduce.tasks.speculative.execution=true
艾文编程
关注
关注
点赞
收藏
打赏
评论
Hive-4.hive 的 性能调优
1. 使用EXPLAIN通过EXPLAIN功能,可以帮助我们了解如何将查询转化成MapReduce任务的。 1、使用explain查看hive如何将查询转化成MapReduce任务的1.1 创建表create table onecol(number int)1.2 初始化数据并加载[hadoop@mycluster ~]$ vi onecol 1
复制链接
扫一扫
专栏目录
Hive explain详解
02-17
245
HiveQL是一种声明式语言,用户会提交声明式的查询,而Hive会将其转换成MapReduce job。
使用EXPLAIN可以帮助我们学习Hive是如何将查询转换成MapReduce任务的。在查询语句前面加上explain关键字,可以看到查询计划和其它一些信息。这个查询本身是不会执行的。
一个Hive任务会包含一个或者多个stage(阶段),不同的stage会存在依赖关系。越复杂的查询会引入越多的stage,同样耗时也会越多。
一个stage可以是一个MapReduce任务,也可以是一个抽象阶段,或
Hive优化策略
weixin_34319999的博客
07-23
41
hive优化目标
在有限的资源下,运行效率高。
常见问题
数据倾斜、Map数设置、Reduce数设置等
hive运行
查看运行计划
explain [extended] hql
例子
explain select no,count(*) from testudf group by no;
explain extended select no,count(*...
参与评论
您还未登录,请先
登录
后发表或查看评论
工作总结hive优化
07-11
hive优化.pdf
工作常用之Hive 调优【三】 Explain 查看执行计划及建表优化
最新发布
码农Maynor的博客
09-29
120
分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所
有的数据文件。
Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。
Hive性能优化(全面)
weixin_34342905的博客
02-05
1388
Hive性能优化(全面)
2018-02-02Hadoop大数据应用
1.介绍
首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题?
数据量大不是问题,数据倾斜是个问题。
jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,耗时很长。原因是map reduce作业初始化的时...
记录一个hive隐式转换的问题。
北方的大数据之路
10-16
332
场景描述:
在下面这个sql中,因为两个id字段类型不一致,查询的结果不符合预期。
select
from
select
-- id的字段类型为id
distinct id as id
from
slice_video_feature
) a
inner join (
select
-- id的字段类型为string
《Hive用户指南》- Hive性能调优
机器学习,大数据
04-11
158
文章目录1. 数据模型相关1.1 Partition 分区表1.2 Bucket 桶表2. 场景优化2.1 全排序2.2 笛卡尔积2.3 EXISTS/IN子查询2.4 Multi-group by3. 配置相关4. 数据倾斜问题4.1 空值导致的数据倾斜4.2 不同数据类型关联导致的数据倾斜4.3 大表关联导致的数据倾斜Reference
Hive针对的应用场景是OLAP,通常对大数据集进行查询...
hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
热门推荐
longshenlmj的专栏
01-20
2万+
数据做压缩和解压缩总会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销
最好对那些I/O密集型的作业使用数据压缩
hive表的存储格式为
TEXTFILE
SEQUENCEFILE(三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩)
RCFILE
自定义格式
hive调优方式
Naerdoy的博客
03-29
3358
1.fetch(hive可以避免MapRedice)对于hive可以简单地读取employee对应的储存目录下的文件,然后输出查询结果到控制台,修改hive.fetch.task.conversion的参数为more即可
2.本地模式 设置数据出入量,设置local mr的最大输入文件个数,当输入文件滆湖小于这个值时采用local mr的方式,默认为4
3.表的优化
1.小表join大表
将key相对分散,并且数据量小的表join的左边,这个可以有效减少内存溢出错误发生的几率,在进一步可以使用gr.
Hive常用的调优方法
qq_38263082的博客
02-09
2638
前言:Hive调优是日常工作中比较常见的问题,本文简要总结一下常用的调优方法。
一、代码层面的优化
1.去重两种方式:distinct和group by。推荐使用group by来对数据去重。distinct会将相同的key shuffle到一个reduce task中处理,group by 会启用多个reduce task来对数据进行分组去重。
2. 在做具体业务时,尽量明确具体的字段内容,避免使用select * 。
3.在使用join时,可以先过滤表中的数据之后再进行join。
二、小文件过
hive调优系列—hive执行计划
eli的博客
09-07
434
执行结果如下,两个结果相同。笔者看到别的文章都表示上述两段sql结果不同,但是笔者实际执行的结果是相同的,基于hive2.1.1。准备好两张分区表以及测试数据后,sql案例如下,两段join的sql,关联条件加上了非等值判断。explain dependency主要用于分析sql的数据来源。
Hive系列 (十):Hive调优
Eric Ray的博客
09-09
1372
Hive优化详细解释
Hive执行计划详解
weixin_39216383的博客
01-29
1万+
Hive的底层就是MapReduce的编程实现,我们可以通过执行计划详细的了解执行过程。对于我们对底层的理解,有很大的帮助。语法及结构官方对Hive Explain的英文解释,如果大家英文不错的话,强推:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain首先,Explain的语法:EXPLAIN [EXT
Hive执行计划
mjjyszazc的博客
08-05
1491
1、hive显示执行计划语法
EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] hql
末尾hql是你要执行的hive语句 中间[]中为可选参数
2、执行计划示例
贴一个很简单的hql语句执行计划示例,用了extended子句,感觉是比较详细的一个输出了,如果不加extended,输出会显示mr过程以及stage的依赖关系,对于排查基本的语法错误来说其实已经足够了(首先申明我很菜,其实没太看明白,
搞定Hive执行计划
qq_34599449的博客
10-14
539
Hive Explain 语句类似Mysql 的Explain 语句,提供了对应查询的执行计划,对于我们在理解Hive底层逻辑、Hive调优、Hive SQL书写等方面提供了一个参照,在我们的生产工作了是一个很有意义的工具。
1.Hive Explain语法
EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query
hive explain 的语法规则如上,后面将按照对应的子句进行探讨。
1.
HIVE 处理日志,自定义inputformat 完整版
松篁
01-23
157
网上找了很多材料都是写了部份代码的,今天在峰哥的帮助下实现了此功能。
为何要设置此功能是由于 hive fields terminated by '||||' 不支持 字符串导致
将你的inputformat类打成jar包,如MyInputFormat.jar
将MyInputFormat.jar放到 hive/lib里,然后就可以建表了
假设你的inputFormat类路径是co...
Hive数据倾斜总结
wsjslient的博客
03-02
844
这里写目录标题前言一、什么是Hive的数据倾斜二、发生数据倾斜的原因三、如何解决不同类型的数据倾斜
前言
数据倾斜是大数据处理不可避免会遇到的问题,那么在Hive中数据倾斜又是如何导致的?通过本片本章,你可以清楚的认识为什么Hive中会发生数据倾斜;发生数据倾斜时我们又该用怎么的方案去解决不同的数据倾斜问题。
一、什么是Hive的数据倾斜
Hive是如何将hql语法转换成MR执行的
涤生大数据
03-19
2万+
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能.说白了,hive就是MapReduce客户端,将用户编写的HQL语法转换成MR程序进行执行。那么,hive是如何实现将hql语法转换成Mr的呢?
如图中所示,总的来说,Hive是通过给用户提供的一系列交互接口,接...
Hive 学习笔记 (二)
乄浅醉的专栏
06-24
4840
存储格式Hive从两个维度对表的存储进行管理: row format 和 file format。 row format 指 行和一行中的字段如何存储。对于Hive来说,row format的定义由SerDe定义。查询表时,SerDe 把文件中字节形式的数据行反序列化为Hive内部操作数据行时所使用的对象形式。执行Insert 或者CTAS 时,表的SerDe会把Hive的数据行内部表示形式序列化成
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:游动-白
设计师:我叫白小胖
返回首页
艾文编程
CSDN认证博客专家
CSDN认证企业博客
码龄11年
暂无认证
314
原创
8576
周排名
1807
总排名
79万+
访问
等级
1万+
积分
903
粉丝
370
获赞
138
评论
2534
收藏
私信
关注
热门文章
Python数据可视化教程:基于Plotly的动态可视化绘图
69623
Spark运行在Standalone模式下产生的临时目录的问题
19802
自然语言处理(NLP):20 基于知识图谱的智能问答系统
16155
图像处理(3):深度学习之图像分类(垃圾分类案例)
14384
自然语言处理(NLP):24基于文本语义的智能问答系统
12949
分类专栏
自然语言处理
付费
32篇
Go语言编程
6篇
Python语言编程
20篇
深度学习与图像处理
17篇
机器学习
10篇
分布式数据存储技术
75篇
分布式搜索引擎
21篇
分布式数据计算技术
81篇
数据库技术入门
32篇
工作点滴那些事
24篇
最新评论
自然语言处理(NLP):15 seq2seq+attention图解原理+论文剖析(01)
艾文编程:
对应的内容:https://edu.csdn.net/course/detail/29290
PyTorch:The “freeze_support()” line can be omitted if the program is not going to be frozen
BIGDzZ:
能请问这一行写哪吗
PyTorch:The “freeze_support()” line can be omitted if the program is not going to be frozen
python学习站_yana:
为什么呢?我一直以为这一行没啥用,从来不写这一行
零基础Go语言从入门到精通(Go操作Redis实战)
艾文编程:
基于gin框架的Go Web实战请关注:
https://download.csdn.net/course/detail/37204
Gin框架Go Web项目实战
艾文编程:
基于gin框架的Go Web实战请关注:
https://download.csdn.net/course/detail/37204
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
《零基础入门学Python》 matplotlib数据可视化入门
跟艾文学编程 《零基础入门学Python》Jupyter Notebook安装和使用
跟艾文学编程《零基础数据学Python》(02)pyecharts数据可视化
2022年19篇
2020年34篇
2019年29篇
2017年3篇
2016年52篇
2015年145篇
2014年15篇
2013年27篇
目录
目录
分类专栏
自然语言处理
付费
32篇
Go语言编程
6篇
Python语言编程
20篇
深度学习与图像处理
17篇
机器学习
10篇
分布式数据存储技术
75篇
分布式搜索引擎
21篇
分布式数据计算技术
81篇
数据库技术入门
32篇
工作点滴那些事
24篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
艾文编程
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值