hadoop - 在 Hive 中高效存储数据

标签 hadoop mapreduce hive lzo

如何在 Hive 中高效地存储数据以及在 Hive 中存储和检索压缩数据? 目前我将它存储为一个文本文件。 我正在浏览 Bejoy article我发现 LZO 压缩对于存储文件很有用,而且它是可拆分的。

我有一个生成一些输出的 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 文件 并开始以 LZO 压缩格式存储数据?或者文本文件在这里也可以吗?从选择查询开始,我将获得一些 GB 的数据,这些数据需要每天根据表格质量上传。

那么哪种方式最好呢?我应该将输出存储为 TextFile 还是 SequenceFile 格式(LZO 压缩),以便在查询 Hive 质量表时,我能更快地获得结果。意味着查询速度更快。

更新:-

如果我存储为带有 block 压缩的 SequenceFile 怎么办?就像下面-

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

除了上述之外,我还需要设置一些其他的东西来启用 BLOCK Compression 吗?而且我正在创建 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

关于hadoop - 在 Hive 中高效存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766421/

相关文章:

java - Hadoop Map Reduce - 将 Iterable<Text> 值写入上下文时,reduce 中的嵌套循环忽略文本结果

hadoop - 插入覆盖到Hive表中保存的记录少于实际记录数

mysql - Hive - 成功导入 Sqoop 后没有表列出

hadoop - 我们可以在查询之前对 Hive 表的列进行排序吗?

hadoop - Apache Spark - Python - 如何在 Pyspark 中使用范围函数

hadoop - Apache hadoop 中节点之间的距离是什么意思?

java - 如何将 .txt 文件转换为 Hadoop 的序列文件格式

C#-运行Hadoop_job-报错(C#)

java - 如何在Hadoop上模拟运行一些服务器?

发生错误时 Hive CLI 选项 -f 不工作