Tutorial de Hadoop Pig: ¿Qué es Apache Pig? Architectura, ejemplo

⚡ Resumen inteligente

Apache Pig es una plataforma de alto nivel para analizar grandes conjuntos de datos en Hadoop, que combina el lenguaje de flujo de datos Pig Latin con un entorno de ejecución que compila cada script en MapReduce, Tez o Spark trabajos automáticamente.

  • 🔘 Dos componentes: Pig Latin proporciona el lenguaje y el entorno de ejecución de Pig convierte cada script en trabajos en clúster.
  • ☑️ Tipos de ejecución: Las versiones actuales ofrecen seis tipos de ejecución seleccionados con la bandera -x, desde local hasta Spark.
  • ✅ Requisitos previos: Una instalación de Hadoop en funcionamiento más Java, con HADOOP_HOME y JAVA_HOME exportados, debe existir primero.
  • 🧪 Ejemplo trabajado: Un script de cuatro instrucciones carga el archivo SalesJan2009.csv, lo agrupa por país y almacena el recuento de productos.
  • 🛠️ Modelo de datos: Los tipos escalares, junto con las tuplas, las bolsas y los mapas, permiten a Pig leer archivos anidados y con una estructura poco definida.
  • 📈 Versión actual: Apache Pig 0.18.0 llegó en septiembre de 2025 con Hadoop 3, Tez, Spark y Python 3 soporte.

Tutorial de Hadoop Pig que cubre la arquitectura de Apache Pig, la instalación y un ejemplo práctico de Pig Latin.

Este tutorial comienza con la idea detrás de Apache Pig, luego explica cómo instalarlo y cómo ejecutar un script completo de Pig Latin de principio a fin.

¿Qué es el cerdo apache?

El cerdo es un nivel alto lenguaje de programación Útil para analizar grandes conjuntos de datos. Pig fue el resultado del esfuerzo de desarrollo en Yahoo!

En un marco de trabajo MapReduce, los programas deben traducirse en una serie de etapas Map y Reduce. Sin embargo, este no es un modelo de programación con el que los analistas de datos estén familiarizados. Por lo tanto, para salvar esta brecha, se necesita un enfoque integral.tracLa construcción llamada Pig se construyó encima de Hadoop.

Apache Pig permite centrarse en el análisis de grandes conjuntos de datos y dedicar menos tiempo a escribir programas MapReduce. Al igual que los cerdos, que comen de todo, el lenguaje de programación Apache Pig está diseñado para trabajar con cualquier tipo de datos. ¡De ahí su nombre: Pig! La mascota del proyecto, que aparece a continuación, ilustra esta idea.

Cerdo de dibujos animados utilizado como mascota de Apache Pig, ilustrando que Pig procesa cualquier tipo de datos.

El proyecto sigue activo. Apache Pig 0.18.0 fue lanzado el 15 de septiembre de 2025 y agrega soporte para Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 y Python 3, según la Página de versiones de Apache PigEl tutorial que aparece a continuación se escribió originalmente para la versión 0.12.1, mucho más antigua, por lo que algunos pasos incluyen una nota donde se indica que la versión actual se comporta de manera diferente.

Cerdo Architectura

La arquitectura de Pig consta de dos componentes:

  1. Jerga, que es un idioma
  2. Un entorno de ejecución, para ejecutar programas de Pig Latin.

Un programa Pig Latin consiste en una serie de operaciones o transformaciones que se aplican a los datos de entrada para producir una salida. Estas operaciones describen un flujo de datos que es traducido a una representación ejecutable por el entorno de ejecución Hadoop Pig. Debajo, los resultados de estas transformaciones son una serie de MapReduce tareas que un programador desconoce. Así, en cierto modo, Pig en Hadoop permite al programador centrarse en los datos en lugar de en la naturaleza de la ejecución.

Pig Latin es un lenguaje relativamente rígido que utiliza palabras clave familiares del procesamiento de datos, por ejemplo, Join, Group y Filter. El diagrama a continuación traces un script desde el shell Grunt a través del analizador, el optimizador y el compilador en su camino hacia el motor de ejecución.

Diagrama de la arquitectura de Apache Pig que muestra los scripts de Pig Latin pasando por el analizador, el optimizador y el compilador hasta el motor de ejecución.

Modos de ejecución

Pig en Hadoop tiene dos modos de ejecución, y el tutorial de instalación que se muestra más adelante utiliza ambos:

  1. Modo local: En este modo, el lenguaje Hadoop Pig se ejecuta en un único JVM y utiliza el sistema de archivos local. Este modo solo es adecuado para el análisis de conjuntos de datos pequeños mediante Pig en Hadoop.
  2. Modo MapReduce: En este modo, las consultas escritas en Pig Latin se traducen a trabajos MapReduce y se ejecutan en un clúster Hadoop (el clúster puede ser pseudodistribuido o totalmente distribuido). El modo MapReduce con un clúster totalmente distribuido es útil para ejecutar Pig en grandes conjuntos de datos.

Esos dos son el par clásico. Las versiones actuales en realidad exponen seis tipos de ejecución, o exectypes, cada uno seleccionado con el mismo -x bandera, como se documenta en el Guía de inicio rápido de Pig 0.18.0.

Tipo de ejecución Comando Dónde se desarrolla el trabajo
Local cerdo -x local Una única JVM frente al sistema de archivos local
Tez local cerdo -x tez_local Una única JVM que utiliza el entorno de ejecución Tez (experimental)
Spark local cerdo -x spark_local Una única JVM que utiliza el Spark tiempo de ejecución (experimental)
MapReduce cerdo o cerdo -x mapreduce Un clúster Hadoop con HDFS; esta es la configuración predeterminada.
Tez cerdo -x tez Un clúster Hadoop que ejecuta el motor Tez.
Spark cerdo -x chispa A Spark, clúster YARN o Mesos con HDFS

Tipos de datos y Pig Latin Operatoros

Antes de escribir un script, es útil saber qué información puede almacenar Pig y qué puede hacer con ella. El modelo de datos está completamente anidado, lo que permite a Pig leer archivos de registro y otros datos de entrada poco estructurados que una tabla relacional rechazaría.

Pig Latin ofrece dos familias de tipos:

  • Tipos escalares: int, long, float, double, chararray, bytearray, boolean, datetime, biginteger y bigdecimalEl script de ejemplo más adelante declara cada columna como chararray.
  • Tipos complejos: a tupla es un conjunto ordenado de campos y se comporta como una fila; bolsa es una colección desordenada de tuplas y se comporta como una tabla; mapa es un conjunto de pares clave y valor cuya clave debe ser un chararray.

Los operarios se dividen en un número reducido de puestos, y unos pocos de ellos se encargan de casi todos los oleoductos:

Operator ¿Qué hace?
CARGAR / ALMACENAR Lee una relación del sistema de archivos y escribe el resultado.
FILTRO Conservar solo las tuplas que coincidan con una condición.
PARA CADA UNO… GENERAR Trabaje columna por columna, creando nuevos campos.
GRUPO / COGRUPO Agrupe una relación, o dos o más relaciones, por una clave.
ÚNETE Combinar relaciones con una unión interna o externa
UNIÓN / DIVISIÓN Fusionar relaciones o dividir una en varias.
ORDENAR POR / DISTINTO / LÍMITE Ordenar, eliminar duplicados y limitar el número de tuplas.
VOLCAR / DESCRIBIR / EXPLICAR / ILUSTRAR Inspeccione los resultados, los esquemas, los planes de ejecución y las ejecuciones de ejemplo.

Los cuatro operadores de inspección también tienen atajos de Grunt, lo que ahorra tiempo.ping durante la depuración: \d para DUMP, \de para DESCRIBIR, \e para EXPLICAR y \i para ILLUSTRAR.

Requisitos previos

Pig es una herramienta del lado del cliente. Analiza un script, planifica el trabajo y envía tareas, pero no proporciona almacenamiento ni un clúster propio, por lo que primero debe existir una instalación funcional de Hadoop. La lista de requisitos de Apache es corta.

Componente Requisito Por que es necesario
Hadoop Hadoop 2.x o 3.x, con HADOOP_HOME exportado Proporciona HDFS y el motor de ejecución. Sin HADOOP_HOME, Pig 0.18.0 recurre a un Hadoop 2.7.3 integrado.
Java Java 1.7 o posterior, con JAVA_HOME configurado en la raíz de instalación. Pig y los demonios de Hadoop son Java programas
Python (opcional) Python 2.7 Solo necesario para la transmisión en directo Python funciones definidas por el usuario
Hormiga (opcional) Hormiga 1.8 Solo es necesario al compilar o recompilar Pig desde el código fuente.

Dos puntos prácticos acompañan a esa lista. Primero, ejecute todo como un usuario de Linux que ya tenga un directorio de inicio en HDFS y permiso para escribir en él; este tutorial utiliza hduser, la cuenta creada durante la configuración de Hadoop. En segundo lugar, inicie el clúster antes de lanzar Pig en modo MapReduce, ya que Pig falla inmediatamente si NameNode y ResourceManager están inactivos. Si Hadoop aún no está instalado, trabaje a través de Cómo instalar Hadoop de antemano.

Cómo descargar e instalar Pig

Ahora, en este tutorial de Apache Pig, aprenderemos cómo descargar e instalar Pig:

Antes de comenzar con el proceso propiamente dicho, asegúrese de tener Hadoop instalado. Cambie el usuario a 'hduser' (el ID utilizado durante la configuración de Hadoop; puede cambiar al ID de usuario utilizado durante su propia configuración de Hadoop).

Comando de terminal para cambiar el usuario de Linux a hduser antes de que comience la instalación de Pig.

Paso 1) Descargue la última versión estable de Pig Hadoop desde cualquiera de los sitios espejo disponibles en

https://pig.apache.org/releases.html

Seleccione el archivo tar.gz (y no src.tar.gz) para descargar, como se muestra a continuación.

Apache Pig lanza una página de descarga con la distribución tar.gz para seleccionar

Paso 2) Una vez completada la descarga, navegue hasta el directorio que contiene el archivo tar descargado y mueva el archivo tar a la ubicación donde desea configurar Pig Hadoop. En este caso, lo moveremos a /usr/local.

La terminal mueve el archivo tar de Pig descargado al directorio /usr/local.

Acceda al directorio que contendrá los archivos de Pig Hadoop.

cd /usr/local

ExtracEl contenido del archivo tar es el siguiente.

sudo tar -xvf pig-0.12.1.tar.gz

Terminal extracComprimiendo el archivo Pig con el comando sudo tar -xvf

Paso 3) Modifique el archivo ~/.bashrc para agregar variables de entorno relacionadas con Pig.

Abra el archivo ~/.bashrc con cualquier editor de texto de su elección y realice las modificaciones que se indican a continuación.

export PIG_HOME=<Installation directory of Pig>
export PATH=$PIG_HOME/bin:$HADOOP_HOME/bin:$PATH

Editor de texto que muestra las líneas de exportación PIG_HOME y PATH añadidas al archivo bashrc

Paso 4) Ahora, configure este entorno utilizando el siguiente comando.

. ~/.bashrc

Se ejecuta el archivo bashrc desde la terminal para que las nuevas variables de entorno de Pig surtan efecto.

Paso 5) Necesitamos recompilar Pig para que sea compatible con Hadoop 2.2.0.

Aquí están los pasos para hacerlo.

Ve al directorio principal de Pig.

cd $PIG_HOME

Instalar hormiga.

sudo apt-get install ant

Instalación de Apache Ant mediante apt-get en la terminal, como preparación para la recompilación de Pig.

Nota: La descarga comenzará y consumirá tiempo según la velocidad de su conexión a internet.

Recompilar Pig.

sudo ant clean jar-all -Dhadoopversion=23

Terminal que ejecuta el objetivo Ant que recompila Pig para la línea Hadoop 2

Tenga en cuenta que en este proceso de recompilación se descargan varios componentes, por lo que el sistema debe estar conectado a Internet.

Además, en caso de que este proceso se quede bloqueado en algún punto y no vea ningún movimiento en la línea de comandos durante más de 20 minutos, pulse Ctrl + c y vuelva a ejecutar el mismo comando.

En nuestro caso, tarda 20 minutos.

Salida de la terminal de la recompilación de Pig, que tardó unos veinte minutos en este ejemplo.

Este paso de recompilación pertenece a la era 0.12.1, cuando los jar enviados se compilaron contra Hadoop 1 y el -Dhadoopversion=23 La opción flag cambió la compilación de Ant a la línea Hadoop 0.23 y 2.x. Apache Pig 0.18.0 incluye binarios que ya se ejecutan en Hadoop 2.7 y versiones posteriores, así como en Hadoop 3, por lo que en una versión actual normalmente puede descomprimir el archivo tarball y pasar directamente a la prueba que se muestra a continuación.

Paso 6) Pruebe la instalación de Pig usando el comando

pig -help

Salida del comando pig -help que muestra las opciones de la línea de comandos de Pig después de la instalación.

Ejemplo de script de cerdo

Una vez instalado Pig, el resto de este tutorial de Apache Pig ejecuta un script completo. Usaremos scripts de Pig para averiguar la cantidad de productos vendidos en cada país.

Entrada: Nuestro conjunto de datos de entrada es un archivo CSV, VentasEne2009.csv.

Paso 1) Iniciar Hadoop.

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Paso 2) Pig in Big Data toma un archivo de HDFS en modo MapReduce y almacena los resultados de nuevo en HDFS.

Copie el archivo SalesJan2009.csv (almacenado en el sistema de archivos local en ~/input/SalesJan2009.csv) al directorio principal de HDFS (Hadoop Distributed File System).

En este ejemplo de Apache Pig, el archivo se encuentra en la carpeta especificada. Si el archivo está almacenado en otra ubicación, utilice ese nombre.

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal ~/input/SalesJan2009.csv /

Copia del archivo SalesJan2009.csv desde el sistema de archivos local a HDFS mediante la terminal.

Verifique si el archivo se copió realmente o no.

$HADOOP_HOME/bin/hdfs dfs -ls /

Listado raíz de HDFS que confirma que el archivo SalesJan2009.csv se copió.

Paso 3) Configuración del cerdo.

Primero, diríjase a $PIG_HOME/conf y guarde una copia del archivo de propiedades original.

cd $PIG_HOME/conf
sudo cp pig.properties pig.properties.original

La terminal realiza una copia de seguridad de pig.properties antes de editar la configuración de Pig.

Abra el archivo pig.properties con el editor de texto que prefiera y especifique la ruta del archivo de registro usando pig.logfile.

sudo gedit pig.properties

El archivo de configuración pig.properties se abre en un editor de texto en la configuración del archivo de registro.

El registrador utilizará este archivo para registrar los errores.

Paso 4) Ejecuta el comando 'pig', que iniciará el indicador de comandos de Pig, una consola interactiva para realizar consultas a Pig.

pig

El intérprete interactivo de Grunt se inicia después de ejecutar el comando pig.

Paso 5) En la consola de comandos de Grunt para Pig, ejecute los siguientes comandos de Pig en orden.

— A. Cargue el archivo que contiene los datos.

salesTable = LOAD '/SalesJan2009.csv' USING PigStorage(',') AS (Transaction_date:chararray,Product:chararray,Price:chararray,Payment_Type:chararray,Name:chararray,City:chararray,State:chararray,Country:chararray,Account_Created:chararray,Last_Login:chararray,Latitude:chararray,Longitude:chararray);

Presione Enter después de este comando.

Grunt shell acepta la instrucción LOAD que lee el CSV de ventas en una relación

— B. Agrupar los datos por el campo País.

GroupByCountry = GROUP salesTable BY Country;

Grunt shell acepta la declaración del GRUPO que agrupa la relación de ventas por país.

— C. Para cada tupla en 'GroupByCountry', genere la cadena resultante con el formato Nombre del país: Número de productos vendidos.

CountByCountry = FOREACH GroupByCountry GENERATE CONCAT((chararray)$0,CONCAT(':',(chararray)COUNT($1)));

Presione Enter después de este comando.

Grunt shell acepta la instrucción FOREACH GENERATE que construye el país y la cadena de conteo

— D. Almacene los resultados del flujo de datos en el directorio 'pig_output_sales' en HDFS.

STORE CountByCountry INTO 'pig_output_sales' USING PigStorage('\t');

El intérprete de comandos Grunt acepta la instrucción STORE que escribe la salida en el directorio pig_output_sales.

Este comando tardará un tiempo en ejecutarse. Una vez finalizado, debería ver la siguiente pantalla.

Pantalla de consola que se muestra una vez que el comando STORE ha finalizado su ejecución.

Paso 6) El resultado se puede ver a través de la interfaz de comandos como

$HADOOP_HOME/bin/hdfs dfs -cat pig_output_sales/part-r-00000

Salida de la línea de comandos del archivo de resultados que enumera los productos vendidos por país.

Los resultados también pueden consultarse a través de una interfaz web.

Abra http://localhost:50070/ en un navegador web.

El puerto 50070 es la interfaz web de NameNode en Hadoop 2. Hadoop 3 trasladó la misma página al puerto 9870, así que utilice esa dirección si su clúster ejecuta Hadoop 3.

Interfaz web de Hadoop NameNode utilizada para explorar el sistema de archivos HDFS.

Ahora seleccione 'Explorar el sistema de archivos' y navegue hasta /user/hduser/pig_output_sales.

El navegador HDFS muestra el directorio pig_output_sales en la ruta de inicio del usuario hduser.

Abra part-r-00000 para leer los pares de país y cantidad de producto que generó el script.

Vista del navegador del archivo de salida part-r-00000 con pares de recuento de países y productos.

Apache Pig vs Hive vs MapReduce

Pig rara vez se evalúa por sí solo. La pregunta habitual es si un trabajo pertenece a Pig, en Colmena o en un programa MapReduce escrito a mano, ya que los tres terminan siendo trabajos en el mismo clúster.

Aspecto MapReduce (Java) Cerdo apache Colmena Apache
Fácil de usar Java API Pig Latin, un lenguaje de scripting para el flujo de datos. ColmenaQL, un dialecto SQL
Nivel de abstracdisrupción Bajo Media Alto
Usuario típico Java developer Ingeniero o investigador de datos Analista con conocimientos de SQL
Datos que le convienen Cualquier cosa, manejada manualmente Estructurado y semiestructurado; el esquema es opcional en el momento de la carga. Tablas estructuradas registradas en un metastore
Code volumen La mayoría de las líneas Menos líneas Menos líneas para una consulta
Se ejecuta como Un trabajo MapReduce Compila a MapReduce, Tez o Spark recibas nuevas vacantes en tu correo Compila a MapReduce, Tez o Spark recibas nuevas vacantes en tu correo
Mejores en Control total y lógica personalizada Pipelines ETL de múltiples pasos Consultas e informes ad hoc

En la práctica, la división es sencilla. Recurra a Hive cuando los datos ya parezcan una tabla y la pregunta parezca SQL. Recurra a Pig cuando la entrada sea desordenada, cuando la canalización sea una cadena de transformaciones en lugar de una sola consulta, o cuando el mismo script tenga que ramificarse y volver a unirse. Recurra a MapReduce solo cuando ninguno de los dos sea adecuado.tracLa ción puede expresar la lógica, porque el número de líneas crece rápidamente.

El cerdo también se integra perfectamente con el resto del ecosistema. Sqoop y Flume aterrizar los datos sin procesar, Pig o Hive darles forma, y ​​un planificador como apache oozie encadena los pasos en una secuencia repetible. Para obtener una visión más amplia de dónde encajan estas herramientas, consulte la guía para grandes volúmenes de datos y el resumen de herramientas de big dataPara una alternativa comercial de ETL a los scripts escritos a mano, consulte Talend.

Preguntas Frecuentes

Sí. Apache Pig 0.18.0 se lanzó el 15 de septiembre de 2025 y trajo soporte para Hadoop 3, Tez 0.10, Hive 3, Spark 3, HBase 2 y Python 3. El desarrollo es más lento que en sus años en Yahoo!, pero el proyecto no está abandonado.

Los asistentes de IA elaboran la lógica de transformación a partir de una descripción simple, sugieren claves de unión, detectan desviaciones del esquema entre ejecuciones y resumen los registros del clúster para identificar la causa probable. Considere el resultado como un primer borrador que aún necesita ser validado con datos reales.

Copilot genera rápidamente un código Pig Latin plausible gracias a que la sintaxis está bien representada en repositorios públicos. Sin embargo, inventa nombres de funciones y posiciones de campos incorrectas, por lo que conviene ejecutar DESCRIBE e ILLUSTRATE en un ejemplo antes de confiar en un script generado.

Pig solo se ejecuta cuando una instrucción fuerza la materialización. Se valida una cadena de instrucciones LOAD y FOREACH, pero nunca se ejecuta hasta que le sigue una instrucción DUMP o STORE, por lo que un script que finaliza después de una transformación termina silenciosamente.

DUMP imprime una relación en la terminal y está pensado para realizar pruebas. STORE escribe la relación en el sistema de archivos mediante una función de almacenamiento como PigStorage. Los scripts de producción siempre deben terminar con STORE.

No. La cláusula AS es opcional. Sin ella, cada campo se carga como un array de bytes y se referencia por posición, como $0 y $1. Declarar un esquema simplemente facilita la lectura de los scripts y permite que Pig realice la comprobación de tipos antes.

La mayoría de los nuevos oleoductos comienzan en Spark, que tiene una comunidad más grande y bibliotecas más ricas. Pig sigue siendo sensato donde ya existen scripts, donde el equipo prefiere una sintaxis de flujo de datos o donde Pig se ejecuta en Spark a través del exectype de spark.

Sqoop importa tablas relacionales y Flume transmite datos de registro a HDFS. Pig transforma los datos recibidos. Oozie encadena los pasos de importación, transformación y exportación en un flujo de trabajo programado, de modo que la canalización se repite sin necesidad de ejecución manual.

Resumir este post con: