大数据--hive分桶查询&&压缩方式

一、分桶及抽样查询

1、分桶表创建

---------------------------------------

hive (db_test)> create table stu_buck(id int,name string)
> clustered by(id)
> into 4 buckets
> row format delimited fields terminated by ‘\t‘;
OK
Time taken: 0.369 seconds

------------------------------------------------------------------------

hive (db_test)> desc formatted stu_buck;
OK
col_name data_type comment
# col_name data_type comment

id int
name string

# Detailed Table Information
Database: db_test
Owner: root
CreateTime: Thu Oct 03 12:14:15 CST 2019
LastAccessTime: UNKNOWN
Protect Mode: None
Retention: 0
Location: hdfs://mycluster/db_test.db/stu_buck
Table Type: MANAGED_TABLE
Table Parameters:
transient_lastDdlTime 1570076055

# Storage Information
SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat: org.apache.hadoop.mapred.TextInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Compressed: No
Num Buckets: 4
Bucket Columns: [id]
Sort Columns: []
Storage Desc Params:
field.delim \t
serialization.format \t
Time taken: 0.121 seconds, Fetched: 28 row(s)

------------------------------------------------------------------

2、数据加载到分桶表

2.1、先创建普通表

------------------------------------------------------------------

hive (db_test)> create table stu_comm(id int,name string)
> row format delimited fields terminated by ‘\t‘;
OK
Time taken: 0.181 seconds

---------------------------------------------------------------------

2.2、加载本地数据到普通表

-------------------------------------------------------------------------

hive (db_test)> load data local inpath ‘/root/hivetest/stu_buck‘ into table stu_comm;
Loading data to table db_test.stu_comm
Table db_test.stu_comm stats: [numFiles=1, totalSize=501]
OK
Time taken: 0.654 seconds

hive (db_test)> select * from stu_comm;
OK
stu_comm.id stu_comm.name
1001 张三
1002 李四
1003 王五
1004 赵六
1005 李琪
1006 赵云
1007 黄月英
1008 诸葛亮
1009 司马懿
1010 张飞
1011 关羽
1012 刘备
1013 曹操
1014 曹植
1015 曹丕
1016 嬴政
1017 韩信
1018 孙权
1019 孙尚香
1020 孙斌
1021 大桥
1022 小乔
1023 鲁班
1024 干将
1025 白起
1026 李白
1027 李信
1028 墨菲特
1029 易
1030 亚瑟
1031 安其拉
1032 妲己
1033 吕布
1034 张苞
1035 鲁肃
1036 董卓
1037 马谡
1038 夏侯惇
1039 夏侯渊
1040 黄忠
Time taken: 0.081 seconds, Fetched: 40 row(s)

-----------------------------------------------------------------------------

2.3、设置hive的分桶相关属性,分桶分的是数据,需要多个mapreduce作业来处理

-------------------------------------------------------------------

hive (db_test)> set hive.enforce.bucketing=true;
hive (db_test)> set mapreduce.job.reduces=4;
hive (db_test)> set hive.enforce.bucketing;
hive.enforce.bucketing=true
hive (db_test)> set mapreduce.job.reduces;
mapreduce.job.reduces=4

---------------------------------------------------------

2.4、通过load加载数据到分桶表无法按照文件分桶,需要通过insert语句来加载数据,也就是通过mapreduce作业来进行分文件

----------------------------------------------------------

hive (db_test)> insert into table stu_buck select id,name from stu_comm;
Query ID = root_20191003122918_48ead4a6-8f19-4f0a-8298-6a57b467bf47
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 4
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 mapreduce.job.reduces=<number>
Starting Job = job_1570075776894_0001, Tracking URL = http://bigdata112:8088/proxy/application_1570075776894_0001/
Kill Command = /opt/module/hadoop-2.8.4/bin/hadoop job -kill job_1570075776894_0001
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 4
2019-10-03 12:29:29,888 Stage-1 map = 0%, reduce = 0%
2019-10-03 12:29:38,338 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.7 sec
2019-10-03 12:29:45,839 Stage-1 map = 100%, reduce = 25%, Cumulative CPU 3.17 sec
2019-10-03 12:29:47,932 Stage-1 map = 100%, reduce = 50%, Cumulative CPU 4.74 sec
2019-10-03 12:29:52,077 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 6.54 sec
MapReduce Total cumulative CPU time: 6 seconds 540 msec
Ended Job = job_1570075776894_0001
Loading data to table db_test.stu_buck
Table db_test.stu_buck stats: [numFiles=4, numRows=40, totalSize=501, rawDataSize=461]
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 4 Cumulative CPU: 6.54 sec HDFS Read: 15129 HDFS Write: 793 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 540 msec
OK
id name
Time taken: 34.6 seconds

=================================================

3、分桶表的数据抽样查询

3.1、分别查询4个文件的数据

-------------------------------------------------------------------------------------

//查询第一个文件的数据

hive (db_test)> dfs -cat /db_test.db/stu_buck/000000_0 http://192.168.1.121:50070/;
cat: No FileSystem for scheme: http
1040 黄忠
1036 董卓
1032 妲己
1028 墨菲特
1024 干将
1020 孙斌
1016 嬴政
1012 刘备
1008 诸葛亮
1004 赵六
Command failed with exit code = 1
Query returned non-zero code: 1, cause: null

=======================================

//查询第二个文件的内容

hive (db_test)> dfs -cat /db_test.db/stu_buck/000001_0 http://192.168.1.121:50070/;
cat: No FileSystem for scheme: http
1005 李琪
1029 易
1037 马谡
1017 韩信
1001 张三
1033 吕布
1009 司马懿
1013 曹操
1025 白起
1021 大桥
Command failed with exit code = 1
Query returned non-zero code: 1, cause: null

===========================================

//查询第三个文件的内容

hive (db_test)> dfs -cat /db_test.db/stu_buck/000002_0 http://192.168.1.121:50070/;
cat: No FileSystem for scheme: http
1010 张飞
1038 夏侯惇
1022 小乔
1034 张苞
1002 李四
1026 李白
1018 孙权
1030 亚瑟
1014 曹植
1006 赵云
Command failed with exit code = 1
Query returned non-zero code: 1, cause: null

==============================================

//查询第四个文件的内容

hive (db_test)> dfs -cat /db_test.db/stu_buck/000003_0 http://192.168.1.121:50070/;
cat: No FileSystem for scheme: http
1015 曹丕
1007 黄月英
1027 李信
1023 鲁班
1019 孙尚香
1003 王五
1011 关羽
1039 夏侯渊
1035 鲁肃
1031 安其拉
Command failed with exit code = 1
Query returned non-zero code: 1, cause: null

====================================================

3.2、抽样查询分桶表的两份数据

---------------------------------------------------------------------

//查询文件1和文件3的数据内容

hive (db_test)> select * from stu_buck tablesample(bucket 1 out of 2 on id);
OK
stu_buck.id stu_buck.name
1040 黄忠
1036 董卓
1032 妲己
1028 墨菲特
1024 干将
1020 孙斌
1016 嬴政
1012 刘备
1008 诸葛亮
1004 赵六
1010 张飞
1038 夏侯惇
1022 小乔
1034 张苞
1002 李四
1026 李白
1018 孙权
1030 亚瑟
1014 曹植
1006 赵云
Time taken: 0.077 seconds, Fetched: 20 row(s)

----------------------------------------------------------------------

//查询文件2和文件4的数据那内容

hive (db_test)> select * from stu_buck tablesample(bucket 2 out of 2 on id);
OK
stu_buck.id stu_buck.name
1005 李琪
1029 易
1037 马谡
1017 韩信
1001 张三
1033 吕布
1009 司马懿
1013 曹操
1025 白起
1021 大桥
1015 曹丕
1007 黄月英
1027 李信
1023 鲁班
1019 孙尚香
1003 王五
1011 关羽
1039 夏侯渊
1035 鲁肃
1031 安其拉
Time taken: 0.097 seconds, Fetched: 20 row(s)

---------------------------------------------------------------------

//bucket 4 out of 2 on id 前面的数字不能大于后面的数字

hive (db_test)> select * from stu_buck tablesample(bucket 4 out of 2 on id);
FAILED: SemanticException [Error 10061]: Numerator should not be bigger than denominator in sample clause for table stu_buck

----------------------------------------------------------------------

二、hive的压缩方式及是否支持切分


压缩格式


工具


算法


文件扩展名


是否可切分


DEFAULT



DEFAULT


.deflate



Gzip


gzip


DEFAULT


.gz



bzip2


bzip2


bzip2


.bz2



LZO


lzop


LZO


.lzo



Snappy



Snappy


.snappy


为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器


压缩格式


对应的编码/解码器


DEFLATE


org.apache.hadoop.io.compress.DefaultCodec


gzip


org.apache.hadoop.io.compress.GzipCodec


bzip2


org.apache.hadoop.io.compress.BZip2Codec


LZO


com.hadoop.compression.lzo.LzopCodec


Snappy


org.apache.hadoop.io.compress.SnappyCodec

1、开启map端输出阶段的压缩(临时设置生效),想永久生效需要在配置文件里面设置

------------------------------------------------------------------

1)开启hive中间传输数据压缩功能,默认为false

hive (default)>set hive.exec.compress.intermediate=true;

2)开启mapreduce中map输出压缩功能,默认为false

hive (default)>set mapreduce.map.output.compress=true;

3)设置mapreduce中map输出数据的压缩方式

hive (default)>set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;

----------------------------------------------------------------

2、开启reduce端输出阶段的压缩

---------------------------------------------------------

1)开启hive最终输出数据压缩功能,默认为false

hive (default)>set hive.exec.compress.output=true;

2)开启mapreduce最终输出数据压缩,默认为false

hive (default)>set mapreduce.output.fileoutputformat.compress=true;

3)设置mapreduce最终数据输出压缩方式

hive (default)> set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;

4)设置mapreduce最终数据输出压缩为块压缩

hive (default)> set mapreduce.output.fileoutset mapreduce.output.fileoutputformat.compress.type=BLOCK;

putformat.compress.type=BLOCK;

===================================================================

原文地址:https://www.cnblogs.com/jeff190812/p/11619581.html

时间: 2024-11-06 14:47:22

大数据--hive分桶查询&&压缩方式的相关文章

大数据江湖之即席查询与分析(下篇)--手把手教你搭建即席查询与分析Demo

上篇小弟分享了几个"即席查询与分析"的典型案例,引起了不少共鸣,好多小伙伴迫不及待地追问我们:说好的"手把手教你搭建即席查询与分析Demo"啥时候能出?说到就得做到,差啥不能差人品,本篇只分享技术干货,目的只有一个,就是让每一个伙伴都能根据本篇向导搭建出一个"即席查询与分析Demo". 为了让各位伙伴能够尽快上手体验,所选案例就以上一篇中的"机动车缉查布控即席查询与分析"为例,上篇我们已经比较详尽的分析了用户需求,没好好听课的

关于webservice大数据量传输时的压缩和解压缩

当访问WebSerivice时,如果数据量很大,传输数据时就会很慢.为了提高速度,我们就会想到对数据进行压缩.首先我们来分析一下. 当在webserice中传输数据时,一般都采用Dataset进行数据传输.执行的过程就是先把Dataset转化为xml进行传输,Dataset转化为xml的格式如下: [html] view plaincopy <DataSetName> <DataTableName> <Column1Name>.......</Column1Nam

asp.net大数据导出execl实现分开压缩并下载

asp.net大数据导出execl实现分开压缩并下载 /// <summary> /// 导出数据到EXCEL 多个表的 /// </summary> /// <param name="ds">数据集</param> /// <param name="AbosultedFilePath">导出的 EXCEL 路径</param> /// <param name="name&quo

C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 大数据支持分表优化

公司的短信平台,数据量越来越大了,需要对数据进行一些优化,下面是拆分后的数据库量参考. 新开发的软件模块,必须支持分表,拆表的功能一个数据表里,不适合保存1000万以上的记录新开发的业务模块,能分表的全分表,否则,将来我们无法用其他小型数据库,例如mysql 现在系统的短信已经进行了拆表接着打算把日志也进行拆表确保数据库里,没有庞大的表,随时可以切换数据库 每个人把自己负责的事情,做到自己能力的及至,做到部门能力的及至,公司能力的及至,就很有希望了有时候我说话很随意,但是一般会注意,我说出去的话

大数据--hive文件存储格式

一.hive文件存储格式 Hive支持的存储数的格式主要有:TEXTFILE .SEQUENCEFILE.ORC.PARQUET. 上图左边为逻辑表,右边第一个为行式存储,第二个为列式存储. 行存储的特点: 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快. 列存储的特点: 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量:每个字段的数据类型一定是相同

大数据架构的典型方法和方式

大量的IT组织如今都已自己的数据架构,因为都依赖于传统的数据架构.处理多数据源已不再新鲜:这些架构已经连接了多维度的数据源例如 CRM 系统,文件系统和其他商用系统.主要运行的关系型数据库有 Oracle, DB2和Microsoft SQL. 如今,一般的数据分析周期是运行一些周期性脚本直接从数据库提取和处理数据.这些主要由 ETL工具如 Informatica 或者 Talend. 目标是将这些提炼的数据加载到数据仓库用于将来的分析. 不幸的是,这一方法在周期结束后可能不适合商务的需要了.这

大数据- Hive

构建在Hadoop之上的数据仓库,数据计算使用MR,数据存储使用HDFS 因为数据计算使用mapreduce,因此通常用于进行离线数据处理 Hive 定义了一种类 SQL 查询语言--HQL 类似SQL,但不完全相同 可认为是一个HQL-->MR的语言翻译器. 简单,容易上手 有了Hive,还需要自己写MR程序吗? Hive的HQL表达的能力有限 迭代式算法无法表达 有些复杂运算用HQL不易表达 Hive效率较低 Hive自动生成MapReduce作业,通常不够智能: HQL调优困难,粒度较粗

重磅来袭,使用CRL实现大数据分库分表方案

关于分库分表方案详细介绍 http://blog.csdn.net/bluishglc/article/details/7696085 这里就不作详细描述了,本方案拆分结构表示为 会员为业务核心,所有业务围绕会员来进行,所以垂直划分用会员编号作索引,将会员分配到不同的库 会员订单增长量是不固定的,所以需要平水拆分,和分库一样,一个表只存指定会员编号区间的订单 了解基本需求,就可以制作方案了,以下主索引表示主数据编号 库表结构配置 进行操作时,需要知道这个数据放在哪个库,哪个表,因此需要把这个划分

大数据波分传输工程方案设计主要细节

大数据时代已经有好几年了,波分传输被越来越多的人使用,甚至一些骨干网传输都已经离不开波分传输了.用的人多,规范也就很多,因此一些工程上的设计也困扰着越来越多的人,今天我就和大家分享一下,波分传输在做方案的初期需要了解到哪些的工程信息,技术大神看看就好,仅供初学者参考. 1.整个波分系统中传输的数据类型是什么? 这是因为CATV业务和PON业务不能在波分中传输.所以前期首先要了解这个,不然白忙活啦. 2.传输链路是单纤还是双纤? 单双纤决定了波分的型号和波道数. 3.整个传输距离是多少千米?有没有