Hadoop 在配置单元中高效地存储数据
如何在配置单元中高效地存储数据,以及如何在配置单元中存储和检索压缩数据? 目前我将其存储为文本文件。 我正在研究,我发现LZO压缩将有利于存储文件,而且它是可拆分的 我有一个HiveQL Select查询,它正在生成一些输出,并将该输出存储在某个位置,以便我的一个配置单元表(质量)可以使用该数据,以便我可以查询该Hadoop 在配置单元中高效地存储数据,hadoop,mapreduce,hive,lzo,Hadoop,Mapreduce,Hive,Lzo,如何在配置单元中高效地存储数据,以及如何在配置单元中存储和检索压缩数据? 目前我将其存储为文本文件。 我正在研究,我发现LZO压缩将有利于存储文件,而且它是可拆分的 我有一个HiveQL Select查询,它正在生成一些输出,并将该输出存储在某个位置,以便我的一个配置单元表(质量)可以使用该数据,以便我可以查询该质量表 下面是quality表,我通过使用分区覆盖表quality从下面的SELECT查询加载数据 create table quality (id bigint, total bi
质量
表
下面是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;
因此,目前我将其存储为文本文件
,是否应将其作为序列文件
,并开始以LZO压缩格式
存储数据?或者文本文件在这里也可以吗?从select查询中,我将获得一些GB的数据,这些数据需要每天上传到TableQuality上
那么哪条路最好呢?我是否应该将输出存储为文本文件或SequenceFile格式(LZO压缩),以便在查询配置单元质量表时更快地得到结果。这意味着查询速度更快
更新:-
如果我使用块压缩存储为SequenceFile,该怎么办?如下-
set mapred.output.compress=true;
set mapred.output.compression.type=BLOCK;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.LzoCodec;
除了上面提到的,我还需要设置一些其他的东西来启用块压缩?我还将创建一个表作为SequenceFile格式
再次更新
我应该创建如下表?或者需要进行一些其他更改以启用序列文件的块压缩
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和结构化数据的经验,我从SequenceFile和块压缩中获得了最佳性能。默认情况下是行压缩,但当存储结构化数据且行不是特别大时,其效率不如块压缩。
为了打开它,我使用了mapred.output.compression.type=BLOCK谢谢alex的建议。因此,如果我需要使用块压缩序列文件,那么我需要设置哪些参数?这些是我需要设置的参数
set-mapred.output.compress=true-set-mapred.output.compression.type=BLOCK-set-mapred.output.compression.codec=org.apache.hadoop.io.compress.LzoCodec
或者其他我需要设置的东西?是的,我在hadoop 0.20.2版本中使用了这3个选项,就足够了。谢谢您的评论。我试着使用上述3个命令,效果很好。所以我这里的问题是,如果我需要查看以LzoCodec格式压缩的文件,那么我需要做什么。当我尝试使用vi文件名时,我在该文件中发现了一些奇怪的字符。所以我需要以某种方式解压该文件,然后我需要查看该文件?如果是,那么如何解压缩该文件?下面是我使用ls
得到的文件名/apps/hdmi technology/b_apdpds/lip data quality/dt=20120711/trunt_201207311206_10800_r_000000_0
有两个选项:1)如果您的记录实际上是字符串,那么您可以使用“hadoop fs-text/hadoop_file_path>output_file.txt”2)SequenceFile可以从任何Java程序访问,只需将hadoop-*.jar放入类路径中,不要忘记本机库,查看使用示例,查看源代码或感谢alex的建议。这很有帮助。我还有一个问题。所以在我的例子中,我应该创建一个SequenceFile表,可以吗?就像我在问题中更新的一样。你能看一下让我知道这是否正确吗?