[关闭]
@zhangyy 2018-04-12T10:47:47.000000Z 字数 5285 阅读 144

hive 的数据压缩处理

hive的部分


  • MapReduce 的数据压缩
  • hive 的数据压缩
  • hive 支持的文件格式
  • hive日志分析,各种压缩的对比
  • hive 的函数HQL 查询

一: mapreduce 的压缩

  1. - mapreduce 压缩 主要是在shuffle阶段的优化。
  2. shuffle 端的
  3. --partition (分区)
  4. -- sort (排序)
  5. -- combine (合并)
  6. -- compress (压缩)
  7. -- group (分组)
  8. mapreduce 优化shuffle 从本质上是解决磁盘的IO 与网络IO 问题。
  9. 减少 集群件的文件传输处理。

二: hive 的压缩:

  1. 压缩的和解压需要cpu的,hive 的常见的压缩格式:
  2. bzip2,gzip,lzo,snappy
  3. cdh 默认采用的压缩是snappy
  4. 压缩比:bzip2 > gzip > lzo bzip2 最节省存储空间。
  5. 注意: sanppy 的并不是压缩比最好的
  6. 解压速度: lzo > gzip > bzip2 lzo 解压速度是最快的。
  7. 注意:追求压缩速率最快的sanppy
  8. 压缩的和解压需要cpu 损耗比较大。
  9. 集群分: cpu 的密集型 (通常是计算型的网络)
  10. hadoop 磁盘 IO 网络IO 的密集型, 网卡的双网卡绑定。

三: hadoop 的检查 是否支持压缩命令

  1. bin/hadoop checknative

3.1 安装使支持压缩:

  1. tar -zxvf 2.5.0-native-snappy.tar.gz -C /home/hadoop/yangyang/hadoop/lib/native

3.2 命令检测:

  1. bin/hadoop checknative

3.3 mapreduce 支持的压缩:

  1. CodeName:
  2. zlib : org.apache.hadoop.io.compress.DefaultCodec
  3. gzip : org.apache.hadoop.io.compress.GzipCodec
  4. gzip2: org.apache.hadoop.io.compress.Bzip2Codec
  5. lzo : org.apache.hadoop.io.compress.LzoCodec
  6. lz4 : org.apache.hadoop.io.compress.Lz4Codec
  7. snappy: org.apache.hadoop.io.compress.SnappyCodec

3.4 mapreduce 执行作业临时支持压缩两种方法:

1.在执行命令时候运行。

  1. -Dmapreduce.map.output.compress=true
  2. -Dmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.DefaultCodec

如:

  1. bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount -Dmapreduce.map.output.compress=true -Dmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.DefaultCodec /input/dept.txt /output1
  2. 可以在bin 的前面加一个time 会在查看运行的时间
  3. 测试job 的任务:
  4. 1. 测运行job 的总时间
  5. 2. 查看压缩的频率,压缩后的文件大小。

2. 更改配置文件:

更改mapred-site.xml 文件

  1. <property>
  2. <name>mapreduce.map.output.compress</name>
  3. <value>true</value>
  4. </property>
  5. <property>
  6. <name>mapreduce.map.output.compress.codec</name>
  7. <value>org.apache.hadoop.io.compress.DefaultCodec</value>
  8. </property>
  9. 更改完成之后重新启动服务就可以

四. hive的支持压缩

4.1 更改临时参数使其生效

  1. hive > set ---> 查看所有参数
  2. hive > set hive.exec.compress.intermediate=true -- 开启中间 压缩
  3. > set mapred.map.output.compression.codec = CodeName
  4. > set hive.exec.compress.output=true
  5. > set mapred.map.output.compression.type = BLOCK/RECORD

在hive-site.xml 中去增加相应参数使其永久生效

4.2:hive 支持的文件类型:

4.2.1 行存储与列式存储区别

  1. 数据库列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因 此整个数据库是自动索引化的。
  2.   按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就 更容易为这种聚集存储设计更好的压缩/解压算法。

image_1ak7j9l59fq1k819ek15eeqq9.png-173kB

4.2.2 hive 支持的文件类型:

  1. 修改hive 的默认文件系列参数:
  2. set hive.default.fileformat=Orc
  3. TextFile:默认的类型,行存储
  4. rcfile:按行块,每块再按列存储
  5. avro:二进制
  6. ORC rcfile:的升级版,默认是zlib,支持snappy 其格式不支持
  7. parquet

4.2.3 ORC格式(hive/shark/spark支持)

image_1ak7jnb7p1ko3128h2u9b0kqulm.png-108.9kB

使用方法:
  1. create table Adress (
  2. name string,
  3. street string,
  4. city string,
  5. state double,
  6. zip int
  7. )stored as orc tblproperties ("orc.compress"="NONE") --->指定压缩算法
  8. row format delimited fields terminated by '\t';

4.2.4 PARQUET格式(twitter+cloudera开源,Hive、Spark、drill,Impala、

Pig等支持)
image_1ak7k27pbsvu1lmo1hp6tus9e013.png-124.4kB

使用方法:
  1. create table Adress (
  2. name string,
  3. street string,
  4. city string,
  5. state double,
  6. zip int
  7. )stored as parquet ---> 指定文本类型
  8. row format delimited fields terminated by '\t';

五:hive日志分析,各种压缩的对比

5.1 在hive 上面创建表结构:

5.1.1 textfile 类型:

  1. create table page_views_textfile(
  2. track_time string,
  3. url string,
  4. session_id string,
  5. refere string,
  6. ip string,
  7. end_user_id string,
  8. city_id string
  9. )
  10. row format delimited fields terminated by '\t'
  11. STORED AS textfile ; ---> 指定表的文件类型

image_1ak7u3id314bq57q11rhp60dhh9.png-17.9kB

加载数据到表中

  1. load data local inpath '/home/hadoop/page_views.data' into table page_views_textfile ;

image_1ak7u5tbjqql1mfv1ic61ffquqam.png-12.5kB


5.1.2 orc 类型:

  1. create table page_views_orc(
  2. track_time string,
  3. url string,
  4. session_id string,
  5. refere string,
  6. ip string,
  7. end_user_id string,
  8. city_id string
  9. )
  10. row format delimited fields terminated by '\t'
  11. STORED AS orc ;

image_1ak7ulou44mhq501efc1jktboa13.png-17.5kB

插入数据:

  1. insert into table page_views_orc select * from page_views_textfile ;

image_1ak7urdk31sf97971edt1it81qtm1g.png-54.7kB

5.1.3 parquet 类型

  1. create table page_views_parquet(
  2. track_time string,
  3. url string,
  4. session_id string,
  5. refere string,
  6. ip string,
  7. end_user_id string,
  8. city_id string
  9. )
  10. row format delimited fields terminated by '\t'
  11. STORED AS parquet ;

image_1ak7uu3rmgd5umk5sleh1t2a1t.png-17.1kB

插入数据:
  1. insert into table page_views_parquet select * from page_views_textfile ;

image_1ak7uuuuh1e31iktc1g1q971pg22a.png-62.1kB

六:比较:

6.1 文件大小统计

  1. hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_textfile ;
  2. hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_orc ;
  3. hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_parquet ;

image_1ak7vb3havvabfa1mdsien1g282n.png-21.2kB

从上面可以看出orc 上生成的表最小。

6.2 查找时间测试比较:

  1. hive (yangyang)> select count(session_id) from page_views_textfile ;
  2. hive (yangyang)> select count(session_id) from page_views_orc;
  3. hive (yangyang)> select count(session_id) from page_views_parquet;

6.3 textfile 文件类型:

image_1ak800moc1ov711mhkk11nk44eo3u.png-7.2kB
image_1ak801ugb1n2v1mhk3f1qshems4b.png-6.8kB

6.4 orc 文件类型:

image_1ak8056dcd8o1ei83vp9hupo84o.png-22.9kB
image_1ak807ni71fi3dpm1ccb18an155755.png-6.7kB

6.5 parquet 类型:

image_1ak8091ilmeqing1qunurc5to5i.png-15.9kB
image_1ak80a3441aj99hih2u7n6fd25v.png-6.6kB


七 hive 创建表与指定压缩:

7.1 orc+snappy 格式:

  1. create table page_views_orc_snappy(
  2. track_time string,
  3. url string,
  4. session_id string,
  5. refere string,
  6. ip string,
  7. end_user_id string,
  8. city_id string
  9. )
  10. row format delimited fields terminated by '\t'
  11. STORED AS orc TBLPROPERTIES("orc.compression"="Snappy");

image_1ak81oqnp1sd01nq01tj6htdnh06c.png-21kB

  1. 插入数据:
  2. insert into table page_views_orc_snappy select * from page_views_textfile ;

image_1ak81sl3k1pa16un267186g1uu96p.png-34.8kB

7.2 parquet+snappy 格式:

  1. set parquet.compression=Snappy ;
  2. set hive.exec.compress.output=true ;
  3. create table page_views_parquet_snappy(
  4. track_time string,
  5. url string,
  6. session_id string,
  7. refere string,
  8. ip string,
  9. end_user_id string,
  10. city_id string
  11. )
  12. row format delimited fields terminated by '\t'
  13. STORED AS parquet ;

image_1ak826m0hu73195t97i4qrj680.png-24kB

  1. 插入数据:
  2. insert into table page_views_parquet_snappy select * from page_views_textfile ;

image_1ak8277pv12vi16unbag10q01sfm8d.png-62.9kB

7.3 对比测试:

7.3.1 文件大小对比:

  1. hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_orc_snappy ;
  2. hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_parquent_snappy ;

image_1ak82jdklbniq9bhei129b1hde8q.png-15.4kB

7.3.2 查询对比:

  1. hive (yangyang)> select count(session_id) from page_views_orc_snappy;
  2. hive (yangyang)> select count(session_id) from page_views_parquet_snappy;

image_1ak832dfdg2v1vvm15umjmd4us97.png-58.7kB

image_1ak833gls106i1hjg1sg1ljn1ud39k.png-58.7kB

八 :hive 的函数HQL 查询

8.1 case --when--then-else

  1. hive(yangyang)>select ename,
  2. case
  3. when comm is null then 0
  4. else comm end as comm_new
  5. from emp;

image_1ak84363715obb1mcpgam91b71a1.png-30kB
image_1ak843shh95o92s1kd1qcsglkae.png-18.8kB

8.1.2 unix_timestamp() 函数:

  1. desc function extended unix_timestamp;

image_1ak84pdnavk9ksth5k1l2o19p3ar.png-13.7kB

查找时间

  1. select track_time from page_views_textfile limit 2 ;

image_1ak8527s61k7n136aelnqqu1pkab8.png-37.4kB

转换时间:

  1. select unix_timestamp(track_time) from page_views_textfile limit 2 ;

image_1ak856ifd1v81i5b11s28281d1nc2.png-42.3kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注