hive中的bucket table

前言

bucket table(桶表)是对数据进行哈希取值,然后放到不同文件中存储

应用场景

当数据量比较大,我们需要更快的完成任务,多个map和reduce进程是唯一的选择。
但是如果输入文件是一个的话,map任务只能启动一个。
此时bucket table是个很好的选择,通过指定CLUSTERED的字段,将文件通过hash打散成多个小文件。

create table test
(id int,
 name string
)
CLUSTERED BY(id) SORTED BY(name) INTO 32 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘/t’;

执行insert前不要忘记设置

set hive.enforce.bucketing = true;

强制采用多个reduce进行输出

hive> INSERT OVERWRITE TABLE test select * from test09;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 32
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapred.reduce.tasks=<number>
Starting Job = job_201103070826_0018, Tracking URL = http://hadoop00:50030/jobdetails.jsp?jobid=job_201103070826_0018
Kill Command = /home/hjl/hadoop/bin/../bin/hadoop job  -Dmapred.job.tracker=hadoop00:9001 -kill job_201103070826_0018
2011-03-08 11:34:23,055 Stage-1 map = 0%,  reduce = 0%
2011-03-08 11:34:27,084 Stage-1 map = 6%,  reduce = 0%
*************************************************
Ended Job = job_201103070826_0018
Loading data to table test
5 Rows loaded to test
OK
Time taken: 175.036 seconds

hive的sunwg_test11文件夹下面出现了32个文件,而不是一个文件

[[email protected] ~]$ hadoop fs -ls /ticketdev/test
Found 32 items
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000000_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000001_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000002_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000003_0
-rw-r–r–   3 ticketdev hadoop          8 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000004_0
-rw-r–r–   3 ticketdev hadoop          9 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000005_0
-rw-r–r–   3 ticketdev hadoop          8 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000006_0
-rw-r–r–   3 ticketdev hadoop          9 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000007_0
-rw-r–r–   3 ticketdev hadoop          9 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000008_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000009_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000010_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000011_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000012_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:20 /ticketdev/test/attempt_201103070826_0018_r_000013_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000014_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000015_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000016_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000017_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000018_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000019_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000020_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000021_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000022_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000023_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000024_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000025_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000026_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000027_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000028_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000029_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000030_0
-rw-r–r–   3 ticketdev hadoop          0 2011-03-08 11:21 /ticketdev/test/attempt_201103070826_0018_r_000031_0

文件被打散后,可以启动多个mapreduce task
当执行一些操作的时候,你会发现系统启动了32个map任务

时间: 2024-10-01 17:39:24

hive中的bucket table的相关文章

Hive中的分桶

对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中. 把表(或者分区)组织成桶(Bucket)有两个理由: (1)获得更高的查询处理效率.桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构.具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现.比

hive中的表、外部表、分区和桶的理解

一.概念介绍 Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据 Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据.例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.wareh

hive中使用rcfile

(1)建student & student1 表:(hive 托管)create table student(id INT, age INT, name STRING)partitioned by(stat_date STRING) clustered by(id) sorted by(age) into 4 bucketsrow format delimited fields terminated by ','; create table studentrc(id INT, age INT,

kettle连接Hive中数据导入导出(6)

1.hive往外写数据 http://wiki.pentaho.com/display/BAD/Extracting+Data+from+Hive+to+Load+an+RDBMS 连接hive 表输入 1)往excel中写数据 2)往文本文件中写数据 注:这里需要填上hive的表名.字段名,不然会报如下错误: 2016/07/27 15:43:01 - 表输入.0 - ERROR (version 3.2.0, build 1 from 2016-07-07 10.46.10 by xnren

hive中partition如何使用

1.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表时指定的partition的分区空间. 3.如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构. 2.细节 1.一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下. show partitions stage_

Hive中分组取前N个值

分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做order by排序,然后对排序后的成绩,执行自定义函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1, ....),它的作用是按指定的列进行分组生成行序列.在ROW_NUMBER(a,b) 时,若两条记录的a,b列相同

sqoop 从oracle导数据到hive中,date型数据时分秒截断问题

oracle数据库中Date类型倒入到hive中出现时分秒截断问题解决方案 1.问题描述: 用sqoop将oracle数据表倒入到hive中,oracle中Date型数据会出现时分秒截断问题,只保留了‘yyyy-MM-dd',而不是’yyyy-MM-dd HH24:mi:ss'格式的,后面的‘HH24:mi:ss’被自动截断了,在对时间要求到秒级的分析处理中这种截断会产生问题. 2.解决方案: 在用sqoop倒入数据表是,添加--map-column-hive 和--map-column-jav

使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案

在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb --username NAME --passord PASS --verbose -m 1 --table T_USERINFO 错误1:File does not exist: hdfs://opt/sqoop-1.4.4/lib/commons-io-1.4.jar FileNotFoundEx

使用sqoop从mysql往hive中增量导数据shell脚本

一:sqoop增量导入的两种方式 Incremental import arguments: Argument Description --check-column (col) Specifies the column to be examined when determining which rows to import. (the column should not be of type CHAR/NCHAR/VARCHAR/VARNCHAR/ LONGVARCHAR/LONGNVARCHA