configuration - 为 Hive 中的 INSERT OVERWRITE SELECT 指定压缩编解码器

标签 configuration compression hadoop hive

我有一个像这样的 hive 表

  CREATE TABLE beacons
 (
     foo string,
     bar string,
     foonotbar string
 )
 COMMENT "Digest of daily beacons, by day"
 PARTITIONED BY ( day string COMMENt "In YYYY-MM-DD format" );

为了填充,我正在做类似的事情:

 SET hive.exec.compress.output=True;
 SET io.seqfile.compression.type=BLOCK;

 INSERT OVERWRITE TABLE beacons PARTITION ( day = "2011-01-26" ) SELECT
   someFunc(query, "foo") as foo,
   someFunc(query, "bar") as bar,
   otherFunc(query, "foo||bar") as foonotbar
   )
  FROM raw_logs
WHERE day = "2011-01-26";

这将构建一个新分区,其中包含通过 deflate 压缩的各个产品,但这里的理想情况是改为通过 LZO 压缩编解码器。

不幸的是,我不确定如何实现它,但我假设它是众多运行时设置之一,或者可能只是 CREATE TABLE DDL 中的附加行。

最佳答案

在 INSERT OVERWRITE 之前添加以下运行时配置值:

SET hive.exec.compress.output=true; 
SET io.seqfile.compression.type=BLOCK;
SET mapred.output.compression.codec = com.hadoop.compression.lzo.LzopCodec;

同时通过检查确保您拥有所需的压缩编解码器:

io.compression.codecs

关于 io.seqfile.compression.type 的更多信息可以在这里找到 http://wiki.apache.org/hadoop/Hive/CompressedStorage

我可能弄错了,但似乎 BLOCK 类型可以确保较大的文件以较高的比率压缩,而不是较小的压缩率较低的文件集。

关于configuration - 为 Hive 中的 INSERT OVERWRITE SELECT 指定压缩编解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831190/

相关文章:

python - 如何打开和读取内存中的 LZMA 文件

c++ - 如何使用 zlib 解压 gzipstream

hadoop - 在hadoop中合并小文件

java - 如何在 Hadoop Mapreduce 中使用 MultithreadedMapper 类?

intellij-idea - Intellij Idea中每个项目的代码样式

session - 我正在尝试将 PassportJs 与多种类型的用户一起使用(每种用户都有不同的模型)。我究竟做错了什么?

algorithm - 大量单词的压缩和查找

windows - 如何在 Windows 上的 Jenkins 配置中设置 PATH 环境变量?

hibernate - MissingPropertyException:没有此类属性:类的生成器:org.grails.orm.hibernate.cfg.HibernateMappingBuilder

streaming - 如何设置 Hadoop Streaming 作业生成的输出文件的 block 大小?