使用DataFu的Apache Pig:无法解析UDF

3
我正在尝试这里的快速入门:http://datafu.incubator.apache.org/docs/datafu/getting-started.html。我已经尝试了几乎所有方法,但我确定问题肯定出在我的某个地方。我已经尝试过以下操作:
  • 导出PIG_HOME、CLASSPATH、PIG_CLASSPATH
  • 使用-cpdatafu-pig-incubating-1.3.0.jar启动pig
  • 本地注册和在hdfs中注册datafu-pig-incubating-1.3.0.jar => 两者都成功(至少没有显示错误)

但仍然无济于事。在pig上尝试:

register datafu-pig-incubating-1.3.0.jar
DEFINE Median datafu.pig.stats.StreamingMedian();
data = load '/user/hduser/numbers.txt' using PigStorage() as (val:int);
data2 = FOREACH (GROUP data ALL) GENERATE Median(data);

或者直接。
data2 = FOREACH (GROUP data ALL) GENERATE datafu.pig.stats.StreamingMedian(data);

我遇到了这个名称解析错误:
2016-06-04 17:22:22,734 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: 无法使用导入解析 datafu.pig.stats.StreamingMedian:[, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]。详细信息请参见日志文件: /home/hadoop/pig_1465053680252.log
当我查看datafu-pig-incubating-1.3.0.jar时,一切都正常。我也尝试了一些Bag函数,但仍然出现相同的错误。 我认为这是一种新手错误,我找不到关于datafu的特定答案,所以感谢您提供帮助。

1
请考虑编辑您的问题标题和正文。尽量简化事情。 - Peyman Mohamadpour
已纠正格式,之前抱歉。 - Christof Kälin
只是确认一下:如果您使用基本的pig函数(如SUM),一切都可以正常工作,但如果您使用任何datafu函数,则什么都不起作用? - Dennis Jaheruddin
虽然成功的可能性不大,但你可以尝试从org.apache.datafu或org.apache.pig.datafu开始。此外,如果在本地模式下运行pig,是否有所帮助?当然,还要看一下所提到的日志文件里面记录了什么信息。 - Dennis Jaheruddin
你尝试过使用绝对路径到你的jar文件吗?另外,检查一下本地的jar文件夹结构(即将其重命名为.zip并解压它),看看是否与你StreamingMedian类的路径匹配。 - Robin Trietsch
1个回答

0

Pig脚本是正确的,唯一可能出错的地方是在注册DataFu时有一些无法满足的类依赖关系。

尝试在本地运行(pig -x local)并查看详细日志。

还要检查Pig的版本-它应该比0.14.0更新。


不,这些都没有帮助,它是pig 0.15.0版本,而日志文件只是重复:无法使用以下导入解析org.apache.datafu.pig.stats.StreamingMedian:[, java.lang.,org.apache.pig.builtin.,org.apache.pig.impl.builtin.]无论我使用什么类路径(我尝试过有或没有org.apache.pig或org.apache),但我不再需要此函数,因为我已经在Hive中解决了它(它似乎也更友好一些)。无论如何,还是感谢关心 :-) - Christof Kälin
好的,我已经验证了,使用pig 0.15版本可以正常工作。只是出于好奇,你能否使用-x local运行并检查日志文件的输出。 - rrydziu
谢谢,日志文件提到了相同的错误(只是带有完整的堆栈跟踪)。但这不是我的pig安装(也不是完整的hortonworks),所以我无法完全看到库路径的设置方式。我很确定如果我重新设置pig,它会起作用。但由于我只需要它来写学期论文,所以我就将其保留为原样 :-) - Christof Kälin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接