2016-08-07 25 views
7

Amazon EMRを使用してクラスタをセットアップしました。 S3にpythonライブラリ(githubからクローンされ、pipで利用できない)があります。AWS EMR S3から外部ライブラリをインポート

S3にあるライブラリを利用するudfを使用したブタの仕事を提出したいと思います。

ライブラリーをシステムパスに追加したくないのは、ライブラリーが1回だけ使用されるためです。

私はこの問題に近づく方法を失っているので意味のあるものを試すことができませんでした。したがって、これまで試したコードサンプルやメソッドはありません。ヘルプは深く感謝されます! :)

答えて

0

以下の物質を注意深く読んでください。豚から

コールユーザー定義関数:

ぶたスクリプト内からユーザー定義関数(UDF)を呼び出す機能を提供します。これを行うと、Pigスクリプトで使用するカスタム処理を実装できます。現在サポートされている言語は、Java、Python/Jython、およびJavaScriptです。

以下のセクションでは、PigシェルまたはPigスクリプトから関数を呼び出すことができるように、関数をPigに登録する方法について説明します。 PigでUDFを使用する方法の詳細については、http://pig.apache.org/docs/r0.14.0/udf.htmlを参照してください。

豚から

コールJARファイル:

あなたの豚スクリプトでREGISTERコマンドを使用して豚とカスタムJARファイルを使用することができます。 JARファイルは、ローカルまたはAmazon S3などのリモートファイルシステムです。 Pigスクリプトが実行されると、Amazon EMRは自動的にJARファイルをマスターノードにダウンロードし、JARファイルをHadoop分散キャッシュにアップロードします。このようにして、JARファイルは、クラスタ内のすべてのインスタンスによって必要に応じて自動的に使用されます。

は豚

1.UploadアマゾンS3へのカスタムJARファイルとJARファイルを使用します。

2.PigスクリプトでREGISTERコマンドを使用して、カスタムJARファイルのAmazon S3にバケットを指定します。

REGISTER s3://mybucket/path/mycustomjar.jar; 

からコールのPython/Jythonスクリプトあなたは豚でPythonスクリプトを登録して、豚のシェルからや豚のスクリプトでこれらのスクリプトで関数を呼び出すことができます。これを行うには、registerキーワードを使用してスクリプトの場所を指定します。

PigはJavaで記述されているため、Jythonスクリプトエンジンを使用してPythonスクリプトを解析します。 Jythonの詳細については、http://www.jython.org/を参照してください。

は豚

1.Write PythonスクリプトからのPython/Jythonスクリプトを呼び出すとAmazon S3内の場所にスクリプトをアップロードします。これは、Pigクラスタを作成する同じアカウントが所有するバケット、またはクラスタを作成したアカウントがアクセスできるようにアクセス権が設定されているバケットである必要があります。この例では、スクリプトは

にアップロードされます。
s3://mybucket/pig/python. 

2.ブタクラスタを起動します。 GruntシェルからPigにアクセスする場合は、対話型クラスタを実行します。スクリプトからPigコマンドを実行している場合は、スクリプトされたPigクラスタを起動します。この例では、対話型クラスタを開始します。

3.私たちは対話型クラスタを立ち上げたので、ここではGruntシェルを実行できるマスターノードにSSHします。マスターノードへのSSHの詳細については、「マスターノードへのSSH」を参照してください。

4.コマンドラインでpigを入力して、PunのGruntシェルを実行します。あなたはアマゾンS3にあなたのスクリプトの場所を指定することになり、以下に示すように、兵卒でレジスタのキーワードを使用して

豚とJythonのライブラリとあなたのPythonスクリプト5.Register
pig 

は、コマンドプロンプト。

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.Youは今myfunctionsを使用してそれらを参照することにより、豚の中から、あなたのスクリプト内の関数を呼び出すことができます。

grunt> output=foreach input generate myfunctions.myfunction($1); 
関連する問題