Hive内部培训资料及性能优化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
22
Hive调优 – EXPLAIN
• EXPLAIN [EXTENDED | DEPENDENCY]
在使用查询语句前,可以使用EXPLAIN关键字查看HIVE将为某个查询使用多 个MapReduce作业。 EXPLAIN的输出中有很多查询执行计划的详细信息,包 括抽象语法树、Hive执行各阶段之间的依赖图以及每个阶段的信息。如果要 查看更详细的信息,可以在查询时加上EXTENDED。 DEPENDENCY 以json格式输出执行语句会读取的input table和input partition信 息,这样debug语句会读取哪些表就很方便了。
数据库(database)
表(table)
表(table)
分区 桶 桶 分区 倾斜数据 正常数据
桶
桶
18
Hive调优 - 存储格式
• Built-in Formats:
– Parquet – ORCFile – RCFile – Avro – Delimited Text – Regular Expression – S3 Logfile – Typed Bytes
3
Hive的架构简介 – 在Hadoop生态圈的位置
建立在Hive之上的交换层
让传统DBA或者Java工程师 轻松就能完成更多的工作
最终转化成MapReduce Job
4
Hive的架构简介 – 接口
5
Hive的特性 – SQL支持
Sub-queries for IN/NOT IN,Union All
23
Hive调优 – 磁盘问题
• 如果磁盘不是问题,增加副本数,找到平衡 增加副本数,会较大概率增加从本地获取数据。减少网络传输,加快运行。
CREATE TABLE logs (uid INT, ts BIGINT, line STRING) PARTITIONED BY (dt STRING, country STRING) CLUSTERED BY(uid) SORTED BY (uid ASC) INTO 32 BUCKETS; LOAD DATA LOCAL INPATH 'input/hive/partitions/file1' INTO TABLE logs PARTITION (dt='2001-01-01', country='GB'); /user/hive/warehouse/logs/dt=2010-01-01/country=GB/file1 /file2 /country=US/file3 /dt=2010-01-02/country=GB/file4 /country=US/file5 /file6 hive> SHOW PARTITIONS logs; SELECT ts, dt, line dt=2001-01-01/country=GB FROM logs dt=2001-01-01/country=US dt=2001-01-02/country=GB WHERE country='GB'; dt=2001-01-02/country=US Note: • 使用bucket,需要设置 hive.enforce.bucketing属性为true • 如果桶排序,还需要设置 hive.enforce .sorting属性为true
6
第一章
第二章 第三章 第四章
Hive 是什么
Hive 基本操作
怎么用Hive
Hive的调优及发展
7
Hive基本操作 – DDL
• • • • • • • • Create/Drop/Alter Database Create/Drop/Truncate Table Alter Table/Partition/Column Create/Drop/Alter View Create/Drop Index Create/Drop Function Show Describe
20
Hive调优 – 参数
• • • • • • • 以下常用设置 set hive.optimize.mapjoin.mapreduce=true; set hive.optimize.bucketmapjoin=true; set hive.optimize.bucketmapjoin.sortedmerge=true; set hive.auto.convert.join=true; set hive.auto.convert.sortmerge.join=true; set set hive.auto.convert.sortmerge.join.noconditionaltask=true; set hive.fetch.task.conversion=more; //开启Fetch任务,对于上述简单的列查询不在 启用MapReduce job。默认是minimal 当使用bucket数据时 • set hive.enforce.bucketing=true; • set hive.enforce.sorting=true; • set hive.optimize.bucketmapjoin=true; 需要注意 • io.sort.mb Check Your Settings ! • 更多 …
10
Hivቤተ መጻሕፍቲ ባይዱ基本操作 – DML
• Loading files into tables • Inserting data into Hive Tables from queries • Writing data into the filesystem from queries
Note:Multiple Insert
• 数据准备
– 定义数据仓库放置目录: HDFS目录 /user/cloudil/cdr/bssap/20120717/ bssap - 协议类型 20120717 - 年月日 (开始时间) 以bssap为例,自行管理仓库数据,按天查询创建分区; – 建表(支持按时间分区的外部表) – 加载数据 LOAD DATA INPATH '/user/cloudil/bssap-2012-08-05-09/' INTO TABLE bssap PARTITION (date='20120805');
1
第一章
第二章 第三章 第四章
Hive 是什么
Hive 特性
怎么用Hive
Hive的调优及发展
2
Hive 是什么?
•Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文 件映射为一张数据库表,并提供类SQL查询功能。 •本质是将HQL转换为MapReduce程序 Hive关注以下几点: • 在Hadoop中的数据可扩展的SQL处理 • 可扩展到100PB+ • 结构化和非结构化数据
• Map join
该查询Job没有reducer; 使用时充分利用Bucketed Table,需要设置hive.optimize.bucketmapjoin为true;
13
第一章
第二章 第三章 第四章
Hive 是什么
Hive 基本操作
怎么用Hive
Hive的调优及发展
14
Hive 使用 – 以Mc为例
如何选择?
托管表 CREATE/LOAD DROP
把数据已到仓库目录 元数据和数据会被一起删除
外部表
创建表时指明外部数据的位置 只删除元数据
9
Hive基本操作 – Partition And Bucket
• • Hive把表组织成“分区”。这是一种根据“分区列”的值对表进行粗略划分 的机制。使用分区可以加快数据分片的查询速度 表或分区可以进一步分为“桶”,会为数据提供额外的结构获取更高的查询 处理
12
Hive基本操作 – Queries Join
• Inner join
Hive只支持等值连接; JOIN 子句中表的顺序很重要,一般最好将最大的表在最后;
• Outer join
外连接可以让你找到连接表中不能匹配的数据行;
慎重使用! 弄懂再用
• Semi join
目前并不支持IN子查询,可以使用LEFT SEMI JOIN达到相同效果 (右表最能在ON子句 中出现);
• 3 rd -Party Addons:
– JSON – XML
19
Hive调优 – 索引
• 索引是标准的数据库技术,hive 0.7版本之后支持索引。Hive 提供有限的索引功能,这不像传统的关系型数据库那样有 “键(key)”的概念,用户可以在某些列上创建索引来加速某些 操作,给一个表创建的索引数据被保存在另外的表中。 Hive 的索引功能现在还相对较晚,提供的选项还较少。但是,索 引被设计为可使用内置的可插拔的java代码来定制,用户可以 扩展这个功能来满足自己的需求。 当然不是说有的查询都会 受惠于Hive索引。用户可以使用EXPLAIN语法来分析HiveQL语 句是否可以使用索引来提升用户查询的性能。像RDBMS中的 索引一样,需要评估索引创建的是否合理,毕竟,索引需要 更多的磁盘空间,并且创建维护索引也会有一定的代价。 用 户必须要权衡从索引得到的好处和代价。
8
Hive基本操作 – 托管表和外部表
Hive 默认创建Managed Table,由Hive来管理数据,意味着Hive会将数据移动到数 据仓库目录。 另外一种选择是创建External Table,这时Hive会到仓库目录以外的位置访问数据。
• 如果所有处理都由Hive完成,应该使用Managed Table。 • 如果要用Hive和其它工具来处理同一个数据集, 应该使用External Tables。
WHERE Clause ALL and DISTINCT Clauses Partition Based Queries HAVING Clause LIMIT Clause REGEX Column Specification
https:///confluence/display/Hive/LanguageManual+Sel ect
21
定义Split的大小 - Always
• • • • • Mapred.max.split.size and mapred.min.split.size Hive processes data in chunks subject to these bounds. Min to large -> Too few mappers. Max to small -> Too many mappers. Tune variables until mappers occupy: - All map slots if you own the cluster. - Reasonable number of map slots if you don’t. • Example - set mapred.max.split.size=100000000; - set mapred.min.split.size=1000000; • Manual today, automatic in future version of Hive. • You will need to set these for most queries.
11
Hive基本操作 – Queries
SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMIT number]
• 数据应用
– 查询与ET
15
Hive 使用 – 连接Hypertable
• Hypertable 创建表
• Hive从Hypertable读数据
• Hive往Hypertable写数据
16
第一章
第二章 第三章 第四章
Hive 是什么
Hive 基本操作
怎么用Hive
Hive的调优及发展
17
Hive 调优 – 数据存储模型