Llamada a funciones definidas por el usuario desde Pig - Amazon EMR

Llamada a funciones definidas por el usuario desde Pig

Pig ofrece la posibilidad de llamar a funciones definidas por el usuario (UDF) desde scripts de Pig. Puede hacerlo para implementar el procesamiento personalizado que utilizar en sus scripts de Pig. Los lenguajes soportados actualmente son Java, Python/Jython y JavaScript (aunque el soporte de JavaScript es todavía experimental).

En las secciones siguientes se describe cómo registrar sus funciones con Pig para que pueda llamarlos desde el shell de Pig o desde scripts de Pig. Para obtener más información sobre el uso de UDF con Pig, consulte la documentación de Pig correspondiente a su versión de Pig.

Llamar a archivos de JAR desde Pig

Puede utilizar archivos JAR personalizados con Pig mediante el comando REGISTER en su script de Pig. El archivo JAR es un sistema de archivos local o remoto como, por ejemplo, Amazon S3. Cuando el script de Pig se ejecuta, Amazon EMR descarga el archivo JAR automáticamente en el nodo maestro y, a continuación, carga el archivo JAR en la caché distribuida de Hadoop. De esta forma, todas las instancias del clúster utilizan automáticamente el archivo JAR según sea necesario.

Para utilizar archivos JAR con Pig
  1. Cargue su archivo JAR personalizado en Amazon S3.

  2. Utilice el comando REGISTER en su script de Pig para especificar el bucket en Amazon S3 del archivo JAR personalizado.

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

Llamada a scripts de Python/Jython desde Pig

Puede registrar scripts de Python con Pig y, a continuación, llamar a las funciones en dichos scripts desde la shell de Pig o un script de Pig. Esto se hace especificando la ubicación del script con la palabra clave register.

Dado que Pig está escrito en Java, utiliza el motor de scripts Jython para analizar scripts de Python. Para obtener más información acerca de Jython, visite http://www.jython.org/.

Para llamar a un script de Python/Jython desde Pig
  1. Escriba un script de Python y cargue el script en una ubicación en Amazon S3. Debería ser un bucket propiedad de la misma cuenta que crea el clúster de Pig o que tenga permisos definidos de modo que la cuenta que creó el clúster pueda acceder al mismo. En este ejemplo, el script se carga en s3://amzn-s3-demo-bucket/pig/python.

  2. Iniciar un clúster de Pig. Si va a acceder a Pig desde el shell de Grunt, ejecute un clúster interactivo. Si está ejecutando comandos de Pig desde un script, inicie un clúster de Pig con scripts. Este ejemplo inicia un clúster interactivo. Para obtener más información sobre crear un clúster de Pig, consulte Enviar trabajo de Pig.

  3. Para un clúster interactivo, utilice SSH para conectarse al nodo principal y ejecutar el Grunt shell. Para obtener más información, consulte cómo Conectar con el nodo maestro mediante SSH.

  4. Ejecute el shell de Grunt para Pig escribiendo pig en la línea de comando:

    pig
  5. Registre la biblioteca de Jython y el script de Python con Pig mediante la palabra clave register en el símbolo del sistema de Grunt, tal y como se muestra en el comando siguiente, donde puede especificar la ubicación del script en Amazon S3:

    grunt> register 'lib/jython.jar'; grunt> register 's3://amzn-s3-demo-bucket/pig/python/myscript.py' using jython as myfunctions;
  6. Cargar los datos de entrada. En el siguiente ejemplo, se carga una entrada desde una ubicación de Amazon S3:

    grunt> input = load 's3://amzn-s3-demo-bucket/input/data.txt' using TextLoader as (line:chararray);
  7. Ahora puede llamar a las funciones en su script desde dentro de Pig haciendo referencia a ellas utilizando myfunctions:

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