Pig からユーザー定義関数を呼び出す - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Pig からユーザー定義関数を呼び出す

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

以下のセクションでは、関数を Pig シェルまたは Pig スクリプトから呼び出せるように、Pig に登録する方法を説明します。Pig での UDF の使用の詳細については、ご使用のバージョンの「Pig のドキュメント」を参照してください。

Pig から JAR ファイルを呼び出す

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

Pig で JAR ファイルを使用するには
  1. Amazon S3 にカスタム JAR ファイルをアップロードします。

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

    REGISTER s3://amzn-s3-demo-bucket/path/mycustomjar.jar;

Pig から Python/Jython スクリプトを呼び出す

Python スクリプトを Pig に登録し、登録したスクリプト内の関数を Pig シェルまたは Pig スクリプトから呼び出すことができます。これを行うには、register キーワードでスクリプトの場所を指定します。

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

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

  2. Pig クラスターを起動します。Grunt シェルから Pig にアクセスする場合は、インタラクティブクラスターを起動します。Pig コマンドをスクリプトから実行している場合は、スクリプトで記述された Pig クラスターを起動します。この例では、インタラクティブクラスターを起動します。Pig クラスターの詳細については、「Pig の作業の送信」を参照してください。

  3. インタラクティブクラスターの場合は、SSH を使用してマスターノードに接続し、Grunt シェルを実行します。詳細については、「マスターノードへの SSH 接続」を参照してください。

  4. コマンドラインに pig と入力することにより、Pig 向けに Grunt を実行します。

    pig
  5. 以下のコマンドに示すように Grunt コマンドプロンプトで register キーワードを使用し、Amazon S3 内のスクリプトの場所を指定して Jython ライブラリおよび Python スクリプトを Pig に登録します。

    grunt> register 'lib/jython.jar'; grunt> register 's3://amzn-s3-demo-bucket/pig/python/myscript.py' using jython as myfunctions;
  6. 入力データをロードします。次の例では、入力を Amazon S3 上の場所からロードします。

    grunt> input = load 's3://amzn-s3-demo-bucket/input/data.txt' using TextLoader as (line:chararray);
  7. これにより、myfunctions を使用してスクリプト内の関数を参照して、Pig から呼び出すことができます。

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