stringtranslate.com

Cerdo apache

Apache Pig [1] es una plataforma de alto nivel para crear programas que se ejecutan en Apache Hadoop . El lenguaje para 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 MapReduce de Java en una notación que hace que la programación de MapReduce sea de alto nivel, similar a la de SQL para sistemas de administración de bases de datos relacionales . Pig Latin se puede ampliar utilizando 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 desarrollado originalmente [4] en Yahoo Research alrededor de 2006 para que los investigadores tuvieran una forma ad hoc de crear y ejecutar trabajos de MapReduce en conjuntos de datos muy grandes. En 2007, [5] se trasladó a la Apache Software Foundation .

Nombramiento

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

Según cuenta la historia, los investigadores que trabajaban en el proyecto inicialmente se referían a él simplemente como "el lenguaje". Con el tiempo, tuvieron que darle un nombre. De repente, un investigador 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 tímido o tonto, nos ha proporcionado una nomenclatura entretenida, como Pig Latin para el lenguaje, Grunt para el shell y PiggyBank para el repositorio compartido similar a CPAN.

—  Alan Gates, Daniel Dai, "¿Qué es Pig?", Programming 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 = LOAD '/tmp/mi-copia-de-todas-las-paginas-en-internet' AS ( linea: chararray ); -- Extrae palabras de cada línea y colócalas en una bolsa -- tipo de datos, luego aplana la bolsa para obtener una palabra en cada fila words = FOREACH input_lines GENERATE FLATTEN ( TOKENIZE ( linea )) AS palabra; -- filtra cualquier palabra que sea solo un espacio en blanco filtered_words = FILTER words BY word MATCHES '\\w+' ; -- crea un grupo para cada palabra word_groups = GROUP filtered_words BY palabra; -- cuenta las entradas en cada grupo word_count = FOREACH word_groups GENERATE COUNT ( filtered_words ) AS count , group AS palabra; -- ordena los registros por conteo ordered_word_count = ORDER word_count BY count DESC ; STORE ordered_word_count INTO '/tmp/numero-de-palabras-en-internet' ;                                                            

El programa anterior generará tareas ejecutables paralelas que pueden distribuirse entre múltiples máquinas en un clúster Hadoop para contar la cantidad de palabras en un conjunto de datos, como todas las páginas web en 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 y carga (ETL),
  4. es capaz de almacenar datos en cualquier punto durante una canalización ,
  5. declara planes de ejecución ,
  6. Admite divisiones de canalizaciones, lo que permite que los flujos de trabajo avancen a lo largo de DAG en lugar de canalizaciones estrictamente secuenciales.

Por otra parte, se ha sostenido que los DBMS son sustancialmente más rápidos que el sistema MapReduce una vez cargados los datos, pero que la carga de los datos lleva considerablemente más tiempo en los sistemas de bases de datos. También se ha sostenido que los RDBMS ofrecen soporte listo para usar para el almacenamiento en columnas, el trabajo con datos comprimidos, índices para un acceso aleatorio eficiente a los datos y tolerancia a fallas a nivel de transacción. [10]

Pig Latin es procedimental y encaja de forma muy natural en el paradigma de pipeline, mientras que SQL es, en cambio, 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 autor de la consulta puede no tener suficiente conocimiento de los datos o la suficiente experiencia 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 formas. [11] En efecto, la programación en Pig Latin es similar a especificar un plan de ejecución de consultas, lo que facilita a los programadores controlar explícitamente el 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 incorporado para dividir un flujo de procesamiento de datos y aplicar operadores diferentes a cada subflujo. La escritura pig latin describe un gráfico acíclico dirigido (DAG) en lugar de una secuencia de comandos. [11]

La capacidad de Pig Latin de incluir código de usuario en cualquier punto del pipeline es útil para el desarrollo del pipeline. 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. ^ ab "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 de diciembre de 2018 .
  3. ^ "Funciones definidas por el usuario de Pig" . Consultado el 3 de mayo de 2013 .
  4. ^ "Yahoo Blog: Pig – El camino hacia un lenguaje de alto nivel eficiente para Hadoop". Archivado desde el original el 3 de febrero de 2016 . Consultado el 23 de mayo de 2015 .
  5. ^ "Pig into Incubation en la Apache Software Foundation". Archivado desde el 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? - Programming 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-8.OCLC 964523786  .{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( 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 desde el original el 1 de agosto de 2021 . Consultado el 1 de agosto de 2021 .
  10. ^ "Comunicaciones de ACM: MapReduce y DBMS paralelos: ¿amigos o enemigos?" (PDF) . Archivado desde el original (PDF) el 1 de julio de 2015 . Consultado el 23 de mayo de 2015 .
  11. ^ abc "Equipo de desarrollo de Yahoo Pig: comparación de Pig Latin y SQL para construir canales de procesamiento de datos". Archivado desde el original el 30 de mayo de 2015 . Consultado el 23 de mayo de 2015 .
  12. ^ "ACM SigMod 08: Pig Latin: un lenguaje no tan extraño para el procesamiento de datos" (PDF) . Consultado el 23 de mayo de 2015 .

Enlaces externos