Апачская свинья
Разработчик(и) | Фонд программного обеспечения Apache , Yahoo Research |
---|---|
Первоначальный выпуск | 11 сентября 2008 г |
Стабильная версия | 0.17.0 / 19 июня 2017 г |
Репозиторий | |
Операционная система | Microsoft Windows , OS X , Linux |
Тип | Аналитика данных |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | свинья |
Апачская свинья [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] а потом звонить прямо с языка.
История
[ редактировать ]Свинья Апач изначально была [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 Latin для языка, Grunt для оболочки и PiggyBank для общего репозитория, подобного CPAN.
- Алан Гейтс, Дэниел Дай, «Что такое свинья?», Programming Pig, 2-е издание (ноябрь 2017 г.)
Пример
[ редактировать ]Ниже приведен пример программы « Счет слов » на свиной латыни:
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';
Вышеупомянутая программа будет генерировать параллельные исполняемые задачи, которые можно распределить по нескольким машинам в кластере Hadoop для подсчета количества слов в наборе данных, например, на всех веб-страницах в Интернете.
Свинья против SQL
[ редактировать ]По сравнению с SQL, Pig
- имеет вложенную реляционную модель,
- использует ленивую оценку ,
- использует извлечение, преобразование, загрузку (ETL),
- способен хранить данные в любой точке конвейера ,
- объявляет планы выполнения ,
- поддерживает разделение конвейеров, что позволяет рабочим процессам выполняться по группам 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]
См. также
[ редактировать ]- Улей Апачей
- Sawzall — аналогичный инструмент от Google
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Hadoop: Apache Pig» . Проверено 2 сентября 2011 г.
- ^ «[PIG-4167] Первоначальная реализация Pig on Spark — ASF JIRA» . Issues.apache.org . Проверено 29 декабря 2018 г.
- ^ «Пользовательские функции Pig» . Проверено 3 мая 2013 г.
- ^ «Блог Yahoo: Pig — путь к эффективному языку высокого уровня для Hadoop» . Архивировано из оригинала 3 февраля 2016 года . Проверено 23 мая 2015 г.
- ^ «Свинья в инкубаторе Apache Software Foundation» . Архивировано из оригинала 3 февраля 2016 года . Проверено 23 мая 2015 г.
- ^ «Релизы Apache Pig» . Апач . Проверено 13 марта 2019 г.
- ^ «1. Что такое свинья? - Программирование свиньи, 2-е издание [Книга]» . www.oreilly.com . Проверено 1 августа 2021 г.
- ^ Гейтс, Алан (2016). Программирующая свинья . Дэниел Дай (Второе изд.). Севастополь, Калифорния. ISBN 978-1-4919-3706-8 . OCLC 964523786 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Гейтс, Алан (27 июля 2021 г.). «Вопросы о талисмане свиньи» . Список рассылки пользователей Pig (список рассылки). Архивировано из оригинала 1 августа 2021 года . Проверено 1 августа 2021 г.
- ^ «Коммуникации ACM: MapReduce и параллельные СУБД: друзья или враги?» (PDF) . Архивировано из оригинала (PDF) 1 июля 2015 года . Проверено 23 мая 2015 г.
- ^ Перейти обратно: а б с «Команда разработчиков Yahoo Pig: сравнение Pig Latin и SQL для построения конвейеров обработки данных» . Архивировано из оригинала 30 мая 2015 года . Проверено 23 мая 2015 г.
- ^ «ACM SigMod 08: Свиная латынь: не совсем иностранный язык для обработки данных» (PDF) . Проверено 23 мая 2015 г.