Анализ данных постоянно возрастающего объема
Анализ данных постоянно возрастающего объема находится в центре повседневной деятельности и формирования прибыли многих предприятий. Сегодня даже у небольших предприятий накапливаются терабайты данных. Эффективный анализ этих данных может быть ключом к их будущему успеху.
В реляционных СУБД SQL представляется как декларативный язык для манипулирования данными. Однако средства обработки запросов этих СУБД часто не справляются с такой задачей. Аналитики полагают, что SQL слишком сильно ограничивает типы запросов, которые им требуются для извлечения смысла из данных, а те, кто в меньшей степени знаком с декларативным SQL, желают иметь возможность запрашивать данные с использованием более привычных для них процедурных языков. Наконец, в реализациях реляционных СУБД присутствуют несовершенные оптимизаторы запросов, иногда выбирающие неудачные варианты выполнения запросов и не учитывающие варианты оптимизации, специфичные для конкретных прикладных областей. При работе с крупными данными эти неудачные варианты выбора часто обходятся очень дорого, приводя к тому, что выполнение запросов завершается аварийным образом (например, из-за исчерпания рабочей области памяти) или длится недопустимо долгое время, потребляя ценные ресурсы.
Для преодоления этих проблем во многих реляционных СУБД поддерживаются определяемые пользователями функции (User-Defined Function, UDF), в виде которых разработчик может реализовывать задачи с использованием процедурного языка. К сожалению, традиционная инфраструктура UDF разрабатывалась в расчете на один экземпляр базы данных, а параллелизм, если и добавлялся, то задним числом. Это является все более существенным недостатком, поскольку при возрастающих объемах данных требуется применять параллельный подход к обработке и управлению данными с использованием сотен серверов баз данных.
В этой статье мы представляем SQL/MapReduce (SQL/MR), новую инфраструктуру UDF, которая параллельна по своей природе и предназначена для естественного параллельного вычисления процедурных функций на сотнях серверов, работающих вместе как единая реляционная СУБД.
Описывается эффективная реализация инфраструктуры SQL/MR в массивно- параллельной реляционной СУБД nCluster компании Aster Data Systems (рис. 1). Представлены примеры приложений, которые стали возможными после появления SQL/MR. Описываемые экспериментальные результаты демонстрируют выигрыш в эффективности, обеспечиваемый SQL/MR по сравнению с "чистым" SQL.
Рис. 1. Общая схема организиции системы баз данных nCluster. Координация системы и запросов производится королевскими (queen) узлами. Данные сохраняются в рабочих (worker) узлах, в которых также производится параллельная обработка запросов. Загрузка данных ускоряется с использованием дополнительных узлов загрузки (loader).
Инфраструктура программирования MapReduce Джеффри Дина (Jeffrey Dean) и Санджая Генавата (Sanjay Ghemawat) [7] делает возможным параллельное вычисление на сотнях серверов. Эта инфраструктура разработана в расчете на использование аппаратных средств массового спроса, и в ней делается упор на отказоустойчивость, что позволяет вычислять задачи, даже если некоторые вызовы завершились аварийно. Инфрастуктура предполагает наличие распределенной файловой системы, в файлах которой находятся обрабатываемые данные, и инфраструктура обеспечивает параллелизацию вычислений над этими данными.
Мощность инфраструктуры программирования MapReduce усиливается в контексте массивно-параллельной SQL-ориентированной СУБД. Комбинация SQL/MR является исключительно эффективной:
- она позволяет SQL эффективно выполнять реляционные операции, оставляя процедурным функциями нереляционные задачи и оптимизации, специфичные для прикладной области;
- она обеспечивает согласованность вычислений, гарантируя, что функции имеют дело с согласованным состоянием данных;
- она позволяет оценочному оптимизатору принимать решения о способе выполнения запроса на основе статистики данных, а не на интуиции "времени создания запросов";
- и она дает возможность конечным пользователям компоновать собственные запросы с использованием высокоуровневых средств BI.
Мы разрабатывали SQL/ MR как инфрастуктуру UDF следующего поколения, в которой функции являются:
- самоописываемыми и динамически полиморфными – это значит, что входная схема SQL/MR-функции определяется неявным образом во время обработки запроса, и выходная схема определяется программным образом самой функцией во время выполнения запроса;
- естественным образом параллелизуемыми – как для многоядерных машин, так и для массивно-параллельных кластеров;
- поддающимися композиции, поскольку мы определяем их поведение на входе и выходе таким образом, что внешне они подобны подзапросам SQL (и, следовательно, с вызовом функции можно обращаться, как с таблицей);
- эквивалентными подзапросам, что позволяет системе применять обычную оценочную оптимизацию запросов на основе статистики и методы динамической реорганизации запросов.
В нашей реализации инфрастуктуры SQL/MR:
- функции могут организовывать структуры в своей собственной памяти и в файлах;
- легко добавляются библиотеки сторонних поставщиков, которые можно использовать для снижения трудозатрат на реализацию функций;
- при этом процессы выполнения функций содержатся в изолированной программной среде, что значительно уменьшает вероятность повреждения системы из-за неправильной работы функции.
Наша модель совместима с множеством языков программирования, включая управляемые языки (managed language, Java, C#), традиционные языки (C, C++) и скриптовые языки (Python, Ruby).
Эти особенности позволяют реализовывать SQL/MR-функции, как истинно библиотечные функции, работающие над произвольными входными данными; конкретное поведение функций определяется во время обработки запросов, в контексте которых они используются. Это позволяет экспертам разрабатывать мощные функции, которые могут затем использоваться другими людьми в иных контекстах без изменения кода. Инфраструктура SQL/MR и ее реализация делают систему nCluster компании Aster Data дружественной по отношению к приложениям.
Оставшаяся часть статьи организована следующим образом.В разд. 2 обсуждаются близкие по тематике работы. В разд. 3 и 4 рассматриваются синтаксис SQL/MR и реализация инфраструктуры. В разд. 5 демонстрируются некоторые примеры SQL/MR-функций. Экспериментальные результаты, демонстрирующие масштабируемость и производительность SQL/MR-функций, представлены в разд. 6. Разд. 6 содержит заключительные замечания.