第3节 hive高级用法:16、hive当中常用的几种数据存储格式对比;17、存储方式与压缩格式相结合;18、总结

hive当中的数据存储格式:
行式存储:textFile sequenceFile 都是行式存储
列式存储:orc parquet 可以使我们的数据压缩的更小,压缩的更快

数据查询的时候尽量不要用select * 只选取我们需要的字段即可

hive的数据存储格式:用的比较多的一种行式存储 : textfile
用的比较多的列式存储: orc parquet
其中orc底层有自带的一种压缩算法,会对数据进行压缩的比较厉害

实际工作当中,很多时候,列式存储的数据格式都是选择orc或者parquet 压缩方式都是选择snappy。

课程总结:
1、数据仓库的基本概念:
数据仓库一般分为三层架构 理解
源数据层:贴源层 ODS层
数据仓库层: dw层 主要用于我们的各种数据分析统计
数据应用层:APP层 application 应用层,主要用于我们数据的报表展示等

2、hive的基本概念:理解 数据仓库的工具 ,既不会生产数据,也不会消费数据,数据从外部来,提供开放给外部用
数据存储:用的是hdfs
数据的计算:MapReduce 所以一定要启动hadoop集群

hive的安装:使用mysql作为元数据存储 搞定

3、hive的基本操作:建库语法 搞定
建表语法: 搞定
内部表:管理表 删表的时候会删除hdfs的数据
外部表: external 关键字创建外部表,删表的时候不会删除hdfs的数据
分区表:分文件夹 partitioned by
分桶表:分文件 clustered by into xx buckets
修改表 删除表 了解

hive当中数据的加载:
第一种加载数据的方式:load data local
第二种加载数据的方式: insert overwritae table xx select xxx

4、hive的查询语法:group by 语法要注意
select xxx from group by xxx,abc

5、hive的shell参数 了解
1、hive-site.xml 全局的配置
2、进入hive客户端之前的一些配置 -hiveconfi
3、进入hive客户端以后的一些配置 set xxx=xxx

6、hive的函数以及udf函数
尝试看看能不能自定义udf函数,解析json格式的数据
自定义函数的流程 最少要知道继承那个类 UDF 重写哪个方法 evaluate

7、hive的数据压缩: 搞定
map输出的数据进行压缩
reduce输出的数据进行压缩
常用的压缩方式:snappy

8、hive的数据存储格式:
行式存储:TextFile,SequenceFile
列式存储:ORC ,parquet

9、hive的压缩与存储相结合: 搞定
最常用的列式存储:ORC parquet,压缩方式 snappy

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

7.5 主流文件存储格式对比实验

从存储文件的压缩比和查询速度两个角度对比。

存储文件的压缩比测试:

0)测试数据 参见log.data

1)TextFile

(1)创建表,存储数据格式为TEXTFILE

create table log_text (

track_time string,

url string,

session_id string,

referer string,

ip string,

end_user_id string,

city_id string

)

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS TEXTFILE ;

(2)向表中加载数据

load data local inpath '/export/servers/hivedatas/log.data' into table log_text ;

(3)查看表中数据大小

dfs -du -h /user/hive/warehouse/myhive.db/log_text;

18.1 M  /user/hive/warehouse/log_text/log.data

2)ORC

(1)创建表,存储数据格式为ORC

create table log_orc(

track_time string,

url string,

session_id string,

referer string,

ip string,

end_user_id string,

city_id string

)

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS orc ;

(2)向表中加载数据

insert into table log_orc select * from log_text ;

(3)查看表中数据大小

dfs -du -h /user/hive/warehouse/myhive.db/log_orc;

2.8 M  /user/hive/warehouse/log_orc/123456_0

3)Parquet

(1)创建表,存储数据格式为parquet

create table log_parquet(

track_time string,

url string,

session_id string,

referer string,

ip string,

end_user_id string,

city_id string

)

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS PARQUET ;

(2)向表中加载数据

insert into table log_parquet select * from log_text ;

(3)查看表中数据大小

dfs -du -h /user/hive/warehouse/myhive.db/log_parquet;

13.1 M  /user/hive/warehouse/log_parquet/123456_0

存储文件的压缩比总结:

ORC >  Parquet >  textFile

存储文件的查询速度测试:

1)TextFile

hive (default)> select count(*) from log_text;

_c0

100000

Time taken: 21.54 seconds, Fetched: 1 row(s)

2)ORC

hive (default)> select count(*) from log_orc;

_c0

100000

Time taken: 20.867 seconds, Fetched: 1 row(s)

3)Parquet

hive (default)> select count(*) from log_parquet;

_c0

100000

Time taken: 22.922 seconds, Fetched: 1 row(s)

存储文件的查询速度总结:

ORC > TextFile > Parquet

八、存储和压缩结合

官网:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC

ORC存储方式的压缩:

Key

Default

Notes

orc.compress

ZLIB

high level compression (one of NONE, ZLIB, SNAPPY)

orc.compress.size

262,144

number of bytes in each compression chunk

orc.stripe.size

67,108,864

number of bytes in each stripe

orc.row.index.stride

10,000

number of rows between index entries (must be >= 1000)

orc.create.index

true

whether to create row indexes

orc.bloom.filter.columns

""

comma separated list of column names for which bloom filter should be created

orc.bloom.filter.fpp

0.05

false positive probability for bloom filter (must >0.0 and <1.0)

1)创建一个非压缩的的ORC存储方式

(1)建表语句

create table log_orc_none(

track_time string,

url string,

session_id string,

referer string,

ip string,

end_user_id string,

city_id string

)

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS orc tblproperties ("orc.compress"="NONE");

(2)插入数据

insert into table log_orc_none select * from log_text;

(3)查看插入后数据

dfs -du -h /user/hive/warehouse/myhive.db/log_orc_none;

7.7 M  /user/hive/warehouse/log_orc_none/123456_0

2)创建一个SNAPPY压缩的ORC存储方式

(1)建表语句

create table log_orc_snappy(

track_time string,

url string,

session_id string,

referer string,

ip string,

end_user_id string,

city_id string

)

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS orc tblproperties ("orc.compress"="SNAPPY");

(2)插入数据

insert into table log_orc_snappy select * from log_text;

(3)查看插入后数据

dfs -du -h /user/hive/warehouse/myhive.db/log_orc_snappy;

3.8 M  /user/hive/warehouse/log_orc_snappy/123456_0

3)上一节中默认创建的ORC存储方式,导入数据后的大小为

2.8 M  /user/hive/warehouse/log_orc/123456_0

比Snappy压缩的还小。原因是orc存储文件默认采用ZLIB压缩。比snappy压缩的小。

4)存储方式和压缩总结:

在实际的项目开发当中,hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy。

04-28 05:09