HDP2.0 中的 Hive 列式加载器

Posted

技术标签:

【中文标题】HDP2.0 中的 Hive 列式加载器【英文标题】:Hive Columnar Loader in HDP2.0 【发布时间】:2013-10-31 13:03:58 【问题描述】:

我正在使用 HDP 2.0 并运行一个简单的 Pig 脚本。

我已经注册了下面的 jar,然后我正在执行下面的代码(更新了架构)-

 register /usr/lib/pig/piggybank.jar;
       register /usr/lib/hive/lib/hive-common-0.11.0.2.0.5.0-67.jar;
       register /usr/lib/hive/lib/hive-exec-0.11.0.2.0.5.0-67.jar;

       A = LOAD '/apps/hive/warehouse/test.db/hivetables' USING        
       org.apache.pig.piggybank.storage.HiveColumnarLoader('id int, name string,age   
       int,create_dt string,timestamp string,accno int');

       F = FILTER A BY (id == 85986249 );

       STORE F INTO '/user/test/Pigout' USING PigStorage();

问题是,虽然 F 的值在 Hive 表中可用,但结果总是将 0 条记录写入输出。但它能够将所有记录加载到A中。

基本上过滤器功能不起作用。我的 Hive 表没有分区。我相信问题可能出在 HiveColumarLoade 但无法弄清楚它是什么。

如果您知道解决方案,请告诉我。我为此苦苦挣扎。

非常感谢您的帮助!!!

【问题讨论】:

您正在加载的表的完整架构是什么?请张贴。 嗨,我也发布了架构。谢谢! 【参考方案1】:

基于pig 0.12 documentation HiveColumnarLoader 似乎需要中间关系才能过滤非分区值。鉴于 id 不是似乎是您的问题的分区。

试试这个:

A = LOAD '/apps/hive/warehouse/test.db/hivetables' USING        
       org.apache.pig.piggybank.storage.HiveColumnarLoader('id int, name string,age   
       int,create_dt string,timestamp string,accno int');

B = FOREACH GENERATE A.id, A.name, A.age, A.create_dt, A.timestamp, A.accno;

F = FILTER A BY (id == 85986249 );

       STORE F INTO '/user/test/Pigout' USING PigStorage();

文档似乎都说,要处理实际值,您需要中间关系 B。

【讨论】:

以上是关于HDP2.0 中的 Hive 列式加载器的主要内容,如果未能解决你的问题,请参考以下文章

HBase Hive

[Hive]-列式存储篇

Hive 的 ORCParquet 等列式存储的优点

Hive 的 ORCParquet 等列式存储的优点

hive中的文件格式的简介

hive储存与压缩