Prase Apache - Apache Pig

Prasátko Apache
Logo Apache Pig
Vývojáři Apache Software Foundation , Yahoo Research
První vydání 11. září 2008 ; Před 12 lety ( 2008-09-11 )
Stabilní uvolnění
0,17,0 / 19. června 2017 ; Před 4 lety ( 2017-06-19 )
Úložiště Upravte to na Wikidata
Operační systém Microsoft Windows , OS X , Linux
Typ Analýza dat
Licence Licence Apache 2.0
webová stránka prase .apache .org

Apache Pig je platforma na vysoké úrovni pro vytváření programů, které běží na Apache Hadoop . Jazyk pro tuto platformu se nazývá prasečí latina . Pig může provádět své úlohy Hadoop v MapReduce , Apache Tez nebo Apache Spark . Pig Latin abstrahuje programování z Java MapReduce idiomu do notace, díky níž je programování MapReduce na vysoké úrovni, podobné jako u SQL pro systémy pro správu relačních databází . Pig Latin lze rozšířit pomocí uživatelsky definovaných funkcí (UDF), které může uživatel psát v jazycích Java, Python , JavaScript , Ruby nebo Groovy a poté volat přímo z jazyka.

Dějiny

Apache Pig byl původně vyvinut ve společnosti Yahoo Research kolem roku 2006, aby výzkumníci měli ad hoc způsob vytváření a spouštění úloh MapReduce na velmi velkých datových sadách. V roce 2007 byl přesunut do Apache Software Foundation .

Verze Původní datum vydání Nejnovější verze Datum vydání
Stará verze, již není udržována: 0,1 11. září 2008 0,1,1 2008-12-05
Stará verze, již není udržována: 0,2 2009-04-08 0,2,0 2009-04-08
Stará verze, již není udržována: 0,3 2009-06-25 0,3,0 2009-06-25
Stará verze, již není udržována: 0,4 2009-08-29 0,4,0 2009-08-29
Stará verze, již není udržována: 0,5 2009-09-29 0,5,0 2009-09-29
Stará verze, již není udržována: 0,6 2010-03-01 0,6,0 2010-03-01
Stará verze, již není udržována: 0,7 13. 5. 2010 0,7,0 13. 5. 2010
Stará verze, již není udržována: 0,8 17. 12. 2010 0,8,1 24. dubna 2011
Stará verze, již není udržována: 0,9 29. července 2011 0,9,2 22. 1. 2012
Stará verze, již není udržována: 0,10 22. 1. 2012 0.10.1 25. dubna 2012
Stará verze, již není udržována: 0,11 21. února 2013 0.11.1 01.04.2013
Stará verze, již není udržována: 0,12 14. 10. 2013 0.12.1 14. dubna 2014
Stará verze, již není udržována: 0,13 2014-07-04 0,13,0 2014-07-04
Stará verze, již není udržována: 0,14 20. 11. 2014 0,14,0 20. 11. 2014
Stará verze, již není udržována: 0,15 2015-06-06 0,15,0 2015-06-06
Stará verze, již není udržována: 0,16 2016-06-08 0,16,0 2016-06-08
Aktuální stabilní verze: 0,17 19. 06. 2017 0,17,0 19. 06. 2017
Legenda:
Stará verze
Starší verze, stále udržovaná
Nejnovější verze
Nejnovější verze náhledu
Budoucí vydání

Pojmenování

Pokud jde o pojmenování programovacího jazyka Pig, název byl vybrán libovolně a zasekl se, protože byl zapamatovatelný, snadno hláskovatelný a pro novost.

Příběh říká, že vědci pracující na projektu jej původně označovali jednoduše jako 'jazyk'. Nakonec tomu museli nějak říkat. Jeden výzkumník z temene hlavy navrhl Pig a jméno zůstalo. Je to zvláštní, ale nezapomenutelné a snadno se to píše. Zatímco někteří naznačili, že název zní bláznivě nebo hloupě, poskytl nám zábavnou nomenklaturu, jako je Pig Latin pro jazyk, Grunt pro shell a PiggyBank pro sdílené úložiště podobné CPAN.

-  Alan Gates, Daniel Dai, „What Is Pig?“, Programming Pig, 2. vydání (listopad 2017)

Příklad

Níže je uveden příklad programu „ Počet slov “ v prasečí latině:

 input_lines = LOAD '/tmp/my-copy-of-all-pages-on-internet' AS (line:chararray);
 
 -- Extract words from each line and put them into a pig bag
 -- datatype, then flatten the bag to get one word on each row
 words = FOREACH input_lines GENERATE FLATTEN(TOKENIZE(line)) AS word;
 
 -- filter out any words that are just white spaces
 filtered_words = FILTER words BY word MATCHES '\\w+';
 
 -- create a group for each word
 word_groups = GROUP filtered_words BY word;
 
 -- count the entries in each group
 word_count = FOREACH word_groups GENERATE COUNT(filtered_words) AS count, group AS word;
 
 -- order the records by count
 ordered_word_count = ORDER word_count BY count DESC;
 STORE ordered_word_count INTO '/tmp/number-of-words-on-internet';

Výše uvedený program vygeneruje paralelní spustitelné úlohy, které lze distribuovat na více počítačů v clusteru Hadoop a počítat počet slov v datové sadě, jako jsou všechny webové stránky na internetu.

Prase vs SQL

Ve srovnání s SQL, Pig

  1. má vnořený relační model,
  2. používá líné hodnocení ,
  3. používá výpis, transformaci, načtení (ETL),
  4. je schopen ukládat data v libovolném bodě během potrubí ,
  5. vyhlašuje prováděcí plány ,
  6. podporuje rozdělení potrubí, což umožňuje, aby pracovní toky pokračovaly po DAG namísto přísně sekvenčních potrubí.

Na druhé straně se tvrdilo, že DBMS jsou po načtení dat podstatně rychlejší než systém MapReduce, ale že načítání dat v databázových systémech trvá podstatně déle. Rovněž se tvrdilo, že nabídka RDBMS nabízí podporu úložiště sloupců, práci s komprimovanými daty, indexy pro efektivní náhodný přístup k datům a toleranci chyb na úrovni transakcí.

Pig Latin je procedurální a velmi přirozeně zapadá do paradigmatu potrubí, zatímco SQL je místo toho deklarativní . V SQL uživatelé mohou určit, že data ze dvou tabulek musí být spojena, ale ne jakou spojovací implementaci použít (Můžete zadat implementaci JOIN v SQL, tedy „... pro mnoho aplikací SQL nemusí mít zapisovač dotazů dostatečné znalosti o data nebo dostatek odborných znalostí k určení vhodného spojovacího algoritmu. “). Pig Latin umožňuje uživatelům určit implementaci nebo aspekty implementace, které mají být použity při spouštění skriptu, několika způsoby. Ve skutečnosti je programování Pig Latin podobné zadávání plánu spouštění dotazů, což programátorům usnadňuje explicitní řízení toku jejich úlohy zpracování dat.

SQL je orientován kolem dotazů, které produkují jeden výsledek. SQL zpracovává stromy přirozeně, ale nemá žádný vestavěný mechanismus pro rozdělení proudu zpracování dat a použití různých operátorů na každý dílčí proud. Prasečí latinský skript popisuje spíše směrovaný acyklický graf (DAG) než potrubí.

Schopnost Pig Latin zahrnout uživatelský kód do kteréhokoli bodu potrubí je užitečná pro vývoj potrubí. Pokud se používá SQL, musí být data nejprve importována do databáze a poté může začít proces čištění a transformace.

Viz také

Reference

externí odkazy