Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在配置单元中高效地存储数据_Hadoop_Mapreduce_Hive_Lzo - Fatal编程技术网

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

Hadoop 在配置单元中高效地存储数据,hadoop,mapreduce,hive,lzo,Hadoop,Mapreduce,Hive,Lzo,如何在配置单元中高效地存储数据,以及如何在配置单元中存储和检索压缩数据? 目前我将其存储为文本文件。 我正在研究,我发现LZO压缩将有利于存储文件,而且它是可拆分的 我有一个HiveQL Select查询,它正在生成一些输出,并将该输出存储在某个位置,以便我的一个配置单元表(质量)可以使用该数据,以便我可以查询该质量表 下面是quality表,我通过使用分区覆盖表quality从下面的SELECT查询加载数据 create table quality (id bigint, total bi

如何在配置单元中高效地存储数据,以及如何在配置单元中存储和检索压缩数据? 目前我将其存储为文本文件。 我正在研究,我发现LZO压缩将有利于存储文件,而且它是可拆分的

我有一个HiveQL Select查询,它正在生成一些输出,并将该输出存储在某个位置,以便我的一个配置单元表(质量)可以使用该数据,以便我可以查询该
质量

下面是
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表,可以吗?就像我在问题中更新的一样。你能看一下让我知道这是否正确吗?