Professional Documents
Culture Documents
МЗОВД 04
МЗОВД 04
Apache Pig складається з мови потоку даних, Pig Latin та середовища для
виконання Pig коду. Основною перевагою Pig є використання можливостей
MapReduce у розподіленій системі разом з спрощенням розробки та
виконання завдання MapReduce. Інструкції для Pig переводяться за
лаштунками в одне або кілька завдань MapReduce. Таким чином, Pig
спрощує кодування завдання MapReduce і дозволяє користувачеві швидко
розробляти, перевіряти та налагоджувати код Pig.
Pig складається з двох частин:
• Мова, яка використовується для вираження потоків даних, називається Pig
Latin.
• Середовище виконання для запуску програм Pig Latin. Наразі існує два
середовища: локальне виконання в одній JVM та розподілене виконання
на кластері Hadoop.
Pig
Pig Latin складається з серії операцій або перетворень, які
застосовуються до вхідних даних для отримання результату. В цілому
операції описують потік даних, який середовище виконання Pig
перетворює у виконуване представлення, а потім запускає.
Pig - це сценарна мова для вивчення великих наборів даних, вона
може виконати пробний запуск на репрезентативній вибірці вхідних
даних, тому можна виявити наявність помилок перед обробкою
повного набору даних.
Pig
Pig був розроблений з можливістю для розширення. Практично всі
етапи обробки можна налаштувати: завантаження, зберігання,
фільтрацію, групування та приєднання можна змінити за допомогою
визначених користувачем функцій (UDF). Ці функції працюють на
вкладеній моделі даних Pig, тому вони можуть дуже глибоко
інтегруватися з операторами Pig.
Pig
У локальному режимі Pig працює в одній JVM і отримує доступ до
локальної файлової системи. Цей режим підходить лише для
невеликих наборів даних та під час випробування Pig.
У режимі MapReduce Pig переводить запити у завдання MapReduce і
запускає їх у кластері Hadoop. Кластер може бути псевдо- або повністю
розподіленим кластером.
Pig
Існує три способи виконання програм Pig, і всі вони працюють як у
локальному режимі, так і в режимі MapReduce:
Сценарій. Pig може запускати файл сценарію, що містить команди Pig.
Наприклад, pig script.pig виконує команди в локальному файлі script.pig.
Крім того, для дуже коротких сценаріїв можна використовувати параметр -e
для запуску сценарію, зазначеного як рядок у командному рядку.
Grunt. Grunt - це інтерактивна оболонка для виконання команд Pig. Grunt
запускається, коли для запуску Pig не вказано жодного файлу, а параметр -e
не використовується. Також можна запускати сценарії Pig з Grunt за
допомогою run і exec.
Вбудований. Можна запускати програми Pig з Java за допомогою класу
PigServer. Для програмного доступу до Grunt можна використати PigRunner.
Pig
Програма для підрахунку частоти слів на Pig Latin
lines = LOAD 'Userpath/text.txt' AS (line:chararray);
DUMP wordcount;
Pig
Pig Latin складається з набору тверджень. Вираз можна розглядати як
операцію або команду.
У міру виконання програми Pig Latin кожен з операторів аналізується
по черзі. Якщо є синтаксичні помилки або інші (семантичні) проблеми,
такі як невизначені псевдоніми, інтерпретатор зупиниться і відобразить
повідомлення про помилку. Інтерпретатор будує логічний план для
кожної операції відношення, що становить ядро програми Pig Latin .
Логічний план оператора додається до логічного плану програми на
даний момент, а потім інтерпретатор переходить до наступного
оператора.
Pig
Важливо відзначити, що під час побудови логічного плану програми
обробка даних не відбувається. Тригером для того, щоб Pig розпочав
виконання, є оператор DUMP. У цей момент логічний план
компілюється у фізичний план і виконується.
Фізичний план, який готує Pig, - це ряд завдань MapReduce, які в
локальному режимі Pig виконуються в локальній JVM, а в режимі
MapReduce - Pig працює на кластері Hadoop.
Pig
Оператори для завантаження і зберігання:
LOAD - Завантажує дані з файлової системи чи іншого сховища у
відношення
STORE -Зберігає відношення до файлової системи чи іншого сховища
DUMP (\d) - Друкує відношення в консолі
Pig
Оператори для фільтрування:
FILTER Видаляє небажані рядки з відношення
DISTINCT Видаляє повторювані рядки з відношення
FOREACH…GENERATE Додає або видаляє поля до або з відношення
MAPREDUCE Запускає завдання MapReduce, використовуючи
відношення як вхідні дані
STREAM Перетворює відношення за допомогою зовнішньої
програми
SAMPLE Вибирає випадкову вибірку відношення
ASSERT Переконується, що умова є істинною для всіх рядків у
відношенні; в іншому випадку повертає fail
Pig
Оператори групування та об’єднання:
Комбінування та роз’єднання:
UNION Поєднує два або більше відношень в одне
SPLIT Розділяє відношення на два або більше відношень
Pig
Оператори для діагностування:
DESCRIBE (\de) Виводить схему відношення
EXPLAIN (\e) Виводить логічні та фізичні плани
ILLUSTRATE (\i) Показує зразок виконання логічного плану,
використовуючи згенеровану підмножину вхідних даних
Додатково:
REGISTER Реєструє файл JAR в Pig
DEFINE Створює псевдонім для макросу, функції,визначеної
користувачем, потокового сценарію або специфікації команди
IMPORT Імпортує макроси, визначені в окремому файлі, до
сценарію
Pig
Вираз - це те, що виконується для отримання значення. Вирази можна
використовувати в Pig як частину оператора. Pig має багато
різноманітних виразів, багато з яких будуть знайомі з інших мов
програмування.
Pig має типи boolean, int, long, float, double, biginteger та bigdecimal,
chararray, bytearray, datetime, tuple, bag (невпорядкована колекція
кортежів), map (множина пар ключ-значення).
Pig
Функції:
AVG Обчислює середнє значення записів у bag.
CONCAT Поєднує байтові масиви або символьні масиви.
COUNT Обчислює кількість ненульових записів у bag.
COUNT_STAR Обчислює кількість записів у bag, включаючи нульові.
DIFF Обчислює різницю множин у двох bag.
MAX Обчислює максимальне значення записів у bag.
MIN Обчислює мінімальне значення записів у bag.
SUM Обчислює суму значень записів у bag.
TOKENIZE Токенізує масив символів у bag складових слів.
Hive
Подібно до Pig, Apache Hive дозволяє користувачам обробляти дані без
явного написання коду MapReduce. Однією з ключових відмінностей
від Pig є те, що мова Hive, HiveQL (Hive Query Language), більше нагадує
мову структурованих запитів (SQL), а не мову сценаріїв.
Структура таблиці Hive складається з рядків і стовпців. Рядки зазвичай
відповідають деяким записам, транзакціям або деталізації певної
сутності (наприклад, клієнта). Значення відповідних стовпців
представляють різні атрибути або характеристики для кожного рядка.
Hadoop та його екосистема використовуються для застосування певної
структури до неструктурованих даних. Тому, якщо структуру таблиці
можна використати для перегляду цих реструктурованих даних, Hive
підходить для роботи з ними.
Hive
Крім того, користувач може використовуватиHive, якщо він має досвід
роботи з SQL і дані вже є у HDFS. Ще одним аспектом використання
Hive може бути те, як дані будуть оновлюватися або додаватися до
таблиць Hive. Якщо дані просто періодично додаватимуться до таблиці,
Hive працює добре, але якщо є необхідність оновити дані, краще
використати інший інструмент, наприклад HBase.
Хоча продуктивність Hive може бути кращою для деяких застосувань,
ніж у звичайної бази даних SQL, Hive не призначений для запитів у
режимі реального часу. Запит Hive спочатку перекладається у завдання
MapReduce, яке потім надсилається до кластера Hadoop. Таким чином,
виконання запиту має конкурувати за ресурси з будь-яким іншим
поданим завданням. Як і Pig, Hive призначений для пакетної обробки.
Hive
Hive Shell - це основний спосіб взаємодії з Hive, подаючи команди на
HiveQL. HiveQL - це мова запитів Hive, діалект SQL. Як і SQL, HiveQL, як
правило, нечутлива до регістру (за винятком порівнянь рядків).
% hive
hive -f script.q
Hive
Підрахунок частоти слів: