如何将猪输出存储到蜂巢表?

Posted

技术标签:

【中文标题】如何将猪输出存储到蜂巢表?【英文标题】:How to store pig output to the hive table? 【发布时间】:2017-05-02 06:37:55 【问题描述】:

我在 Azure 上有 HDInsight 集群,在 hdfs(Azure 存储)中有 .csv 文件。

使用 apache-pig 我想处理这些文件并将输出存储在配置单元表中。为此,我编写了以下脚本:

A = LOAD '/test/input/t12007.csv' USING PigStorage(',') AS (year:chararray,ArrTime:chararray,DeptTime:chararray);
describe A;
dump A;
store A into 'testdb.tbl3' using org.apache.hive.hcatalog.pig.HCatStorer();

此脚本成功加载文件,描述结构并使用转储显示数据,但在执行存储命令时会引发以下错误:

2017-05-02 06:18:41,476 [main] ERROR org.apache.pig.PigServer - exception during parsing: Error during parsing. Could not resolve org.apache.hive.hcatalog.pig.HCatStorer using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]
Failed to parse: Pig script failed to parse: <file script.pig, line 4, column 33> pig script failed to validate: org.apache.pig.backend.executionengine.ExecException: ERROR 1070: Could not resolve org.apache.hive.hcatalog.pig.HCatStorer using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.] 
Caused by: <file script.pig, line 4, column 33> pig script failed to validate: org.apache.pig.backend.executionengine.ExecException: ERROR 1070: Could not resolve org.apache.hive.hcatalog.pig.HCatStorer using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.] 
Caused by: org.apache.pig.backend.executionengine.ExecException: ERROR 1070: Could not resolve org.apache.hive.hcatalog.pig.HCatStorer using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.] 
2017-05-02 06:18:41,484 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve org.apache.hive.hcatalog.pig.HCatStorer using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.] 

【问题讨论】:

尝试使用以下命令运行您的脚本: pig -useHCatalog your_scriptname.pig 我正在 ambari 中执行脚本。我在执行脚本时添加了 -useHCatalog 参数。 【参考方案1】:

pig -useHCatalog

来自 Pig HCatalog documentation

使用 HCatalog 运行 Pig

Pig 不会自动拾取HCatalog 罐子。要引入必要的 jar,您可以在 pig 命令中使用标志或设置环境变量 PIG_CLASSPATHPIG_OPTS,如下所述。要引入适当的 jar 以使用 HCatalog,只需在脚本中包含以下标志:

替代方式:

指定HCatalog jar 的位置并将带有jar 路径的REGISTER 语句添加到脚本顶部,如下所示。

REGISTER /usr/username/client/lib/hive-hcatalog-core-1.2.1.2.3.0.0-2557.jar;

您的路径可能因集群中的安装而异。您可以使用命令找到此 jar 位置:locate *hcatalog-core*

HCatStorer

HCatStorer 与 Pig 脚本一起使用,将数据写入HCatalog-managed 表。

用法

HCatStorer 通过 Pig 存储语句访问。

STORE A INTO 'tablename'
   USING org.apache.hive.hcatalog.pig.HCatStorer();

【讨论】:

我正在 ambari 中执行脚本。我添加了 -useHCatalog 作为参数。它仍然给出错误。 您的 Hive 表是否存在?如果没有,您需要先创建表。

以上是关于如何将猪输出存储到蜂巢表?的主要内容,如果未能解决你的问题,请参考以下文章

将猪结果存储到本地文件

无法读取输入文件:使用 DBStorage 将猪存储到 MYSQL

蜂巢地图加入。 Hive 选择更大的表存储在缓存中

蜂巢表不见了

哪个蜂巢表提供更好的性能?

蜂巢中的数据集大小是多少