0

刚开始使用 HDInsight。

我想在 pig grunt 模式下注册一个 UDF,但要么那不起作用,要么我不知道将 jar 文件放在哪里以便 pig 加载它。

现在我所做的是将 jar 文件放入 lib 文件夹(C:\apps\dist\pig-0.9.3-SNAPSHOT\lib)和 pig 根文件夹(C:\apps\dist\pig-0.9 .3-SNAPSHOT),对我来说没有任何用处,只要继续得到这个:

REGISTER elephant-bird-pig-3.0.0.jar;

响应是:

2013-10-27 09:28:53,466 [main] 错误 org.apache.pig.tools.grunt.Grunt - 错误 101:本地文件 'elephant-bird-pig-3.0.0.jar' 不存在。日志文件中的详细信息:C:\apps\dist\hadoop-1.1.0-SNAPSHOT\logs\pig_1382864851131.log

请让我知道我应该在哪里以及如何注册此 UDF。

谢谢

4

1 回答 1

1

您不应该将它们长时间放在 BIN 文件夹中,因为如果节点被重新映像,您可能会丢失文件。最好将它们放入 Windows Azure 存储中。

  1. 将 UDF 的额外 .jar 复制到 Windows Azure 存储 Blob...WASB。

    • 例如,您可以创建一个“PigExtras”文件夹。您的源位置会有所不同,而您的目标位置将是您的容器和帐户。

    • 通过hadoop命令行上传:

    hadoop fs -copyFromLocal C:\files\MyUDF.jar wasb://container@account.blob.core.windows.net/PigExtras/MyUDF.jar

    hadoop fs -copyFromLocal c:\apps\dist\pig-0.11.0.1.3.1.0-06\piggybank.jar wasb://container@account.blob.core.windows.net/PigExtras/piggybank.jar

  2. 引用 Pig 拉丁脚本中的 .jar 位置。我相信通配符可用于从某个文件夹加载所有 jar,但如果那里有很多,这可能效率低下。

    REGISTER wasb:///PigExtras/*.jar; myset = load 'wasb://container@account.blob.core.windows.net/data/file.txt' using MyUDF(); dump myset

于 2013-12-05T02:11:04.277 回答