You are on page 1of 26

Pig

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);

words = FOREACH lines GENERATE FLATTEN(TOKENIZE(line)) as word;

grouped = GROUP words BY word;

wordcount = FOREACH grouped GENERATE group, COUNT(words);

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
Оператори групування та об’єднання:

JOIN Об'єднує два або більше відношення


COGROUP Групує дані у два або більше відношення
GROUP Групує дані в одному відношенні
CROSS Створює векторний добуток двох або більше відношень
CUBE Створює агрегації для всіх комбінацій зазначених стовпців
у відношенні
Pig
Сортування:
ORDER Сортує відношення за одним або кількома полями
RANK Призначає ранг кожному кортежу у відношенні,
опціонально спочатку відсортувавши за полями
LIMIT Обмежує розмір відношення відповідно до максимальної
кількості кортежів

Комбінування та роз’єднання:
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
Підрахунок частоти слів:

CREATE TABLE FILES (line STRING);


LOAD DATA LOCAL INPATH 'Userpath/text.txt' OVERWRITE INTO TABLE FILES;
CREATE TABLE word_counts AS
SELECT word, count(1) AS count FROM
(SELECT explode(split(line, ' ')) AS word FROM FILES)
GROUP BY word
ORDER BY word;
Hive
Hive
Типи даних: BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE,
STRING, CHAR, TIMESTAMP, DATE, ARRAY, MAP, STRUCT, UNION.
Hive впорядковує таблиці за розділами-спосіб поділу таблиці на великі
частини на основі значення стовпця розділу, наприклад дати.
Використання розділів може прискорити виконання запитів щодо
фрагментів даних. Таблиці або розділи можуть бути розділені далі на
сегменти, щоб надати додаткову структуру даних, які можуть бути
використані для більш ефективних запитів.
Hive
Сортування даних у Hive можна досягти за допомогою стандартного
оператору ORDER BY. ORDER BY виконує паралельне загальне
сортування введення. Якщо глобально відсортований результат не
потрібен - а в багатьох випадках це не так - замість цього можна
скористатися нестандартним розширенням Hive SORT BY. SORT BY видає
по одному відсортованому файлу на редуктор.
У деяких випадках потрібно контролювати, до якого редуктора йде
конкретний рядок - як правило, для виконання подвльшого
агрегування. Це можна зробити за допомогою DISTRIBUTE BY.
Hive
Іноді запит не може бути виражений легко (або взагалі) за допомогою
вбудованих функцій, які надає Hive. Для цього можливо написати
визначену користувачем функцію (UDF). UDF повинні бути написані на
Java. Для інших мов можна використовувати запит SELECT TRANSFORM,
який дозволяє передавати дані за допомогою сценарію, визначеного
користувачем.
Hive
У Hive існує три типи UDF: звичайні UDF, визначені користувачем
агреговані функції (UDAF) та визначені користувачем функції для
створення таблиць (UDTF). Вони відрізняються кількістю рядків, які
вони приймають як вхідні та видають як вихідні:
• UDF працює з одним рядком і видає один рядок як вихідний.
Більшість функцій, таких як математичні функції та рядкові функції,
належать до цього типу.
• UDAF працює з кількома вхідними рядками та створює єдиний
вихідний рядок. Агреговані функції включають такі функції, як COUNT і
MAX.
• UDTF працює з одним рядком і видає кілька рядків - таблицю - як
вихід.
Hive
UDF повинна задовольняти двом наступним властивостям:
• UDF має бути підкласом org.apache.hadoop.hive.ql.exec.UDF.
• UDF має реалізувати принаймні один метод evaluate().
Метод evaluate () не визначається інтерфейсом, оскільки він може
приймати довільну кількість аргументів довільних типів і може
повертати значення довільного типу. Hive аналізує UDF, щоб знайти
метод evaluate () , який відповідає тій функції Hive, що була викликана.
Hive
Приклад функції для видалення символів з кінця рядка

You might also like