hive中的桶
hive中有桶的概念,对于每一个表或者分区,可以进一步组织成桶,说白点,就是更细粒度的数据范围。
hive采用列值哈希,然后除以桶的个数以求余的方式决定该条记录存放在哪个桶当中。
使用桶的好处:
1、获得更高的查询处理效率。桶为表加上了额外的结构,Hive在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。
2、使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。
需要特别注意的是:clustered by和sorted by不会影响数据的导入,这意味着,用户必须自己负责数据如何如何导入,包括数据的分桶和排序。
可以使用'set hive.enforce.bucketing = true'
可以自动控制上一轮reduce的数量从而适配bucket的个数,
看个例子
原始数据
1 15 xiaohong
2 16 xiaoming
3 17 xiaohuang
3 18 xiaocui
4 19 xiaoma
5 21 xiaocai
6 22 xiaojie
7 25 xiaoliu
8 28 xaoqi
先创建一张普通表,再创建一张桶的表。
create table student(id INT, age INT, name STRING)
partitioned by(p_date STRING)
row format delimited fields terminated by '\t'; create table bucketed_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 '\t';
load数据到普通表,因为直接load到分桶的表是不会分桶,需要insert进行才会根据根据分桶要求进行分桶。
LOAD DATA LOCAL INPATH '/home//aaa' OVERWRITE INTO table bucketed_student partition(p_date='2016'); set hive.enforce.bucketing = true;
insert overwrite table bucketed_student partition(p_date='2016') select id,age,name from student where p_date=2016
查看两表的目录,发现分桶会生成两份数据文件
hadoop fs -ls /data/hive/warehouse/temp.db/bucketed_student/p_date=2016
Found 2 items
-rwxr-xr-x 3 webopa hive 50 2016-11-23 13:53 /data/hive/warehouse/temp.db/bucketed_student/p_date=2016/000000_0
-rwxr-xr-x 3 webopa hive 68 2016-11-23 13:53 /data/hive/warehouse/temp.db/bucketed_student/p_date=2016/000001_0
普通表是一份
hadoop fs -ls /data/hive/warehouse/temp.db/student/p_date=2016
Found 1 items
-rwxrwxrwx 3 webopa hive 117 2016-11-23 11:41 /data/hive/warehouse/temp.db/student/p_date=2016/aaa
查看下分通表每个文件中的数据。偶数一个文件,基数一个文件。
hadoop fs -cat /data/hive/warehouse/temp.db/bucketed_student/p_date=2016/000000_0
8 28 xaoqi
6 22 xiaojie
4 19 xiaoma
2 16 xiaoming
hadoop fs -cat /data/hive/warehouse/temp.db/bucketed_student/p_date=2016/000001_0
7 25 xiaoliu
5 21 xiaocai
3 18 xiaocui
3 17 xiaohuang
1 15 xiaohong
查看sampling数据:
select * from bucketed_student tablesample(bucket 1 out of 2 on id);
8 28 xaoqi 2016
6 22 xiaojie 2016
4 19 xiaoma 2016
2 16 xiaoming 2016
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的数据
hive中的桶的更多相关文章
- Hive学习笔记——Hive中的分桶
对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记 ...
- Hive中数据的导入与导出
最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中.毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容.如果哪里有错误或者疏漏 ...
- 061 hive中的三种join与数据倾斜
一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...
- hive,分桶,内外部表,分区
简单的word-count操作: [root@master test-map]# head -10 The_Man_of_Property.txt #先看看数据Preface“The Forsy ...
- Hive分区和桶的概念
Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 S ...
- hive的分桶
套话之分桶的定义: 分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储.对于 hive 中每一个表.分区都可以进一步进行分桶. 列的哈希值除以桶的个数来决定每条数据划分在哪个桶中.(网上其它定 ...
- Hive中的数据倾斜
Hive中的数据倾斜 hive 1. 什么是数据倾斜 mapreduce中,相同key的value都给一个reduce,如果个别key的数据过多,而其他key的较少,就会出现数据倾斜.通俗的说,就是我 ...
- hive中的优化问题
一.fetch抓取 fetch 抓取是指,hive中对某些情况的查询可以不必使用MapReduce计算.(1)把hive.fetch.task.conversion 设置成none,然后执行查询语句, ...
- Hive中的一些点
hive严格模式 Hive中Order by和Sort by的区别是什么? hive中order by,sort by, distribute by, cluster by作用以及用法 Hadoop ...
随机推荐
- Android Studio Exception汇总
Android Studio 运行时出现 finished with non-zero exit value 2 错误分析 原因: 项目包含了两个相同包名的不同 project 或者 jar 举例: ...
- 开发问题(C#)
1. 重新引入dll文件之后,显示黄色感叹号,可能的原因:dll文件受损或者dll版本与工程Framework版本不一致. 2. 错误 232 无法将文件“..\SES.Common\bin\Debu ...
- 线段树(segment tree)
线段树在一些acm题目中经常见到,这种数据结构主要应用在计算几何和地理信息系统中.下图就为一个线段树: (PS:可能你见过线段树的不同表示方式,但是都大同小异,根据自己的需要来建就行.) 1.线段树基 ...
- 2016HUAS_ACM暑假集训2G - Who's in the Middle
这个题真的没什么好说的.一个排序就能解决的问题.唯一感到不爽的是这道题不是0msAC的,希望各位大神能够给我点指导. 头文件#include<algorithm>,注意一下排序函数的用法就 ...
- CSS 样式的优先级
1. 同一元素引用了多个样式时,排在后面的样式属性的优先级高 例如,下面的 div,同时引用了 [.default] 和 [.user] 中的样式,其中 [.user] 样式中的 width 属性会替 ...
- javascript中的事件委托
这几天看到一个面试题,大概就是,让你给1000个li都添加一个click事件,应该怎么添加?大多数人第一开始的感觉可能就是,每个li上边都添加一个呗,那要是这样的话,估计面试的时候就会GG了,这里就是 ...
- js监听rem实现响应式
原文链接:http://caibaojian.com/web-app-rem.html (function (doc, win) { var docEl = doc.documentElement, ...
- SQL Server DBA日常查询视图_数据库对象视图
1.数据库 use master; exec sp_helpdb 1.1查询数据库大小 1.2查询数据库状态 use msdb select name, user_access_desc, --用户访 ...
- 使用yield关键字来提高性能
比如我们在开发当中往往会遇到这样的问题: public List<string> FindBobs(string [] names) { List<string> bobs ...
- .Net操作Excel
先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用. .Net导出代码: /// <summ ...