使用jar作为udf运行pig返回错误101

zbdgwd5y  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(379)

我是新来的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”不存在。
你建议我怎么办?
提前感谢:)

zwghvu4y

zwghvu4y1#

参见案例4:Pig食谱
总之,您可以选择三种方式:
将jar文件放在工作流和pig文件下面名为“lib”的文件夹中
使用 <archive> 标记以指定文件的位置。
使用 <file> 标记以指定文件的位置。
我个人使用 <file> 标签,但我也尝试过使用lib文件夹,效果很好。
编辑:您可能需要在文件标记中包含符号链接。例如。 <file>myudfs.jar#myudfs.jar</file> .

相关问题