Pig 未将数据加载到 HCatalog 表中 - HortonWorks Sandbox [关闭]

Posted

技术标签:

【中文标题】Pig 未将数据加载到 HCatalog 表中 - HortonWorks Sandbox [关闭]【英文标题】:Pig not loading data into HCatalog table - HortonWorks Sandbox [closed] 【发布时间】:2014-03-25 07:11:52 【问题描述】:

我正在 HortonWorks 虚拟机中运行 Pig 脚本,目的是提取我的 XML 数据集的某些部分,并将这些部分加载到 HCatalog 表的列中。在我的本地机器上,我在 XML 文件上运行我的 Pig 脚本,并获得一个包含所有提取部分的输出文件。但是,由于某种原因,当我在 HortonWorks VM 中运行相同的脚本时,脚本似乎运行成功,但 HCatalog 表仍然为空。

这是我的本地脚本:

 REGISTER piggybank.jar

items = LOAD 'data1.xml' USING org.apache.pig.piggybank.storage.XMLLoader('row') AS  (row:chararray);

data = FOREACH items GENERATE 
REGEX_EXTRACT(row, 'Id="([^"]*)"', 1) AS  id:int,
REGEX_EXTRACT(row, 'CreationDate="([^"]*)"', 1) AS  creationdate:chararray,
REGEX_EXTRACT(row, 'Score="([^"]*)"', 1) AS  score:int,
REGEX_EXTRACT(row, 'Title="([^"]*)"', 1) AS  title:chararray;


STORE data INTO '/tmp/postsETLResults' USING PigStorage();

我在 HortonWorks 中使用的那个:

REGISTER piggybank.jar

items = LOAD 'data1.xml' USING org.apache.pig.piggybank.storage.XMLLoader('row') AS  (row:chararray);

data = FOREACH items GENERATE 
REGEX_EXTRACT(row, 'Id="([^"]*)"', 1) AS  id:int,
REGEX_EXTRACT(row, 'CreationDate="([^"]*)"', 1) AS  creationdate:chararray,
REGEX_EXTRACT(row, 'Score="([^"]*)"', 1) AS  score:int,
REGEX_EXTRACT(row, 'Title="([^"]*)"', 1) AS  title:chararray;


STORE data into 'posts_table_1' USING org.apache.hcatalog.pig.HCatStorer();


validate = LOAD 'default.posts_table_1' USING org.apache.hcatalog.pig.HCatLoader();

示例 XML 行(来自 *** 公共数据集):

<row Id="149115" PostTypeId="2" ParentId="149078" CreationDate="2008-09-29T15:16:23.870" Score="1" Body="&lt;p&gt;I'm sure you can also have Oracle display a query plan so you can see exactly which index is used first.&lt;/p&gt;&#xA;" OwnerDisplayName="user16324" LastActivityDate="2008-09-29T15:16:23.870" CommentCount="1" />

我手动创建了 HCatalog 表,所有正确的字段都存在并且类型正确。

奇怪的是,如果我在 Pig 中执行 dump data,我没有得到任何输出。如果我illustrate data 在日志中看到我的数据片段,然后是大的空白区域,然后是更多数据,等等。

我在这里缺少什么?我真的很想拿这个凌乱的 XML 文件并在 HCatalog 中获得一个整洁的表格。同样,在我的机器上运行本地脚本时,我得到了我正在寻找的结果,但是当我运行设计用于将输出存储到 posts_table_1 HCatalog 表中的第二个版本时,我收到一条成功消息但一个空表。

或者,如果我可以在本地机器上以逗号分隔文件的形式获取输出,我可以使用该文件并让 HCatalog 自动在 Hue 界面中加载数据。截至目前,输出是用空格分隔的,这在 Hue 中是有问题的,因为帖子的标题包含空格。

提前致谢!这让我很难过。

【问题讨论】:

【参考方案1】:

我发现了问题。我手动创建了 HCatalog 表并使用了所有默认选项,包括设置为 ^A (/100) 的分隔符。我的输出有由 Tab 空格分隔的列 (\t),因此当表接收到数据时,它没有找到 ^A 分隔符并存储了一个空数据集。我重新创建了表格以查找\t,一切正常。

【讨论】:

以上是关于Pig 未将数据加载到 HCatalog 表中 - HortonWorks Sandbox [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pig 中的 HCatalog 可以只加载特定分区吗?

使用 PIG 加载 Hive 表的问题

在 Pig 中使用 Hcatalog 加载配置单元表时出错

转储数据集时将数据从 Hive 加载到 Pig 错误

从 Pig 保存到 Hive 表的问题

如何加载分区到 Hbase 表的 hive orc