设为首页 加入收藏

TOP

hive压缩&&hdfs合并小文件
2019-02-08 12:21:55 】 浏览:118
Tags:hive 压缩 &&hdfs 合并 文件
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32297447/article/details/85763718

hdfs合并小文件

hadoop fs -getmerge hdfs文件夹路径 合并本地的文件名

如果hdfs误删除文件或者hive误删除文件

/user/hadoop/.Trash/Current 这个地址下有文件备份,文件备份保留七天(core配置文件可以设置)


hive压缩

压缩的好处:

(执行查询时会自动解压)
可以节约磁盘的空间,基于文本的压缩率可达40%+;
压缩可以增加吞吐量和性能量(减小载入内存的数据量),但是在压缩和解压过程中会增加CPU的开销。所以针对IO密集型的jobs(非计算密集型)可以使用压缩的方式提高性能。

压缩使用场景

  • Compressing input files 输入文件压缩
  • Compressing output files 输出文件压缩
  • Compressing map outoput files 中间输出文件压缩

###压缩注意事项

  • Storage
  • Disk I/O
  • Network bandwidth
  • CPU time

### hive文件格式

  • TEXTFILE: 默认格式,数据不做压缩,磁盘开销大。如需压缩,可使用Gzip,Bzip2压缩算法,但是不会对数据进行切分;导入数据时会直接把数据文件拷贝到hdfs上不进行处理;
  • SEQUENCEFILE: 二进制文件,具有使用方便、可分割、可压缩
  • SequenceFile支持三种压缩选择:NONE,RECORD(压缩率低),BLOCK(常用且压缩性能最好);

    > RCFILE: RCFILE是一种行列存储相结合的存储方式;
  • ORCFILE: 0.11以后出现

注意:SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile表中

hive配置压缩

建表时申明文件的存储格式,默认为TEXTFILE。如使用压缩常使用分块压缩STORED AS SEQUENCEFILE
数据处理的中间过程和结果使用Snappy算法进行压缩。

  • – 任务中间压缩
    set hive.exec.compress.intermediate=true;
    set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
    set hive.intermediate.compression.type=BLOCK;
  • – map/reduce 输出压缩
    set hive.exec.compress.output=true;
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
    set mapred.output.compression.type=BLOCK;

实施案例:

现有一表log_db.commodlog共有3362555条数据共1.01GB

创建一个textfile的表

create table if not exists com(
unionId string,
brand string,
create_time string)
row format delimited fields terminated by '\t'
lines terminated by '\n'
stored as textfile;

设置操作:
set hive.exec.compress.output=true;  
set mapred.output.compress=true;  
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  

导入数据
insert overwrite table fol_db.com select unionId,brand,create_time from log_db.commodlog;

结果:
select count(1) from fol_db.com;

共有3362555条数据共59.74MB

创建一个SEQUENCEFILE的表

create table if not exists seqcom(
unionId string,
brand string,
create_time string)
row format delimited fields terminated by '\t'
lines terminated by '\n'
stored as SEQUENCEFILE;

设置操作:
set hive.exec.compress.output=true;  
set mapred.output.compress=true;  
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;  
set mapred.output.compression.type=BLOCK;

导入数据
insert overwrite table fol_db.seqcom select * from fol_db.com;

结果:
select count(1) from fol_db.seqcom;

共有3365370条数据共65.17MB

创建一个RCFILE的表

create table if not exists rccom(
unionId string,
brand string,
create_time string)
row format delimited fields terminated by '\t'
lines terminated by '\n'
stored as rcfile;

设置操作:
set hive.exec.compress.output=true;  
set mapred.output.compress=true;  
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;  
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec; 

导入数据
insert overwrite table fol_db.rccom select * from fol_db.com;

结果:
select count(1) from fol_db.rccom ;

共有3365370条数据共45.63MB

总结:

相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。

对比:

rc格式耗时4.126
select brand,count(brand) brandCount  from  fol_db.rccom where create_time like '2019-01-02%' group by brand SORT BY brand ASC;
SEQUENCEFILE格式耗时8.132
select brand,count(brand) brandCount  from  fol_db.seqcom where create_time like '2019-01-02%' group by brand SORT BY brand ASC;
textfile格式耗时8.132
select brand,count(brand) brandCount  from  fol_db.com where create_time like '2019-01-02%' group by brand SORT BY brand ASC;9.75
原数据格式耗时80.302
select brand,count(brand) brandCount  from  log_db.commodlog where create_time like '2019-01-02%' group by brand SORT BY brand ASC;

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HDFS的安全模式关闭 下一篇hdfs对文件的读取的内部流程及原理

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }