HadoopDB архитектурный гибрид технологий

Hadoop


Hadoop – это версия с открытыми кодами среды MapReduce, реализованная под непосредственным влиянием идей исходной статьи про MapReduce и используемая сегодня в десятках компаний для выполнения анализа данных . В описываемых в данной статье экспериментах мы использовали систему Hadoop версии 0.19.1, выполняемую в среде Java 1.6.0. Мы устанавливали систему с несколькими изменениями в конфигурационных установках, используемых по умолчанию. Данные в HDFS сохранялись в блоках размером 256 мегабайт вместо размера в 64 мегабайта, принимаемого по умолчанию. Каждый исполнитель MR работал с кучей максимального размера в 1024 мегабайта. В каждом узле допускалось одновременное выполнение двух экземпляров Map и одного экземпляра Reduce. Мы также расширили буферное пространство для операций чтения-записи файлов и увеличили буфер сортировок до 200 мегабайт (со ста параллельными потоками для слияния). В дополнение к этому, мы изменили число параллельных пересылок, выполняемых функцией Reduce на фазе "перетасовки" (shuffle), и число рабочих потоков управления для каждого HTTP-сервера компонента TaskTracker до 50. Эти настройки соответствуют принципам организации высокопроизводительных кластеров Hadoop . Кроме того, мы допустили повторное использование JVM (Java Virtual Machine).

Для каждого прогона мы сохраняли все входные данные и результаты в HDFS без репликации (в разд. 7 мы добавляем репликацию). После прогона тестов на кластере конкретного размера мы удаляли во всех узлах каталоги данных, заново форматировали и загружали HDFS, чтобы обеспечить равномерное распределение данных между всеми узлами.

Мы представляем результаты как для Hadoop с кодированием вручную, так и для Hadoop с использованием Hive (т.е. планы Hadoop генерировались автоматически на основе SQL-интерфейса Hive). Эти результаты для Hadoop на диаграммах показаны путем разделения соответствующих столбцов на две части. В нижней части показано время, затраченное Hadoop при выполнении заданий, которые кодировались вручную, а верхняя часть демонстрирует дополнительные накладные расходы, затраченные на автоматическую генерацию плана системой Hive, а также на вызовы функций и динамическое разрешение типов данных через Java Reflection API при обработке каждого кортежа в задании, код которого получен путем использования Hive.


Система Hadoop, используемая внутри HadoopDB, конфигурировалась точно так же, как описывалось в предыдущем пункте, за исключением того, что в узлах не допускалось одновременное выполнение нескольких задач map. Кроме того, в каждом рабочем узле инсталлировалась СУБД PostreSQL 8.2.5. Объем основной памяти, используемой для разделяемых буферов, был увеличен до 512 мегабайт, а объем рабочей памяти – до 1 гигабайта. Сжатие данных в PostreSQL не применялось.

Как и в случае Hadoop, мы представляем результаты для HadoopDB при выполнении планов, закодированных вручную, и планов, полученных за счет использования SMS. Эти результаты для HadoopDB на диаграммах показаны путем разделения соответствующих столбцов на две части. В нижней части показано время, затраченное HadoopDB при выполнении планов, которые кодировались вручную, а в верхней части демонстрируются дополнительные накладные расходы, порожденные планировщиком SMS (в частности, расходы на сериализацию данных, выбираемых из основной базы данных, и на их десериализацию перед дальнейшей обработкой в Hadoop).



Содержание раздела