|
| ||||||||||||
| ||||||||||||
|
2010 г.
SQL/MapReduce: практический подход к поддержке самоописываемых, полиморфных и параллелизуемых функций, определяемых пользователямиЭрик Фридман, Питер Павловски и Джон Кислевич
3. Синтаксис и функциональные возможностиВ этом разделе мы представляем синтаксис вызовов SQL/MR-функций из стандартных запросов SQL (подраздел 3.1), модель выполнения, обеспечиваемую SQL/MR-функциями (подраздел 3.2) и API для реализации SQL/MR-функций (подраздел 3.3). Мы также обсуждаем инсталляцию SQL/MR-функций (подраздел 3.4) и использование других файлов в ходе выполнения SQL/MR (подраздел 3.5). 3.1 Синтаксис запросовСинтаксис использования SQL/MR-функций показан на рис. 4. Вызов SQL/MR-функции может использоваться в разделе
Рис. 4. Синтаксис запроса с вызовом SQL/MR-функции. 3.1.1 РазделениеСледующим разделом вызова SQL/MR-функции является 3.1.2 СортировкаЗа разделом 3.1.3 Разделы специальных архумеентовВслед за разделом 3.1.4 Использование как отношенияРезультатом вызова SQL/MR-функции является некоторое отношение; следовательно этот результат может использоваться в разделе
Рис. 5. Вложенность вызовов SQL/MR-функций. 3.2 Модель выполненияМодель выполнения, обеспечиваемая SQL/MR-функциями, является обобщением модели MapReduce [7]. Если использовать термины MapReduce, SQL/MR-функция может быть либо отображателем (mapper), либо сжимателем (reducer), что мы назывем функцией над строками (row function) и функцией над разделами (partition function) соответственно. В SQL/MR-функциях можно реализовать оба интерфейса, если для данной функции осмысленны оба режима работы. Как показано на рис. 5, по причине интеграции SQL/MR с SQL тривиально образуется любая комбинация map и reduce SQL/MR-функций. В SQL/MR допускается любое число и любой порядок вызовов функций map и reduce, вставленных в SQL-запрос, в то время как в MapReduce можно вызвать только одну функцию map, а затем только одну функцию reduce. Модель выполнения SQL/MR разработана для использования в массивно-параллельной СУБД и поэтому должна быть по умолчанию параллельной. Экземпляры функции SQL/MR будут выполняться параллельно в каждом узле параллельной СУБД, точно так же, как в среде MapReduce в кластере выполняются задачи map и reduce. Число экземпляров SQL/MR-функции в одном рабочем узле не фиксированно. Каждый экземпляр видит некоторый уникальный набор строк, т.е. каждая строка обрабатывается только одним экземпляром SQL/MR-функции. Определения функций над строками и разделами обеспечивают их параллельное выполнение масштабируемым образом. Даже при наличии в СУБД всего одного узла инфраструктура SQL/MR остается полезной, поскольку обеспечивает полиморфные и самоописываемые UDF, которые могут распараллеливаться на нескольких процессорных ядрах. Теперь мы опишем функции над строками и разделами, а также покажем, как их модели выполнения поддерживают параллелизм.
3.3 Интерфейс программированияВ этом подразделе мы опишем интерфейс программирования. На рис. 6 показан Java-класс, реализующий SQL/MR-функцию
public class Sessionize implements PartitionFunction
{
// Constructor (called at initialization)
public Sessionize (RuntimeContract contract)
{
InputInfo inputInfo = contract.get InputInfo() ;
// Determine time column
String timeColumnName =
contract.useArgumentClause(”timecolumn”).getSingleValue();
timeColumnIndex_ = inputInfo.getColumnIndex(timeColumnName);
// Determine timeout
String timeoutValue =
contract.useArgumentClause(”timeout”).getSingleValue();
timeout_ = Integer.parseInt(timeoutValue);
// Define output columns
List
Рис. 6. Реализация повторно используемой функции sessionize с использованием Java API SQL/MR.
3.3.1 Контракт времени выполненияДля обеспечения самоописания SQL/MR-функций мы выбрали метафору контракта. Во время подготовки плана выполнения запроса оптимизатор запросов nCluster заполняет некоторые поля объекта контракт времени выполнения, такие как имена и типы столбцов входной таблицы, имена и значения разделов аргументов. Эта неполная информация затем во время подготовки плана передается подпрограмме инициализации SQL/MR-функции. Конструктор должен завершить контракт, заполнив дополнительные поля, такие как схема результата, и затем вызвать метод При использовании традиционных UDF также имеется некоторая разновидность контракта: при инсталляции функции должны быть явно объявлены типы ее параметров и возвращаемого значения (в операции Справочная информация. Поскольку согласование контракта и, следовательно, определение схемы результата происходит во время подготовки плана выполнения запроса, полезно предоставить создателю запроса средства обнаружения схемы результата вызова интересующей его SQL/MR-функции. Это обеспечивается за счет использования самоописываемой природы SQL/MR-функций, а также описанного выше свойства детерминированности согласования контракта. Подобно тому, как во многих инструментах командной строки имеется опция "help", разработчики SQL/MR-функций снабжаются справочной информацией через соответствующий API. Обеспечивается информация об обязательных и необязательных разделах аргумеентов, а также о схеме результата при заданной схеме входной таблицы. Валидация разделов аргументов. SQL/MR автоматически гарантирует, что в запросе определяются разделы аргументов вызова функции, совместимые с ее реализацией: если некоторый раздел аргументов присутствует в вызове, но не используется в реализации, или если функция пытается обращаться к разделу аргументов, отсутствующему в вызове, то пользователю направляется сообщение об ошибке. Например, оба раздела аргументов, заданные в запросе с рис. 3, используются конструктором 3.3.2 Функции для обработки данныхНаиболее важными в API являются методы На рис. 6 показана реализация функции 3.3.3 Функции-комбинаторыОдна из оптимизаций в реализации MapReduce компании Google [7] состоит в поддержке функций-комбинаторов. Функции-комбинаторы уменьшают объем данных, которые требуется передавать по сети, путем комбинирования (вычисления агрегатов) строк в локальных разделах. Использование комбинатора является чистой оптимизацией; это не влияет на окончательный результат вычислений. В SQL/MR комбинирование поддерживается как опция при реализации функции над разделами. В некоторых случаях требуется передача данных по сети для формирования входных разделов для функций над разделами. Если в функции над разделами реализуется необязательный интерфейс для комбинирования, оптимизатор запросов при построении плана запроса может принять решение воспользоваться возможностью комбинирования до передачи данных по сети, сокращая число строк, которые придется передавать. Мы осознанно из-за особенностей использования представляем средство комбинирование как деталь функции над разделами, а не как специальную разновидность функции. С точки зрения пользователя, составляющего запрос с вызовом функции над разделами, выполнение комбинирование не вносит какого-либо изменения в семантику. По этой причине мы оставили комбинирование деталью реализации, которая может приниматься во внимание разработчиком SQL/MR-функции, но является прозрачной для пользователей функции. 3.3.4 Скользящие агрегатыВ SQL/MR имеется механизм для вычисления в SQL/MR-функции скользящих SQL-агрегатов над данными. Это позволяет функции обеспечивать для своих пользователей полный набор знакомых SQL-агрегатов с минимальными усилиями. Функция может запросить новый скользящий агрегат по имени и типу (например, 3.4 Инсталляция SQL/MR-функцииЧтобы начать использовать некоторую SQL/MR-функцию, ее необходимо инсталлировать. Мы используем общее средство установки файлов (описываемое в подразделе 3.5) для загрузки и контролирования файла, содержащего выполняемый код. После установки файла система анализирует его содержимое, чтобы определить, является ли оно функцией. Поскольку функции являются самоописываемыми, не требуется какое-либо конфигурирование или выполнение оператора В действительности файлы функции могут содержаться в 3.5 Инсталлируемые файлы и временные каталогиДля содействия распространению конфигурационных файлов и других вспомогательных файлов данных система позволяет пользователям инсталлировать произвольные файлы, а не только файлы функций. При установке файла он реплицируется на всех рабочих узлах, что обеспечивает возможность его чтения SQL/MR-функциями. Каждой функции также предоставляется некоторый временный каталог, который очищается после завершения выполнения функции, и использование которого отслеживается при выполнении функции. Мы обнаружили, что эти возможности полезны для распространения конфигурационных файлов, статических файлов данных, содержащих, например, словари, а также для инсталляции бинарных файлов, которые затем могут выполняться в некоторой SQL/MR-функции. В последнем сценарии использования упор делается на удобство использования: в некоторых случаях оказывается возможным быстро поместить существующие C-программы в бинарной форме в среду параллельного выполнения без серьезных трудозатрат на преобразование этих программ в библиотеки со строго определеными API. |
|
CITForum © 1997–2025