Consideraciones sobre el uso de Pig en Amazon EMR 4.x - Amazon EMR

Consideraciones sobre el uso de Pig en Amazon EMR 4.x

La versión 0.14.0 de Pig se instala en los clústeres creados con versiones 4.x de Amazon EMR. Pig se ha actualizado a la versión 0.16.0 en la versión 5.0.0 de Amazon EMR. Las diferencias significativas se explican a continuación.

Motor de ejecución predeterminado diferente

La versión 0.14.0 de Pig en las versiones 4.x de Amazon EMR utiliza MapReduce como el motor de ejecución predeterminado. Pig 0.16.0 y versiones posteriores utilizan Apache Tez. Puede definir de forma explícita exectype=mapreduce en la clasificación de configuración pig-properties para usar MapReduce.

Funciones definidas por el usuario (UDF) de Pig abandonadas

Las UDF personalizadas que estaban disponibles en Pig en las versiones 4.x de Amazon EMR se dejaron de usar a partir de Pig 0.16.0. La mayoría de las UDF tienen funciones equivalentes que puede utilizar en su lugar. En la siguiente tabla se muestran las UDF abandonadas y sus funciones equivalentes. Para más información, consulte Funciones integradas en el sitio de Apache Pig.

UDF abandonada Función equivalente

FORMAT_DT(dtformat, date)

GetHour(date), GetMinute(date), GetMonth(date), GetSecond(date), GetWeek(date), GetYear(date), GetDay(date)

EXTRACT(string, pattern)

REGEX_EXTRACT_ALL(string, pattern)

REPLACE(string, pattern, replacement)

REPLACE(string, pattern, replacement)

DATE_TIME()

ToDate()

DURATION(dt, dt2)

WeeksBetween(dt, dt2), YearsBetween(dt, dt2), SecondsBetween(dt, dt2), MonthsBetween(dt, dt2), MinutesBetween(dt, dt2), HoursBetween(dt, dt2)

EXTRACT_DT(format, date)

GetHour(date), GetMinute(date), GetMonth(date), GetSecond(date), GetWeek(date), GetYear(date), GetDay(date)

OFFSET_DT(date, duration)

AddDuration(date, duration), SubtractDuration(date, duration)

PERIOD(dt, dt2)

WeeksBetween(dt, dt2), YearsBetween(dt, dt2), SecondsBetween(dt, dt2), MonthsBetween(dt, dt2), MinutesBetween(dt, dt2), HoursBetween(dt, dt2)

CAPITALIZE(string)

UCFIRST(string)

CONCAT_WITH()

CONCAT()

INDEX_OF()

INDEXOF()

LAST_INDEX_OF()

LAST_INDEXOF()

SPLIT_ON_REGEX()

STRSPLT()

UNCAPITALIZE()

LCFIRST()

Las siguientes UDF se han eliminado sin equivalente: FORMAT(), LOCAL_DATE(), LOCAL_TIME(), CENTER(), LEFT_PAD(), REPEAT(), REPLACE_ONCE(), RIGHT_PAD(), STRIP(), STRIP_END(), STRIP_START(), SWAP_CASE().

Comandos de Grunt suspendidos

Algunos comandos de Grunt se han dejado de utilizar a partir de Pig 0.16.0. En la siguiente tabla, se muestran comandos de Grunt en Pig 0.14.0 y los comandos equivalentes en la versión actual, si procede.

Pig 0.14.0 y los comandos equivalentes de Grunt actuales
Comando de Grunt de Pig 0.14.0 Comando de Grunt de Pig en 0.16.0 y versiones posteriores

cat <ruta-no-hdfs>;

fs -cat <ruta-no-hdfs>;

cd <ruta-no-hdfs>;

Sin equivalente

ls <ruta-no-hdfs>; fs -ls <ruta-no-hdfs>;

move <ruta-no-hdfs> <ruta-no-hdfs>;

fs -mv <ruta-no-hdfs> <ruta-no-hdfs>;

copy <ruta-no-hdfs> <ruta-no-hdfs>;

fs -cp <ruta-no-hdfs> <ruta-no-hdfs>;

copyToLocal <ruta-no-hdfs> <ruta-local>;

fs -copyToLocal <ruta-no-hdfs> <ruta-local>;

copyFromLocal <ruta-local> <ruta-no-hdfs>;

fs -copyFromLocal <ruta-local> <ruta-no-hdfs>;

mkdir <ruta-no-hdfs>;

fs -mkdir <ruta-no-hdfs>;

rm <ruta-no-hdfs>;

fs -rm -r -skipTrash <ruta-no-hdfs>;

rmf <ruta-no-hdfs>;

fs -rm -r -skipTrash <ruta-no-hdfs>;

Se ha eliminado la capacidad de directorios de inicio que no son de HDFS

Pig 0.14.0 en las versiones 4.x de Amazon EMR tiene dos mecanismos que permiten a los usuarios distintos del usuario hadoop, que no tienen directorios de inicio, ejecutar scripts de Pig. El primer mecanismo es una reserva automática que establece el directorio de trabajo inicial en el directorio raíz si el directorio de inicio no existe. El segundo es una propiedad pig.initial.fs.name que le permite cambiar el directorio de trabajo inicial.

Estos mecanismos no están disponibles a partir de la versión 5.0.0 de Amazon EMR y los usuarios deben tener un directorio de inicio en HDFS. Esto no se aplica al usuario de hadoop, ya que se aprovisiona un directorio de inicio en el lanzamiento. La ejecución de scripts con pasos de Hadoop jar adopta de manera predeterminada el usuario de Hadoop, a menos que se especifique otro usuario mediante command-runner.jar.