Свинья Апачи

Программное обеспечение для анализа данных с открытым исходным кодом
Свинья Апачи
Разработчик(и)Apache Software Foundation , Yahoo Research
Первоначальный выпуск11 сентября 2008 г. ; 16 лет назад ( 2008-09-11 )
Стабильный релиз
0.17.0 / 19 июня 2017 г. ; 7 лет назад ( 2017-06-19 )
Репозиторий
  • svn.apache.org/repos/asf/pig/
Операционная системаMicrosoft Windows , OS X , Linux
ТипАналитика данных
ЛицензияЛицензия Apache 2.0
Веб-сайтсвинья.apache.org

Apache Pig [1] — это высокоуровневая платформа для создания программ, работающих на Apache Hadoop . Язык для этой платформы называется Pig Latin . [1] Pig может выполнять свои задания Hadoop в MapReduce , Apache Tez или Apache Spark . [2] Pig Latin абстрагирует программирование от идиомы Java MapReduce в нотацию, которая делает программирование MapReduce высокоуровневым, похожим на SQL для систем управления реляционными базами данных . Pig Latin можно расширить с помощью пользовательских функций (UDF), которые пользователь может писать на Java , Python , JavaScript , Ruby или Groovy [3] , а затем вызывать напрямую из языка.

История

Apache Pig был изначально [4] разработан в Yahoo Research около 2006 года для исследователей, чтобы иметь специальный способ создания и выполнения заданий MapReduce на очень больших наборах данных. В 2007 году [5] он был перемещен в Apache Software Foundation .

ВерсияПервоначальная дата выпускаПоследняя версияДата выпуска [6]
Старая версия, больше не поддерживается:0.12008-09-110.1.12008-12-05
Старая версия, больше не поддерживается:0.22009-04-080.2.02009-04-08
Старая версия, больше не поддерживается:0.32009-06-250.3.02009-06-25
Старая версия, больше не поддерживается:0,42009-08-290.4.02009-08-29
Старая версия, больше не поддерживается:0,52009-09-290.5.02009-09-29
Старая версия, больше не поддерживается:0,62010-03-010.6.02010-03-01
Старая версия, больше не поддерживается:0,72010-05-130.7.02010-05-13
Старая версия, больше не поддерживается:0,82010-12-170.8.12011-04-24
Старая версия, больше не поддерживается:0.92011-07-290.9.22012-01-22
Старая версия, больше не поддерживается:0.102012-01-220.10.12012-04-25
Старая версия, больше не поддерживается:0.112013-02-210.11.12013-04-01
Старая версия, больше не поддерживается:0,122013-10-140.12.12014-04-14
Старая версия, больше не поддерживается:0,132014-07-040.13.02014-07-04
Старая версия, больше не поддерживается:0,142014-11-200.14.02014-11-20
Старая версия, больше не поддерживается:0,152015-06-060.15.02015-06-06
Старая версия, больше не поддерживается:0,162016-06-080.16.02016-06-08
Текущая стабильная версия: 0,172017-06-190.17.02017-06-19
Легенда:
Старая версия, не поддерживается
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий релиз

Нейминг

Что касается названия языка программирования Pig, то оно было выбрано произвольно и прижилось, поскольку было запоминающимся, простым в написании и новизной. [7] [8] [9]

История гласит, что исследователи, работавшие над проектом, изначально называли его просто «языком». В конце концов им нужно было как-то его назвать. Один исследователь с ходу предложил Pig, и название прижилось. Оно причудливое, но запоминающееся и легко пишется. Хотя некоторые намекали, что название звучит застенчиво или глупо, оно дало нам занимательную номенклатуру, например Pig Latin для языка, Grunt для оболочки и PiggyBank для общего хранилища, похожего на CPAN.

—  Алан Гейтс, Дэниел Дай, «Что такое Pig?», Programming Pig, 2-е издание (ноябрь 2017 г.)

Пример

Ниже приведен пример программы « Подсчета слов » на языке Pig Latin:

 input_lines = LOAD '/tmp/my-copy-of-all-pages-on-internet' AS ( line: chararray ); -- Извлечь слова из каждой строки и поместить их в свиной мешок -- тип данных, затем сплющить мешок, чтобы получить по одному слову в каждой строке words = FOREACH input_lines GENERATE FLATTEN ( TOKENIZE ( line )) AS word; -- отфильтровать все слова, которые являются просто пробелами filtered_words = FILTER words BY word MATCHES '\\w+' ; -- создать группу для каждого слова word_groups = GROUP filtered_words BY word; -- подсчитать записи в каждой группе word_count = FOREACH word_groups GENERATE COUNT ( filtered_words ) AS count , group AS word; -- упорядочить записи по количеству ordered_word_count = ORDER word_count BY count DESC ; СОХРАНИТЬ order_word_count В '/tmp/number-of-words-on-internet' ;                                                            

Приведенная выше программа будет генерировать параллельные исполняемые задачи, которые можно распределить по нескольким машинам в кластере Hadoop для подсчета количества слов в наборе данных, например, во всех веб-страницах в Интернете.

Свинья против SQL

По сравнению с SQL, Pig

  1. имеет вложенную реляционную модель,
  2. использует ленивые вычисления ,
  3. использует извлечение, преобразование, загрузку (ETL),
  4. может хранить данные в любой точке конвейера ,
  5. объявляет планы выполнения ,
  6. поддерживает разделение конвейеров, что позволяет рабочим процессам выполняться по группам DAG, а не по строго последовательным конвейерам.

С другой стороны, утверждается, что СУБД значительно быстрее, чем система MapReduce после загрузки данных, но загрузка данных занимает значительно больше времени в системах баз данных. Также утверждается, что СУБД предлагают готовую поддержку для хранения столбцов, работу со сжатыми данными, индексы для эффективного случайного доступа к данным и отказоустойчивость на уровне транзакций. [10]

Pig Latin является процедурным и очень естественно вписывается в парадигму конвейера, в то время как SQL вместо этого является декларативным . В SQL пользователи могут указать, что данные из двух таблиц должны быть объединены, но не какую реализацию объединения использовать (Вы можете указать реализацию JOIN в SQL, таким образом, "... для многих приложений SQL автор запроса может не иметь достаточных знаний о данных или достаточного опыта, чтобы указать соответствующий алгоритм соединения".). Pig Latin позволяет пользователям указывать реализацию или аспекты реализации, которые будут использоваться при выполнении скрипта несколькими способами. [11] По сути, программирование на Pig Latin похоже на указание плана выполнения запроса, что упрощает программистам явное управление потоком их задачи обработки данных. [12]

SQL ориентирован на запросы, которые выдают один результат. SQL обрабатывает деревья естественным образом, но не имеет встроенного механизма для разделения потока обработки данных и применения различных операторов к каждому подпотоку. Скрипт Pig Latin описывает направленный ациклический граф (DAG), а не конвейер. [11]

Способность Pig Latin включать пользовательский код в любой точке конвейера полезна для разработки конвейера. Если используется SQL, данные сначала должны быть импортированы в базу данных, а затем может начаться процесс очистки и преобразования. [11]

Смотрите также

Ссылки

  1. ^ ab "Hadoop: Apache Pig" . Получено 2 сентября 2011 г. .
  2. ^ "[PIG-4167] Первоначальная реализация Pig на Spark - ASF JIRA". issues.apache.org . Получено 29.12.2018 .
  3. ^ "Pig user defined functions" . Получено 3 мая 2013 г. .
  4. ^ "Yahoo Blog:Pig – The Road to an Efficient High-level language for Hadoop". Архивировано из оригинала 3 февраля 2016 г. Получено 23 мая 2015 г.
  5. ^ "Pig into Incubation at the Apache Software Foundation". Архивировано из оригинала 3 февраля 2016 г. Получено 23 мая 2015 г.
  6. ^ "Apache Pig Releases". Apache . Получено 2019-03-13 .
  7. ^ "1. Что такое Pig? - Программирование Pig, 2-е издание [Книга]". www.oreilly.com . Получено 01.08.2021 .
  8. ^ Гейтс, Алан (2016). Programming Pig. Дэниел Дай (Второе издание). Севастополь, Калифорния. ISBN 978-1-4919-3706-8. OCLC  964523786.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  9. ^ Гейтс, Алан (2021-07-27). "Вопросы о талисмане-свинье". Pig User Mailing List (Mailing list). Архивировано из оригинала 1 августа 2021 г. . Получено 1 августа 2021 г. .
  10. ^ "Communications of the ACM: MapReduce and Parallel DBMSs: Friends or Foes?" (PDF) . Архивировано из оригинала (PDF) 1 июля 2015 г. . Получено 23 мая 2015 г. .
  11. ^ abc "Yahoo Pig Development Team: Сравнение Pig Latin и SQL для построения конвейеров обработки данных". Архивировано из оригинала 30 мая 2015 г. Получено 23 мая 2015 г.
  12. ^ "ACM SigMod 08: Pig Latin: A Not-So-Foreign Language for Data Processing" (PDF) . Получено 23 мая 2015 г.
  • Официальный сайт
Взято с "https://en.wikipedia.org/w/index.php?title=Apache_Pig&oldid=1098415878"