2015 Теормин (1185421), страница 4
Текст из файла (страница 4)
Ключ: дата+инструмент+цена
Значение: NullWritable
job.setPartitionerClass(MyPartitioner.class); // hash(дата+инструмент)%R
job.setSortComparator(MySortComparator.class); // по дата,инструмент,цена
job.setGroupingComparator(MyGroupComparator); // по дата,инструмент
... protected void reduce(MyClass key, Iterable<NullWritable> values) ...
41. YARN: компоненты их свойства и взаимодействие, основные настройки. Использование YARN для Hadoop MapReduce (основные настройки). Uber task.
ResourceManager (он один) распределяет ресурсы кластера для любых типов задач.
NodeManager управляет контейнерами своего узла.
AppMaster реализует логику распределенных вычислений своего типа (например, MRAppMaster для MapReduce).
Для каждого запускаемого приложения создается отдельный AppMaster нужного типа.
Container - ресурс (ОЗУ, ядра), выделенный приложению.
Настройки – объёмы памяти, число ядер.
Uber task - задача, исполняемая в JVM MRAppMaster
42. Планирование в Hadoop. FIFO планировщик.
FIFO
43. Планирование в Hadoop. Capacity планировщик
44. Планирование в Hadoop. Fair планировщик. Вытеснение.
Вытеснение (preemption)
В конфиге:
yarn.scheduler.fair.preemption=true
Тайм-ауты (сек) вытеснения:
defaultMinSharePreemptionTimeout
minSharePreemptionTimeout
45. Отложенное планирование. Принцип Dominant Resource Fairness
Отложенное планирование - попытка откладывания решения по запросу планирования, содержащего требование к местоположению контейнера, до освобождения ресурсов с нужной локальностью.
Лекция 9
46. Hadoop Streaming. Принципы, возможности, ограничение, способиспользования. Aggregate.
Hadoop Streaming
Реализация Mapper, Reducer, Combiner на любом языке программирования (популярны Unix утилиты, Python)
Интерфейс взаимодействия - stdin, stdout
Программист ответственен за выделение ключей и значений из входных данных
Ключи и значения - текстовые, нет поддержки бинарных данных
Запуск
hadoop jar hadoop-streaming-x.x.x.jar \
-mapper mapper_aggr.py \
-reducer aggregate \
-combiner aggregate \
-files mapper_aggr.py \
-input wasb://financedata@bigdatamsu.blob.core.windows.net/ \
-output /minmax \
-numReduceTasks=10
47. Join на стороне Mapper: CompositeInputFormat
conf.setInputFormat(CompositeInputFormat.class);
String joinStatement = CompositeInputFormat.compose("inner", SequenceFileInputFormat.class, "/input");
conf.set("mapreduce.join.expr", joinStatement);
Тип значений в Mapper: org.apache.hadoop.mapreduce.lib.join.TupleWritable
Особенности
1.Входные файлы должны быть отсортированы по ключу
2.Входные файлы должны иметь одинаковое число частей (по сути, выходных файлов MapReduce задач)
3.Поддерживаются inner и outer joins.
48. Join на стороне Reducer.
Любые типы join
Накладные расходы на shuffle
Для непосредственно join внутри reduce полезна Secondary Sort
Для импорта нескольких источников используется класс:
org.apache.hadoop.mapreduce.lib.input.MultipleInputs
Отделение логики join от reduce: org.apache.hadoop.contrib.utils.join.DataJoinReducerBase
Лекция 10
49. Pig. Основные концепции и возможности, области применения. Отличия от MapReduce.
Pig – это платформа, предназначенная для анализа больших наборов данных и состоящая из языка высокого уровня для написания программ анализа данных иинфраструктуры для запуска этих программ. Язык характеризуется относительно простым синтаксисом. Написанные сценарии скрыто преобразуются в задачи MapReduce, которые исполняются на кластере Hadoop. Пользователь может добавлять свои собственные функции.
Области применения
-
Research (исследование данных)
-
Data mining (построение моделей для дальнейшего использования)
-
Reporting (построение отчетов)
Возможности Pig
-
Data Types (можно работать с различными типами данных)
-
Filter (различная фильтрация)
-
Group By (группировка по ключу)
-
Join Datasets (объединение по ключу и т.д.)
-
Sort Datasets (сортировка по различным параметрам)
-
Foreach (выполняет итерации по записям массива и преобразование данных)
-
Load (загружает данные из файловой системы)
-
Order (сортирует массив по одному или нескольким полям)
-
Split (разделяет массив на два или более массива)
50. Pig. Операторы диагностики. Понятие схемы отношения.
Операторы диагностики
-
Describe (выводит схему массива (отношения) на экран)
-
Dump (выводит содержимое массива (отношения) на экран)
-
Explain (показывает планы исполнения Map Reduce)
Схема отношения – последовательность пар “название поля: тип”
51. Pig. Режимы запуска Pig.
Pig может запускаться в следующих режимах:
-
Локально в интерактивном режиме
-
На кластере в интерактивном режиме
-
В виде скрипта
В локальном режиме код для Map Reduce не генерируется!
52. Pig Latin. Основные понятия и особенности. Операторы и массивы.
Pig Latin – относительно простой язык, выполняющий операторы.
Оператор – это процедура, принимающая входные данные (например, массив, состоящий из набора записей) и формирующая на выходе другой массив.
Массив – это структура, подобная таблице реляционной базы данных, в которой записи аналогичны строкам таблицы и состоят из полей.
53. Pig Latin. Типы данных, базовые операции, встроенные функции.
Скалярные типы данных: int, long, chararray, bytearray, double, float.
Отношение – relation (outer bag)
Bag – коллекция tuples (заключается в фигурные скобки)
Tuple – упорядоченный набор полей, заключенный в круглые скобки (кортеж)
Поле – единица данных
-
AVG
-
CONCAT
-
COUNT
-
DIFF
-
MAX
-
MIN
-
SIZE
-
SUM
-
TOKENIZE
-
IsEmpty
54. Pig. Написание скриптов. Особенности парсинга.
Парсинг
-
Проверка типов
-
Проверка ссылок
-
Генерация кода
Независимость от платформы, на которой выполняется программа
Пока не встретятся DUMP и STORE, никакие действия не будут выполняться (но будут проверяться и анализироваться)
DUMP (вывод результата на экран)
STORE (сохранение результата)
A = load './input.txt';
B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;
C = group B by word;
D = foreach C generate COUNT(B), group;
store D into './wordcount';
55. Сходства и отличия Pig, Hive и SQL.
Не знаю, надо смотреть по синтаксису.
56. Hive. Основные концепции и возможности, области применения.
Hive – это надстройка над Hadoop для того, чтобы облегчить выполнение такихзадач, как суммирование данных, непрограммируемые запросы и анализ большихнаборов данных:
- Hive может быть использован теми, кто знает язык SQL.
- Hive создает задания MapReduce, которые исполняются на кластере Hadoop.
- Определения таблиц в Hive надстраиваются над данными в HDFS.
57. Hive. Особенности Hive.
Hive не следует использовать для небольших наборов данных, т.к. даже для их обработки запрос может занять несколько минут.
Hive позволяет использовать различные форматы Hadoop-данных.
Hive хранит метаинформацию в реляционной БД.
Физически таблицы хранятся в подкаталогах каталога /user/hive/warehouse
58. Hive. Компоненты Hive.
59. Hive. Типы данных, встроенные агрегатные функции.
tinyint, smallint, int, bigint, float, double
boolen
string, binary
timestamp
array
struct
map
union
count(1) – возвращает число членов группы или число различных значений в столбце.
count(DISTINCT col)
sum(col) – возвращает сумму всех или только различных значений в столбце.
sum(DISTINCT col)
avg(col) – возвращает среднее, вычисленное по всем или только по различным значениям в столбце.
avg(DISTINCT col)
max(col) – возвращает максимальное значение в столбце.
min(col) – возвращает минимальное значение в столбце
60. Hive. Написание скриптов.
CREATE TABLE docs (line STRING);
LOAD DATA INPATH ‘docs’ OVERWRITE INTO TABLE docs;
CREATE TABLE word_counts AS
SELECT word, count (1) AS count FROM
(SELECT explode (split(line, ‘\s’)) AS word FROM docs)
GROUP BY word
ORDER BY word;
Лекция 11
61. Apache Spark. Основные компоненты, их функции и взаимодействие. Концепция RDD, преобразования и действия. Модель вычислений.
Устойчивый распределенный набор данных (Resilient Distributed Dataset, RDD)
RDD состоит из разделов (partitions), которые могут вычисляться параллельно
Преобразования RDD образуют направленный ациклический граф(DAG)
Вычисления происходят в момент обращения к действию (отложенные вычисления).
62. Apache Spark. Кеширование RDD (функции, настройки кеширования).
RDD.persist(level=MEMORY_ONLY)
RDD.cache() #MEMORY_ONLY
RDD.unpersist()
Уровень персистентности | Описание |
MEMORY_ONLY | По умолчанию*. Хранение разделов RDD в памяти. Не уместившиеся разделы пересчитываются. |
MEMORY_AND_DISK | Хранение разделов RDD в памяти. Не уместившиеся разделы сохраняются на диск. |
MEMORY_ONLY_SER | Аналогично MEMORY_ONLY, но используется сериализация (сокращение объема, увеличение процессорной нагрузки) |
MEMORY_AND_DISK_SER | Аналогично MEMORY_AND_DISK, но используется сериализация (сокращение объема, увеличение процессорной нагрузки) |
DISK_ONLY | Хранение разделов RDD на диске. |
MEMORY_ONLY_2, MEMORY_DISK_2 и т.д. | “Реплицирование” разделов на исполнителях на других узлах |
OFF_HEAP (experimental) | Общий пул памяти в Tachyon. Уменьшение GC. Раздел не теряется при сбое узла |
63. Apache Spark. Объединение нескольких RDD по ключу. Свойство RDD.partitioner.
Название | Описание |
RDD.join(other, numPartitions=None) | Внутреннее соединение. |
RDD.leftOuterJoin(other, numPartitions=None) | Левое внешнее соединение. |
RDD.rightOuterJoin(other, numPartitions=None) | Правое внешнее соединение. |
Если нет partitioner, то мы не знаем, где какие ключи физически лежат -> дольше работает.
Выгодно сделать PartitionBy.
Лекция 12
64. Apacha Spark. DataFrame и SQL.
DataFrame
Табличная структура данных, упрощающая предобработку данных в статистических пакетах.
По структуре и операциям DataFrame похож на таблицу в реляционной БД.
Отличается от таблицы в реляционной БД способом обработки данных (стат.запросов и манипуляции): вместо SQL используются конструкции ЯП.
“Классические” реализации (хранение в ОЗУ): Pandas DataFrame (Python), R DataFrame
“Альтернативные” реализации: SAS dataset
Spark SQL