我是新来的Pig和oozie,所以这可能是一个初学者的问题,但我已经到处寻找答案,没有运气。。。我试图在pig上运行一个udf,这个udf是一个jar,eval方法重载(取自http://wiki.apache.org/pig/udfmanual):
package myudfs;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.util.WrappedIOException;
public class UPPER extends EvalFunc<String>
{
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try {
String str = (String)input.get(0);
return str.toUpperCase();
} catch(Exception e) {
throw e;
}
}
}
而Pig的脚本是:
REGISTER myudfs.jar;
Raw = LOAD '/user/piguser/input' AS (name: chararray, age: int, gpa: int);
x = FOREACH Raw GENERATE myudfs.UPPER(name);
RMF 'output';
STORE x INTO 'output';
在本地(pig-fscript.pig.txt)上运行时,我收到了所需的结果,但在oozie上运行时( oozie job -oozie http://localhost:11000/oozie -config job.properties -run
)我收到以下错误:错误101:本地文件“myudfs.jar”不存在。
你建议我怎么办?
提前感谢:)
1条答案
按热度按时间zwghvu4y1#
参见案例4:Pig食谱
总之,您可以选择三种方式:
将jar文件放在工作流和pig文件下面名为“lib”的文件夹中
使用
<archive>
标记以指定文件的位置。使用
<file>
标记以指定文件的位置。我个人使用
<file>
标签,但我也尝试过使用lib文件夹,效果很好。编辑:您可能需要在文件标记中包含符号链接。例如。
<file>myudfs.jar#myudfs.jar</file>
.