高效地将数据存储在配置单元中



如何在配置单元中高效存储数据,并在配置单元存储和检索压缩数据?目前,我将其存储为TextFile。我正在阅读Bejoy的文章,我发现LZO压缩将有利于存储文件,而且它是可拆分的。

我有一个HiveQLSelect查询,它正在生成一些输出,我将输出存储在某个地方,这样我的一个Hive表(质量)就可以使用该数据,这样我就可以查询quality表。

下面是quality表,我在其中通过使用于覆盖表quality的分区从下面的SELECT查询加载数据。

create table quality
(id bigint,
  total bigint,
  error bigint
 )
partitioned by (ds string)
row format delimited fields terminated by 't'
stored as textfile
location '/user/uname/quality'
;
insert overwrite table quality partition (ds='20120709')
SELECT id  , count2 , coalesce(error, cast(0 AS BIGINT)) AS count1  FROM Table1;

因此,目前我将其存储为TextFile,我是否应该将其作为Sequence file并开始将数据存储在LZO compression format中?或者文本文件在这里也可以?从select查询中,我将获得一些GB的数据,这些数据需要每天以表质量上传。

那么哪种方式最好呢?我应该将输出存储为TextFile或SequenceFile格式(LZO压缩),这样当我查询Hive质量表时,我会更快地得到结果。意味着查询速度更快。

更新:-

如果我存储为具有块压缩的SequenceFile会怎样?如下图所示-

set mapred.output.compress=true;
set mapred.output.compression.type=BLOCK;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.LzoCodec;

我需要设置一些其他的东西来启用BLOCK压缩,除了上面吗?此外,我正在将Table创建为SequenceFile格式的

再次更新

我应该创建下面这样的表吗?或者需要进行一些其他更改以启用序列文件的BLOCK压缩?

create table lipy
( buyer_id bigint,
  total_chkout bigint,
  total_errpds bigint
 )
 partitioned by (dt string)
row format delimited fields terminated by 't'
stored as sequencefile
location '/apps/hdmi-technology/lipy'
;

我很少使用Hive,但根据Hadoop和结构化数据的经验,我从使用BLOCK压缩的SequenceFiles中获得了最佳性能。默认情况下是行压缩,但当存储结构化数据且行不是特别大时,它不如BLOCK压缩有效。为了打开它,我使用了mapred.output.compression.type=BLOCK

相关内容

  • 没有找到相关文章

最新更新