AWS EMR从S3导入外部库

时间:2016-08-07 02:42:50

标签: python amazon-web-services amazon-s3 apache-pig amazon-emr

我已使用Amazon EMR设置了群集。 我在S3上有一个python库(从github克隆,在pip上不可用)。

我想提交一个使用udf的猪工作,该工作使用S3中的库。

我不想将库添加到系统路径,因为它只会使用一次。

我无法尝试任何有意义的事情,因为我对如何处理此问题感到茫然,因此我没有任何代码示例或方法到目前为止我已经尝试过。帮助将深表感谢! :)

1 个答案:

答案 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);