aws emr从s3导入外部库

gudnpqoy  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(365)

我用amazonemr建立了一个集群。我在s3上有一个python库(从github克隆而来,在pip上不可用)。
我想提交一个pig工作,它使用了一个udf,它利用了s3中的库。
我不想将库添加到系统路径,因为它只会被使用一次。
我没能尝试任何有意义的东西,因为我不知道如何处理这个问题,因此没有任何代码样本或方法,我已经尝试了。我们将非常感谢您的帮助!:)

ilmyapht

ilmyapht1#

仔细阅读下列材料。
从pig调用用户定义函数:
pig提供了从pig脚本中调用用户定义函数(udf)的能力。您可以这样做来实现在pig脚本中使用的自定义处理。目前支持的语言有java、python/jython和javascript(尽管javascript支持仍处于试验阶段。)
以下各节介绍如何向pig注册函数,以便可以从pig shell或pig脚本中调用它们。有关将UDF用于pig的更多信息,请转到http://pig.apache.org/docs/r0.14.0/udf.html.
从pig调用jar文件:
可以使用pig脚本中的register命令将自定义jar文件与pig一起使用。jar文件是本地或远程文件系统,如amazons3。当pig脚本运行时,amazonemr自动将jar文件下载到主节点,然后将jar文件上传到hadoop分布式缓存。这样,集群中的所有示例都会根据需要自动使用jar文件。
在pig中使用jar文件
1.将自定义jar文件上传到amazons3中。
2.在pig脚本中使用register命令指定定制jar文件的amazons3上的bucket。

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脚本并将脚本上传到amazons3中的某个位置。这应该是由创建pig集群的同一个帐户拥有的bucket,或者具有设置的权限,以便创建集群的帐户可以访问它。在本例中,脚本上载到

s3://mybucket/pig/python.

2.启动清管器集群。如果要从grunt shell访问pig,请运行一个交互式集群。如果您是从脚本运行pig命令,请启动一个脚本pig集群。在本例中,我们将启动一个交互式集群。
3.因为我们已经启动了一个交互式集群,我们现在将ssh连接到主节点,在那里我们可以运行grunt shell。有关如何ssh到主节点的更多信息,请参阅ssh到主节点。
4.通过在命令行中键入pig,为pig运行grunt shell。

pig

5.在grunt命令提示符下使用register关键字注册jython库和python脚本,如下所示,在这里您可以指定脚本在amazons3中的位置。

grunt> register 'lib/jython.jar';
grunt> register 's3://mybucket/pig/python/myscript.py' using jython as myfunctions;

6.加载输入数据。下面的示例从amazons3位置加载输入。

grunt> input = load 's3://mybucket/input/data.txt' using TextLoader as (line:chararray);

7.现在可以通过使用myfunctions引用pig中的函数来调用脚本中的函数。

grunt> output=foreach input generate myfunctions.myfunction($1);

相关问题