hive中table可以拆分成partition,table和partition可以通过‘CLUSTERED BY ’进一步分bucket,bucket中的数据可以通过‘SORT BY’排序。
bucket主要作用:
1. 数据sampling
2. 提升某些查询操作效率,例如mapside join
需要特别注意的是:clustered by和sorted by不会影响数据的导入,这意味着,用户必须自己负责数据如何如何导入,包括数据的分桶和排序。
'set hive.enforce.bucketing = true' 可以自动控制上一轮reduce的数量从而适配bucket的个数,当然,用户也可以自主设置mapred.reduce.tasks去适配bucket 个数,推荐使用'set hive.enforce.bucketing = true'
示例:
建临时表student_tmp,并导入数据:
hive> desc student_tmp;
OK
id int
age int
name string
stat_date string
Time taken: 0.106 seconds
hive> select * from student_tmp;
OK
1 20 zxm 20120801
2 21 ljz 20120801
3 19 cds 20120801
4 18 mac 20120801
5 22 android 20120801
6 23 symbian 20120801
7 25 wp 20120801
Time taken: 0.123 seconds
建student表:
hive>create table student(id INT, age INT, name STRING)
>partitioned by(stat_date STRING)
>clustered by(id) sorted by(age) into 2 bucket
>row format delimited fields terminated by ',';
设置环境变量:
>set hive.enforce.bucketing = true;
插入数据:
>from student_tmp
>insert overwrite table student partition(stat_date="20120802")
>select id,age,name where stat_date="20120801" sort by age;
查看文件目录:
$ hadoop fs -ls /user/hive/warehouse/studentstat_date=20120802/
Found 2 items
-rw-r--r-- 1 work supergroup 31 2012-07-31 19:52 /user/hive/warehouse/student/stat_date=20120802/000000_0
-rw-r--r-- 1 work supergroup 39 2012-07-31 19:52 /user/hive/warehouse/student/stat_date=20120802/000001_0
查看sampling数据:
hive> select * from student tablesample(bucket 1 out of 2 on id);
Total MapReduce jobs = 1
Launching Job 1 out of 1
.......
OK
4 18 mac 20120802
2 21 ljz 20120802
6 23 symbian 20120802
Time taken: 20.608 seconds
tablesample是抽样语句,语法:TABLESAMPLE(BUCKET x OUT OF y)
y必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。例如,table总共分了64份,当y=32时,抽取 (64/32=)2个bucket的数据,当y=128时,抽取(64/128=)1/2个bucket的数据。x表示从哪个bucket开始抽取。例 如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。
相关推荐
- **Bucket与Sampling**:使用Bucket可以改善JOIN操作的性能。 - **Partition**:合理使用分区可以显著提高查询效率。 - **JOIN**:掌握JOIN的原则和技巧是提高Hive查询性能的关键。 - **合并小文件**:处理大量的小...
Hive on Spark EXPLAIN statement : 讲述了 Common Join / Map join / Bucket Map Join / Sorted Merge Bucket Map Join / skew join 在explain 中的 树结构 。In Hive, command EXPLAIN can be used to show the ...
包括 Hadoop 计算框架的特性、常用优化手段、全排序、笛卡尔积、EXIST 子句、决定 reducer 个数、合并 MapReduce 操作、Bucket 与 Sampling、Partition 和 JOIN 的优化、处理小文件和 GroupBy 的优化。 7. Hive ...
2. **Bucketing**:通过设定 Bucket,可以实现 Bucket Map Join,将小表的 Bucket 存入内存,降低内存需求。 **Hive 操作优化** 1. **全排序**:Hive 的 `SORT BY` 只能在单机范围内排序,而 `ORDER BY` 实现全局...
Hive提供了多种Join类型,包括Common Join、Map Join、Bucket Map Join等,每种Join都有其适用场景: - **Common Join**:标准的Join操作,适用于大多数情况。 - **Map Join**:适用于小表参与Join的情况,可以将小...
1. HIVE结构 6 ...9.6 Bucket 与 sampling 56 9.7 Partition 57 9.8 JOIN 58 9.8.1 JOIN原则 58 9.8.2 Map Join 58 9.8.3 大表Join的数据偏斜 60 9.9 合并小文件 62 9.10 Group By 62 10. HIVE FAQ: 62
使用Bucket Map Join优化Join操作;以及使用Hive的缓存机制提升查询速度。 8. **Hive与其它大数据组件的协同**:Hive可以与HBase、Impala、Pig等工具配合使用,实现更复杂的数据处理和分析场景。 通过阅读和理解这...
- **桶**(Bucket):通过将数据分成较小的部分(桶),Hive可以实现更好的数据局部性和并行处理能力。 #### Hive的数据存储 Hive的所有数据都存储在HDFS中,这使得它可以轻松地与其他Hadoop生态系统的组件集成。...
4. **桶(Bucket)** - 桶是对数据的进一步细分,通常用于提高查询效率。 - 桶通过对指定列进行哈希计算来实现数据的分布,每个桶对应一个文件。 - 例如,若将表`wyp`中的`id`列分成16个桶,则`id`列的值通过哈希...
使用Joins的优化策略,如Map-side Join和Bucket Map Join;以及使用EXPLAIN查看查询计划,调整查询语句。 六、Hive与其他系统集成 Hive可以与多种大数据生态系统的组件无缝集成,如Pig、HBase、Spark等。例如,Hive...
Hive的优化与技巧包括如何选择合适的Map和Reduce操作的数量,如何处理大表之间的JOIN操作以避免数据偏斜,如何合并小文件以提高数据处理效率,以及如何使用Bucket和Sampling等技术。同时,Hive的优化还包括如何决定...
在这一讨论中,将详细介绍Hive中的六种join策略,这些策略包括Common Join、Map Join、AutoMap Join、Bucket Map Join、Bucket Sort Merge Map Join和Skew Join。 ***mon Join(普通Join) 普通join是最基本的join...
- **Bucket**:对指定列进行哈希分桶,提高查询性能,但不提供传统数据库的索引功能。 Hive的这种设计使得用户可以根据需求自由组织数据,同时也保证了与Hadoop的紧密集成,利用Hadoop的分布式计算能力进行大规模...
### Hive用户指南中文版知识点概览 #### 一、Hive结构 **1.1 Hive架构** Hive作为建立在Hadoop之上的数据仓库基础架构,其主要目标是简化大数据的处理过程。Hive的架构主要包括以下几个核心组件: - **用户接口*...
### Hive语法详解 #### 一、安装和配置 **1.1 要求** - **硬件需求**:为了高效地运行Hive,推荐至少具备4GB内存,并且Hive服务器应该有足够的磁盘空间来存储元数据。 - **软件需求**:Hive需要Java环境支持,...
- **Bucket**:表示表的桶。 - **Column**:表示表的列。 - **SerDe**:用于序列化和反序列化的接口。 - **StorageHandler**:控制存储行为的对象。 - **InputFormat/OutputFormat**:指定输入/输出数据格式。 ####...
- 采用`BUCKET MAP JOIN`来优化JOIN性能。 ##### 4. 利用统计信息 - **问题**:缺乏有效的统计信息会导致执行计划的不合理。 - **解决方案**: - 定期更新表和分区的统计信息。 - 利用`ANALYZE TABLE`命令收集...
- 使用Bucket与sampling优化查询效率 - 分区和JOIN操作的使用原则 - MapJoin的使用 - 大表Join时数据偏斜的处理 - 合并小文件 Hive还提供了一些内置函数(UDF),包括基本的关系操作符、代数操作符、逻辑操作符、...