Pig没有将数据加载到HCatalog表中 - HortonWorks Sandbox

时间:2014-03-25 07:11:53

标签: xml apache-pig hcatalog

我在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行(来自StackOverflow公共数据集):

<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 个答案:

答案 0 :(得分:0)

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