Hadoop Hive概念学习系列之hive里的桶(十一)

简介:

 Hive还可以把表或分区,组织成桶。将表或分区组织成桶有以下几个目的:

  第一个目的是为看取样更高效,因为在处理大规模的数据集时,在开发、测试阶段将所有的数据全部处理一遍可能不太现实,这时取样就必不可少。

  第二个目的是为了获得更好的查询处理效率。

 

        桶为了表提供了额外的结构,Hive在处理某些查询时利用这个结构,能给有效地提高查询效率。

        桶是通过对指定列进行哈希计算来实现的,通过哈希值将一个列名下的数据切分为一组桶,并使每个桶对应于该列名下的一个存储文件

 

 

    在建立桶之前,需要设置hive.enforce.bucketing属性为true,使得hive能识别桶。

  以下为创建带有桶的表的语句:

CREATE TABLE bucketed_user(
id INT,
name String
)
CLUSTERED BY (id) INTO 4 BUCKETS;

   向桶中插入数据,这里按照用户id分成了4个桶,在插入数据时对应4个reduce操作,输出4个文件。

 

 

 

  分区中的数据可以被进一步拆分成桶,bucket,不同于分区对列直接进行拆分,桶往往使用列的哈希值进行数据采样。

在分区数量过于庞大以至于可能导致文件系统崩溃时,建议使用桶。

  桶的数量是固定的。

  Hive使用基于列的哈希函数对数据打散,并分发到各个不同的桶中从而完成数据的分桶过程。

  注意,hive使用对分桶所用的值进行hash,并用hash结果除以桶的个数做取余运算的方式来分桶保证了每个桶中都有数据,但每个桶中的数据条数不一定相等

  哈希函数的选择依赖于桶操作所针对的列的数据类型。除了数据采样,桶操作也可以用来实现高效的Map端连接操作。

   记住,分桶比分区,更高的查询效率

 

 

 

如何进行桶操作?

  例子1

1、创建临时表 student_tmp,并导入数据。

hive> desc student_tmp;
hive> select * from student_tmp;

 

 


2、创建 student 表。经过分区操作过后的表已经被拆分成2个桶。

复制代码
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 ',';
复制代码

 

  分区中的数据可以被进一步拆分成桶!!!正确理解

  所有,桶,先partitioned by (stat_date string)

      ,再,clustered by (id) sorted by(age) into 2 bucket

 

 

3、设置环境变量。

hive> set hive.enforce.bucketing=true;

 

 


4、插入数据

hive> from student_tmp
insert overwrite table student partition(stat_date='2015-01-19')
select id,age,name where stat_date='2015-01-18' sort by age;

 

  这都是固定的格式,一环扣一环的。


5、查看文件目录
$ hadoop fs -ls /usr/hive/warehouse/student/stat_date=2015-01-19/


6、查看 sampling 数据。
tablesample 是抽样语句,语法如下
tablesample(bucket x out of y)
y 必须是 table 中 BUCKET 总数的倍数或者因子。

 

 

 

 

 

 

例子2

  在下面的例子中,经过分区操作过后的表已经被拆分成100个桶。

复制代码
CREATE EXTERNAL TABLE videos_b(
prodicer string,
title string,
category string
)
PARTITIONED BY(year int)
CLUSTERED BY(title)INTO 100 BUCKETS;
复制代码

 

 

  现在,我们开始填充这张带桶操作的表:

set hive.enfirce.bucketinig=true;
FROM videos
INSERT OVERWRITE TABLE videos_b
PARTITION(year=1999)
SELECT producer,title,string WHERE year=2009;

 

 

  如果不使用set hive.enforce.bucketing=true这项属性,我们需要显式地声明set mapred.reduce.tasks=100来设置Reducer的数量。

此外,还需要在SELECT语句后面加上CLUSTERBY来实现INSERT查询。

  下面是不使用桶设置的例子:

set mapred.reduce.tasks=100;
FROM videos
INSERT OVERWRITE TABLE videos_b
PARTITION(year=1999)
SELECT producer,title,string WHERE year=2009 CLUSTER BY title;

 


本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/6105143.html,如需转载请自行联系原作者

相关文章
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-13-Hive 启动Hive 修改启动参数命令行启动测试 几句简单的HQL了解Hive
Hadoop-13-Hive 启动Hive 修改启动参数命令行启动测试 几句简单的HQL了解Hive
53 2
|
28天前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
50 1
|
28天前
|
SQL 分布式计算 Hadoop
手把手的教你搭建hadoop、hive
手把手的教你搭建hadoop、hive
71 1
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
32 4
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
49 3
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
42 2
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
33 2
|
1月前
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
40 1
|
1月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
45 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
79 0
下一篇
无影云桌面