2

我是 Pig 和 Oozie 的新手,所以这可能是一个初学者的问题,但我到处寻找答案,但没有运气......我正在尝试在 Pig 上运行 UDF,UDF 是一个带有 eval 的 JAR方法重载(取自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 -f script.pig.txt)上运行它时,我收到了想要的结果,但是在 Oozie(oozie job -oozie http://localhost:11000/oozie -config job.properties -run)上运行它时,我收到以下错误: 错误 101:本地文件“myudfs.jar”确实不存在。

你会建议我做什么?

提前致谢 :)

4

1 回答 1

1

参见案例 4,此处: 猪食谱

总结一下,你可以选择三种方式:

  1. 将您的 jar 文件放在 Workflow 和 Pig 文件下方名为“lib”的文件夹中
  2. 使用<archive>pig-action 中的标签来指定文件的位置。
  3. 使用<file>pig-action 中的标签来指定文件的位置。

我个人使用<file>标签,但我也尝试过使用 lib 文件夹,它工作正常。

编辑:您可能需要在文件标签中包含符号链接。例如<file>myudfs.jar#myudfs.jar</file>

于 2013-05-13T18:13:07.650 回答