Разработчик(и) | Apache Software Foundation , Yahoo Research |
---|---|
Первоначальный выпуск | 11 сентября 2008 г. ( 2008-09-11 ) |
Стабильный релиз | 0.17.0 / 19 июня 2017 г. ( 2017-06-19 ) |
Репозиторий |
|
Операционная система | 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.1 | 2008-09-11 | 0.1.1 | 2008-12-05 | |
Старая версия, больше не поддерживается:0.2 | 2009-04-08 | 0.2.0 | 2009-04-08 | |
Старая версия, больше не поддерживается:0.3 | 2009-06-25 | 0.3.0 | 2009-06-25 | |
Старая версия, больше не поддерживается:0,4 | 2009-08-29 | 0.4.0 | 2009-08-29 | |
Старая версия, больше не поддерживается:0,5 | 2009-09-29 | 0.5.0 | 2009-09-29 | |
Старая версия, больше не поддерживается:0,6 | 2010-03-01 | 0.6.0 | 2010-03-01 | |
Старая версия, больше не поддерживается:0,7 | 2010-05-13 | 0.7.0 | 2010-05-13 | |
Старая версия, больше не поддерживается:0,8 | 2010-12-17 | 0.8.1 | 2011-04-24 | |
Старая версия, больше не поддерживается:0.9 | 2011-07-29 | 0.9.2 | 2012-01-22 | |
Старая версия, больше не поддерживается:0.10 | 2012-01-22 | 0.10.1 | 2012-04-25 | |
Старая версия, больше не поддерживается:0.11 | 2013-02-21 | 0.11.1 | 2013-04-01 | |
Старая версия, больше не поддерживается:0,12 | 2013-10-14 | 0.12.1 | 2014-04-14 | |
Старая версия, больше не поддерживается:0,13 | 2014-07-04 | 0.13.0 | 2014-07-04 | |
Старая версия, больше не поддерживается:0,14 | 2014-11-20 | 0.14.0 | 2014-11-20 | |
Старая версия, больше не поддерживается:0,15 | 2015-06-06 | 0.15.0 | 2015-06-06 | |
Старая версия, больше не поддерживается:0,16 | 2016-06-08 | 0.16.0 | 2016-06-08 | |
Текущая стабильная версия: 0,17 | 2017-06-19 | 0.17.0 | 2017-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, Pig
С другой стороны, утверждается, что СУБД значительно быстрее, чем система 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]
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка )