Articulo de referencia

Cerdo Apache

Apache Pig [ 1 ] es una plataforma de alto nivel para crear programas que se ejecutan en Apache Hadoop . El lenguaje de esta plataforma se llama Pig Latin . [ 1 ] Pig puede ejec...

Apache Pig [ 1 ] es una plataforma de alto nivel para crear programas que se ejecutan en Apache Hadoop . El lenguaje de esta plataforma se llama Pig Latin . [ 1 ] Pig puede ejecutar sus trabajos de Hadoop en MapReduce , Apache Tez o Apache Spark . [ 2 ] Pig Latin abstrae la programación del idioma Java MapReduce en una notación que hace que la programación MapReduce sea de alto nivel, similar a la de SQL para sistemas de gestión de bases de datos relacionales . Pig Latin se puede extender usando funciones definidas por el usuario (UDF) que el usuario puede escribir en Java , Python , JavaScript , Ruby o Groovy [ 3 ] y luego llamar directamente desde el lenguaje.

Historia

Apache Pig fue originalmente [ 4 ] desarrollado en Yahoo Research alrededor de 2006 para que los investigadores tuvieran una forma ad hoc de crear y ejecutar trabajos MapReduce en conjuntos de datos muy grandes. En 2007, [ 5 ] se trasladó a la Apache Software Foundation .

Nomenclatura

En cuanto al nombre del lenguaje de programación Pig, se eligió arbitrariamente y se mantuvo porque era memorable, fácil de deletrear y por su novedad. [ 7 ] [ 8 ] [ 9 ]

Según cuenta la historia, los investigadores que trabajaban en el proyecto inicialmente lo llamaban simplemente «el lenguaje». Finalmente, tuvieron que darle un nombre. Uno de ellos, sin pensarlo mucho, sugirió «Pig», y el nombre se quedó. Es peculiar, pero fácil de recordar y de escribir. Si bien algunos han insinuado que el nombre suena cursi o ridículo, nos ha brindado una nomenclatura entretenida, como «Pig Latin» para el lenguaje, «Grunt» para el intérprete de comandos y «PiggyBank» para el repositorio compartido tipo CPAN.

Alan Gates, Daniel Dai, "¿Qué es Pig?", Programación de Pig, 2.ª edición (noviembre de 2017)

Ejemplo

A continuación se muestra un ejemplo de un programa de " Conteo de palabras " en Pig Latin:

input_lines = CARGAR '/tmp/my-copy-of-all-pages-on-internet' COMO ( línea: chararray ); -- Extraer palabras de cada línea y colocarlas en una bolsa de cerdo -- tipo de datos, luego aplanar la bolsa para obtener una palabra en cada fila words = PARA CADA input_lines GENERAR APLASTAMIENTO ( TOKENIZAR ( línea )) COMO palabra; -- filtrar cualquier palabra que sea solo espacios en blanco filtered_words = FILTRAR words POR palabra COINCIDENCIAS '\\w+' ; -- crear un grupo para cada palabra word_groups = AGRUPAR filtered_words POR palabra; -- contar las entradas en cada grupo word_count = PARA CADA word_groups GENERAR CONTAR ( filtered_words ) COMO conteo , grupo COMO palabra; -- ordenar los registros por conteo ordered_word_count = ORDENAR word_count POR conteo DESC ; ALMACENAR ordered_word_count EN '/tmp/number-of-words-on-internet' ;

El programa anterior generará tareas ejecutables en paralelo que se pueden distribuir entre varias máquinas en un clúster Hadoop para contar el número de palabras en un conjunto de datos, como por ejemplo todas las páginas web de Internet.

Cerdo contra SQL

En comparación con SQL, Pig

  1. tiene un modelo relacional anidado,
  2. utiliza evaluación perezosa ,
  3. utiliza extracción, transformación, carga (ETL),
  4. es capaz de almacenar datos en cualquier punto durante una canalización ,
  5. declara planes de ejecución ,
  6. Admite la división de flujos de trabajo, lo que permite que estos avancen a lo largo de grafos acíclicos dirigidos (DAG) en lugar de flujos de trabajo estrictamente secuenciales.

Por otro lado, se ha argumentado que los sistemas de gestión de bases de datos (DBMS) son sustancialmente más rápidos que el sistema MapReduce una vez cargados los datos, pero que la carga de datos lleva considerablemente más tiempo en los sistemas de bases de datos. También se ha argumentado que los sistemas de gestión de bases de datos relacionales (RDBMS) ofrecen soporte integrado para almacenamiento en columnas, trabajo con datos comprimidos, índices para un acceso eficiente a datos aleatorios y tolerancia a fallos a nivel de transacción. [ 10 ]

Pig Latin es procedimental y se adapta de forma muy natural al paradigma de la canalización, mientras que SQL es declarativo . En SQL, los usuarios pueden especificar que los datos de dos tablas deben unirse, pero no qué implementación de unión utilizar (se puede especificar la implementación de JOIN en SQL, por lo que "...para muchas aplicaciones SQL, el escritor de consultas puede no tener suficiente conocimiento de los datos o la experiencia suficiente para especificar un algoritmo de unión apropiado"). Pig Latin permite a los usuarios especificar una implementación o aspectos de una implementación que se utilizarán en la ejecución de un script de varias maneras. [ 11 ] En efecto, la programación en Pig Latin es similar a especificar un plan de ejecución de consulta, lo que facilita a los programadores el control explícito del flujo de su tarea de procesamiento de datos. [ 12 ]

SQL está orientado a consultas que producen un único resultado. SQL maneja árboles de forma natural, pero no tiene un mecanismo integrado para dividir un flujo de procesamiento de datos y aplicar diferentes operadores a cada subflujo. El script Pig Latin describe un grafo acíclico dirigido (DAG) en lugar de una tubería. [ 11 ]

La capacidad de Pig Latin para incluir código de usuario en cualquier punto del proceso es útil para el desarrollo de flujos de datos. Si se utiliza SQL, primero se deben importar los datos a la base de datos y luego puede comenzar el proceso de limpieza y transformación. [ 11 ]

Véase también

Referencias

  1. 1 2 "Hadoop: Apache Pig" . Consultado el 2 de septiembre de 2011 .
  2. " [ PIG-4167 ] Implementación inicial de Pig en Spark - ASF JIRA" . issues.apache.org . Consultado el 29-12-2018 .
  3. "Funciones definidas por el usuario de Pig" . Consultado el 3 de mayo de 2013 .
  4. "Blog de Yahoo: Pig – El camino hacia un lenguaje de alto nivel eficiente para Hadoop" . Archivado del original el 3 de febrero de 2016. Consultado el 23 de mayo de 2015 .
  5. "Introducción a la incubación de proyectos en la Apache Software Foundation" . Archivado del original el 3 de febrero de 2016. Consultado el 23 de mayo de 2015 .
  6. "Lanzamientos de Apache Pig" . Apache . Consultado el 13 de marzo de 2019 .
  7. "1. ¿Qué es Pig? - Programación de Pig, 2.ª edición [ Libro ] " . www.oreilly.com . Consultado el 1 de agosto de 2021 .
  8. Gates, Alan (2016). Programming Pig . Daniel Dai (Segunda edición). Sebastopol, CA. ISBN  978-1-4919-3706-8OCLC 964523786 {{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace )
  9. Gates, Alan (27 de julio de 2021). "Preguntas sobre la mascota Pig" . Lista de correo de usuarios de Pig (Lista de correo). Archivado del original el 1 de agosto de 2021. Recuperado el 1 de agosto de 2021 .
  10. "Comunicaciones de la ACM: MapReduce y sistemas de gestión de bases de datos paralelas: ¿amigos o enemigos?" (PDF) . Archivado del original (PDF) el 1 de julio de 2015. Consultado el 23 de mayo de 2015 .
  11. 1 2 3 "Equipo de desarrollo de Yahoo Pig: Comparación de Pig Latin y SQL para la construcción de flujos de procesamiento de datos" . Archivado del original el 30 de mayo de 2015. Recuperado el 23 de mayo de 2015 .
  12. "ACM SigMod 08: Pig Latin: Un lenguaje no tan extranjero para el procesamiento de datos" (PDF) . Consultado el 23 de mayo de 2015 .
  • Sitio web oficial