Apache Pig[1] és una plataforma d'alt nivell per crear programes que s'executen a Apache Hadoop. El llenguatge per a aquesta plataforma s'anomena Pig Latin.[1] Pig pot executar els seus treballs Hadoop a MapReduce, Apache Tez o Apache Spark.[2] Pig Latin abstraeix la programació de l'idioma Java MapReduce en una notació que permet programar en MapReduce a un nivell més elevat, similar al de SQL per a sistemes de gestió de bases de dades relacionals. Pig Latin es pot estendre utilitzant funcions definides per l'usuari (UDFs) que l'usuari pot escriure en Java, Python, JavaScript, Ruby o Groovy[3] i després cridar directament des del llenguatge.

Apache Pig

Tipusprogramari lliure Modifica el valor a Wikidata
Versió inicial11 setembre 2008 i 16 maig 2011 Modifica el valor a Wikidata
Versió estable
0.17.0 (19 juny 2017) Modifica el valor a Wikidata
Llicènciallicència Apache Modifica el valor a Wikidata
Característiques tècniques
Sistema operatiuMicrosoft Windows, macOS i Linux Modifica el valor a Wikidata
PlataformaMàquina Virtual Java Modifica el valor a Wikidata
Escrit enJava Modifica el valor a Wikidata
Equip
Desenvolupador(s)Apache Software Foundation Modifica el valor a Wikidata
Més informació
Lloc webpig.apache.org Modifica el valor a Wikidata
Stack ExchangeEtiqueta Modifica el valor a Wikidata
Seguiment d'errorsSeguiment d'errors Modifica el valor a Wikidata

Història modifica

Apache Pig va ser desenvolupat originalment[4] a Yahoo Research al voltant del 2006 perquè els investigadors tinguessin una manera ad hoc de crear i executar treballs de MapReduce en conjunts de dades molt grans. Al 2007[5] es va traslladar a la Fundació Apache Software.

Versió Data original de llançament Darrera versió Data de llançament[6]
Una versió antiga, sense suport: 0.1 2008-09-11 0.1.1 2008-12-05
Una versió antiga, sense suport: 0.2 2009-04-08 0.2.0 2009-04-08
Una versió antiga, sense suport: 0.3 2009-06-25 0.3.0 2009-06-25
Una versió antiga, sense suport: 0.4 2009-08-29 0.4.0 2009-08-29
Una versió antiga, sense suport: 0.5 2009-09-29 0.5.0 2009-09-29
Una versió antiga, sense suport: 0.6 2010-03-01 0.6.0 2010-03-01
Una versió antiga, sense suport: 0.7 2010-05-13 0.7.0 2010-05-13
Una versió antiga, sense suport: 0.8 2010-12-17 0.8.1 2011-04-24
Una versió antiga, sense suport: 0.9 2011-07-29 0.9.2 2012-01-22
Una versió antiga, sense suport: 0.10 2012-01-22 0.10.1 2012-04-25
Una versió antiga, sense suport: 0.11 2013-02-21 0.11.1 2013-04-01
Una versió antiga, sense suport: 0.12 2013-10-14 0.12.1 2014-04-14
Una versió antiga, sense suport: 0.13 2014-07-04 0.13.0 2014-07-04
Una versió antiga, sense suport: 0.14 2014-11-20 0.14.0 2014-11-20
Una versió antiga, sense suport: 0.15 2015-06-06 0.15.0 2015-06-06
Una versió antiga, sense suport: 0.16 2016-06-08 0.16.0 2016-06-08
La darrera versió estable: 0.17 2017-06-19 0.17.0 2017-06-19
Llegenda:
Versió antiga
Versió antiga, amb suport
Darrera versió
Darrera versió preliminar
Proper llançament

Nomenclatura modifica

Pel que fa a la denominació del llenguatge de programació Pig, el nom es va escollir arbitràriament i es va quedar perquè era memorable, fàcil d'escriure i de novetat.[7]

La història diu que els investigadors que treballaven en el projecte inicialment es referien a ell simplement com "la llengua". Finalment, necessitaven posar-li algun nom. De sobte a un investigador se li va ocórrer Pig i ho va suggerir, i el nom es va quedar. És extravagant, però fàcil d'escriure i de recordar. Tot i que alguns han insinuat que el nom sona tossut o estúpid, ens ha proporcionat una nomenclatura entretinguda, com ara el Pig Latin per a la llengua, Grunt per a la closca, i PiggyBank per al repositori compartit CPAN.  — Alan Gates, Daniel Dai, "What Is Pig?", Programació Pig, 2a Edició (novembre 2017)

Exemple modifica

A continuació es mostra un exemple del programa Compta Lletre en el Pig Latin:

linies_entrada = LOAD '/tmp/la-meva-còpia-de-totes-les-pàgines-en-internet' AS (linia:chararray);

-- Extreu les paraules de cada línia i les col·loca en una mena de dada "bossa" de Pig,
-- a continuació aplana la bossa per a obtenir una paraula en cada fila
paraulas = FOREACH linies_entrada GENERATE FLATTEN(TOKENIZE(linia)) AS paraula;

-- elimina qualsevol paraula que només contingui espais en blanc
paraules_filtrades = FILTER paraules BY paraula MATCHES '\\w+';

-- crear un grup per a cada paraula
grup_de_paraules = GROUP paraules_filtrades BY paraula;

-- comptar les entrades en cada grup
comptatge_de_paraules = FOREACH grup_de_paraules GENERATE COUNT(paraules_filtrades) AS comptatge, group AS paraula;

-- ordenar els registres per recompte
comptatge_de_paraules_ordenat = ORDER comptatge_de_paraules BY comptatge DESC;
STORE comptatge_de_paraules_ordenat INTO '/tmp/numero-de-paraules-en-internet';

El programa anterior generarà tasques executables paral·leles que es poden distribuir a través de diverses màquines en un clúster Hadoop per comptar el nombre de paraules en un conjunt de dades com totes les pàgines web a Internet.

Característiques modifica

  • Optimitzador de consultes per millorar el rendiment i reduir el temps d'execució.
  • Suport per a diferents tipus de dades, incloent dades estructurades i no estructurades.
  • Biblioteca de funcions integrades per manipular i transformar dades.
  • Facilitat d'ús per a usuaris sense experiència en programació en Hadoop o Java.
  • Comunitat activa de desenvolupadors i recursos disponibles en línia per suport i aprenentatge.

Pig vs SQL modifica

En comparació amb SQL, Pig

  1. té un model relacional niat
  2. fa servir una avaluació tardana
  3. utilitza extreure, transformar, carregar (ETL)
  4. és capaç d'emmagatzemar dades en qualsevol moment durant una canonada
  5. declara els plans d'execució
  6. Suporta les divisions de canonades, permetent així que els fluxos de treball avancin al llarg de DAGs en lloc de canonades estrictament seqüencials.

D'altra banda, s'ha argumentat que els DBMS són substancialment més ràpids que el sistema MapReduce una vegada que les dades es carreguen, però que la càrrega de les dades triga considerablement més en els sistemes de base de dades. També s'ha argumentat que els RDBMS ofereixen suport de serie per a l'emmagatzematge de columnes, treballant amb dades comprimides, índexs per a un accés eficient a les dades aleatòries i tolerància a errors a nivell de transacció.

Pig Latin és procedimental i encaixa de forma molt natural en el paradigma de la canonada mentre que SQL és declaratiu. En SQL, els usuaris poden especificar que les dades de dues taules s'han d'unir, però no quina implementació d'unió utilitzar (podeu especificar la implementació de JOIN a SQL, per tant "... per a moltes aplicacions SQL, l'escriptor de consultes pot no tenir prou coneixement de les dades o suficient experiència per especificar un algorisme de join apropiat"). Pig Latin permet als usuaris especificar una implementació o aspectes d'una implementació que s'utilitzaran en l'execució d'un script de diverses maneres. En efecte, la programació Pig Latin és similar a l'especificació d'un pla d'execució de consultes, facilitant als programadors controlar explícitament el flux de la seva tasca de processament de dades.

SQL s'orienta al voltant de consultes que produeixen un únic resultat. SQL maneja els arbres de forma natural, però no té cap mecanisme per dividir un flux de processament de dades i aplicar diferents operadors a cada sub-stream. L'escriptura Pig Latin descriu un graf acíclic dirigit (DAG) més que un pipeline.

La capacitat de Pig Latin d'incloure codi d'usuari en qualsevol punt de la canonada és útil per al desenvolupament de la canonada. Si s'utilitza SQL, les dades primer s'han d'importar a la base de dades, i llavors el procés de neteja i transformació pot començar.

Vegeu també modifica

Referències modifica

  1. 1,0 1,1 «Welcome to Apache Pig!». [Consulta: 20 febrer 2023].
  2. «[PIG-4167 Initial implementation of Pig on Spark - ASF JIRA]». [Consulta: 20 febrer 2023].
  3. «User Defined Functions». [Consulta: 20 febrer 2023].
  4. «Pig – The Road to an Efficient High-level language for Hadoop | hadoopnew - Yahoo», 03-02-2016. Arxivat de l'original el 2016-02-03. [Consulta: 20 febrer 2023].
  5. «Pig into Incubation at the Apache Software Foundation | hadoopnew - Yahoo», 03-02-2016. Arxivat de l'original el 2016-02-03. [Consulta: 20 febrer 2023].
  6. «Apache Pig Releases». [Consulta: 13 març 2019].
  7. «1. What Is Pig? - Programming Pig, 2nd Edition [Book]» (en anglès). [Consulta: 20 febrer 2023].

Enllaços externs modifica