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
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.
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
.