如何在Hive中有效地存储数据并在Hive中存储和检索压缩数据? 目前我将它作为TextFile存储。 我正在通过Bejoy article,我发现LZO压缩对存储文件非常有用,而且它也是可拆分的。高效地将数据存储在Hive中
我有一个HiveQL Select查询生成一些输出,我将该输出存储在某处,这样我的一个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
的数据?或者文本文件在这里也可以吗?从选择查询中,我将获得一些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压缩除了上面?而且我创建表作为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'
;
感谢alex的建议。所以如果我需要使用BLOCK压缩序列文件,那么我需要设置哪些参数?这些是我需要设置的参数? 'set mapred.output.compress = true set mapred.output.compression.type = BLOCK set mapred.output.compression.codec = org.apache.hadoop.io.compress.LzoCodec'或者其他我需要设置的东西? – ferhan 2012-08-02 17:32:23
是的,我用这些3与hadoop 0.20.2版本,这就够了。 – alexeipab 2012-08-02 19:03:18
感谢您的评论。我试着使用上面的3个命令,它工作正常。所以我的问题在于如果我需要查看以LzoCodec格式压缩的文件,那么我需要做的。当我尝试使用vi文件名时,我在该文件中找到了一些奇怪的字符。所以我需要解压缩该文件,然后我需要查看该文件?如果是,那么我怎样才能解压那个文件?下面是我用'ls'得到的文件名。'/ apps/hdmi-technology/b_apdpds/lip-data-quality/dt = 20120711/attempt_201207311206_10800_r_000000_0' – ferhan 2012-08-02 19:35:47