我已使用Amazon EMR设置了群集。 我在S3上有一个python库(从github克隆,在pip上不可用)。
我想提交一个使用udf的猪工作,该工作使用S3中的库。
我不想将库添加到系统路径,因为它只会使用一次。
我无法尝试任何有意义的事情,因为我对如何处理此问题感到茫然,因此我没有任何代码示例或方法到目前为止我已经尝试过。帮助将深表感谢! :)
答案 0 :(得分:0)
仔细阅读以下给定材料。
从Pig调用用户定义的函数:
Pig提供了从Pig脚本中调用用户定义函数(UDF)的功能。您可以这样做以实现在Pig脚本中使用的自定义处理。目前支持的语言是Java,Python / Jython和JavaScript。 (虽然JavaScript支持仍然是实验性的。)
以下部分介绍如何使用Pig注册函数,以便可以从Pig shell或Pig脚本中调用它们。有关在Pig中使用UDF的更多信息,请转到http://pig.apache.org/docs/r0.14.0/udf.html。
从Pig调用JAR文件:
您可以使用Pig脚本中的REGISTER命令将自定义JAR文件与Pig一起使用。 JAR文件是本地或远程文件系统,如Amazon S3。当Pig脚本运行时,Amazon EMR会自动将JAR文件下载到主节点,然后将JAR文件上载到Hadoop分布式缓存。通过这种方式,群集中的所有实例都会根据需要自动使用JAR文件。
使用带猪的JAR文件
1.将您的自定义JAR文件上传到Amazon S3。
2.在Pig脚本中使用REGISTER命令在Amazon S3上指定自定义JAR文件的存储桶。
REGISTER s3://mybucket/path/mycustomjar.jar;
从Pig调用Python / Jython脚本
您可以使用Pig注册Python脚本,然后从Pig shell或Pig脚本中调用这些脚本中的函数。您可以通过使用register关键字指定脚本的位置来完成此操作。
因为Pig是用Java编写的,所以它使用Jython脚本引擎来解析Python脚本。有关Jython的更多信息,请转到http://www.jython.org/。
从Pig调用Python / Jython脚本
1.编写Python脚本并将脚本上传到Amazon S3中的某个位置。这应该是由创建Pig群集的同一帐户拥有的存储桶,或者具有权限集的存储桶,以便创建群集的帐户可以访问它。在此示例中,脚本将上载到
s3://mybucket/pig/python.
2.启动猪群。如果您将从Grunt shell访问Pig,请运行交互式集群。如果您正在从脚本运行Pig命令,请启动脚本化的Pig群集。在这个例子中,我们将启动一个交互式集群。
3.由于我们已经启动了一个交互式集群,我们现在将SSH连接到我们可以运行Grunt shell的主节点。有关如何SSH进入主节点的更多信息,请参阅SSH到主节点。
4.在命令行输入pig,运行猪的Grunt shell。
pig
5.使用Pig在Grunt命令提示符下使用register关键字注册Jython库和Python脚本,如下所示,您可以在其中指定脚本在Amazon S3中的位置。
grunt> register 'lib/jython.jar';
grunt> register 's3://mybucket/pig/python/myscript.py' using jython as myfunctions;
6.加载输入数据。以下示例从Amazon S3位置加载输入。
grunt> input = load 's3://mybucket/input/data.txt' using TextLoader as (line:chararray);
7.现在,您可以通过使用myfunctions引用它们来调用脚本中的函数。
grunt> output=foreach input generate myfunctions.myfunction($1);