Азза Абузейд, Камил Байда-Павликовски, Дэниэль Абади, Ави Зильбершац, Александр Разин
Перевод: Сергей Кузнецов
Мы проводили свои эксперименты на "крупных" экземплярах Amazon EC2 (зона us-east-1b). В каждом экземпляре имелось 7,5 гигабайт основной памяти, 4 вычислительных блока EC2 (2 виртуальных ядра), 850 гигабайт дисковой памяти (2 × 420 гигабайт плюс 10-гигабайтный корневой раздел). В качестве операционной системы использовалась 64-битная Linux Fedora 8.
Поначалу производительность дискового ввода-вывода в узлах EC2 была довольно низкой (25 мегабайт в секунду). Впоследствии мы инициализировали в каждом узле некоторое дополнительное дисковое пространство, чтобы это исходное замедление не сказывалось на скорости записи промежуточных файлов и результатов задач. После инициализации этого дискового пространства последующие операции записи выполнялись гораздо быстрее (86 мегабайт в секунду). Скорость сети составляла примерно 100-110 мегабайт в секунду. Каждая задача выполнялась по три раза, и фиксировались средние результаты. Окончательные результаты запросов, выполняемых в параллельных системах баз данных, отправлялись из команды shell в файл через программный канал (pipe). Hadoop и HadoopDB сохраняли результаты в HDFS. В этом разделе мы приводим результаты только тех прогонов, в которых все узлы были доступными, работали корректно, и во время выполнения тестов отсутствовали одновременно выполняемые задачи (в разд. 7 мы отказываемся от этих требований). Для каждой задачи производительность измерялась на кластерах из 10, 50 и 100 узлов.
Для каждого прогона мы сохраняли все входные данные и результаты в HDFS без репликации (в разд. 7 мы добавляем репликацию). После прогона тестов на кластере конкретного размера мы удаляли во всех узлах каталоги данных, заново форматировали и загружали HDFS, чтобы обеспечить равномерное распределение данных между всеми узлами.
Мы представляем результаты как для Hadoop с кодированием вручную, так и для Hadoop с использованием Hive (т.е. планы Hadoop генерировались автоматически на основе SQL-интерфейса Hive). Эти результаты для Hadoop на диаграммах показаны путем разделения соответствующих столбцов на две части. В нижней части показано время, затраченное Hadoop при выполнении заданий, которые кодировались вручную, а верхняя часть демонстрирует дополнительные накладные расходы, затраченные на автоматическую генерацию плана системой Hive, а также на вызовы функций и динамическое разрешение типов данных через Java Reflection API при обработке каждого кортежа в задании, код которого получен путем использования Hive.
Как и в случае Hadoop, мы представляем результаты для HadoopDB при выполнении планов, закодированных вручную, и планов, полученных за счет использования SMS. Эти результаты для HadoopDB на диаграммах показаны путем разделения соответствующих столбцов на две части. В нижней части показано время, затраченное HadoopDB при выполнении планов, которые кодировались вручную, а в верхней части демонстрируются дополнительные накладные расходы, порожденные планировщиком SMS (в частности, расходы на сериализацию данных, выбираемых из основной базы данных, и на их десериализацию перед дальнейшей обработкой в Hadoop).
У системы Vertica имеется "облачная" редакция, которую мы и использовали в экспериментах, описываемых в этой статье. Vertica использовалась для сравнения производительности систем и в предыдущем исследовании [23] на том же тестовом наборе, поэтому мы конфигуривали эту систему таким же образом, как и раньше 6. Таким образом, у Vertica имелась следующая конфигурация. Все данные были сжаты, и Vertica работала прямо со сжатыми данными. Первичные индексы реализовывались путем сортировки таблиц по индексному атрибуту. Параметры конфигурирования Vertica, используемые по умолчанию, не изменялись.
4 Нам известно правило для авторов, запрещающее использовать ссылки на литературу в качестве имен существительных. Однако для экономиии места здесь мы используем [23] не как ссылку, а как сокращенную форму выражения "статья Павло и др. из трудов конференции SIGMOD 2009".
5 Сначала мы экспериментировали с MySQL (уровень хранения MyISAM). Однако мы обнаружили, что хотя простые сканирования таблиц выполнялись на 30% быстрее, более сложные запросы обрабатывались намного медленнее из-за отсутствия кластеризованных индексов и слабых алгоритмов соединения.
6 На самом деле, мы попросили того же человека, который пропускал запросы на Vertica в предыдущем исследовании, пропустить те же запросы в среде EC2.
7 В своих экспериментах мы использовали более позднюю версию Vertica, чем в [23]. Замедление в среде EC2 по-преднему сохранилось в пределах 10-15%.