Sawzall (язык программирования) - Sawzall (programming language)
Разработчик | |
---|---|
Впервые появился | 2003 |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | код |
Sawzall - это процедурный предметно-ориентированный язык программирования , используемый Google для обработки большого количества отдельных записей журнала . Sawzall был впервые описан в 2003 году, а среда выполнения szl была открыта в августе 2010 года. Однако, поскольку агрегаторы таблиц MapReduce не были выпущены, среда выполнения с открытым исходным кодом бесполезна для крупномасштабного анализа данных нескольких файлов журнала. полка. Sawzall был заменен на Lingo (входит в Go ) для большинства целей в Google.
Мотивация
Журналы серверов Google хранятся в виде больших наборов записей ( буферов протоколов ), которые разделены на множество дисков в GFS . Для выполнения вычислений с использованием журналов инженеры могут писать программы MapReduce на C ++ или Java. Программы MapReduce должны быть скомпилированы и могут быть более подробными, чем необходимо, поэтому написание программы для анализа журналов может занять много времени. Чтобы упростить написание быстрых сценариев, Роб Пайк и др. разработал язык Sawzall. Сценарий Sawzall выполняется на этапе Map в MapReduce и «передает» значения в таблицы. Затем на этапе сокращения (о котором писатель сценария не должен беспокоиться) объединяет таблицы из нескольких запусков в один набор таблиц.
В настоящее время только среда исполнения языка (которая запускает сценарий Sawzall один раз на одном входе) имеет открытый исходный код; вспомогательная программа, построенная на MapReduce, еще не выпущена.
Функции
Некоторые интересные особенности включают в себя:
- Сценарий Sawzall имеет единственный вход (запись журнала) и может выводить только путем отправки в таблицы. У скрипта не может быть других побочных эффектов.
- Сценарий может определять любое количество выходных таблиц. Типы таблиц включают:
-
collection
сохраняет каждое испущенное значение -
sum
сохраняет сумму каждого выданного значения -
maximum(n)
сохраняет только самые высокие n значений с заданным весом.
-
- Кроме того, существует несколько типов статистических таблиц, которые дают неточные результаты. Чем выше параметр n, тем точнее оценки.
-
sample(n)
дает случайную выборку из n значений из всех выданных значений -
quantile(n)
вычисляет совокупное распределение вероятностей заданных чисел. -
top(n)
дает n значений, которые, вероятно, являются наиболее частыми из выдаваемых значений. -
unique(n)
оценивает количество испускаемых уникальных значений.
-
В конструкции Sawzall эффективность и простота двигателя предпочтительнее мощности:
- Sawzall имеет статическую типизацию, и движок компилирует скрипт в x86 перед его запуском.
- Sawzall поддерживает списки, карты и структуры составных типов данных . Однако здесь нет ссылок или указателей. Все присваивания и аргументы функций создают копии. Это означает, что рекурсивные структуры данных и циклы невозможны.
- Как и C, функции могут изменять глобальные и локальные переменные, но не являются замыканиями.
Код Sawzall
Эта полная программа Sawzall считывает ввод и выдаст три результата: количество записей, сумму значений и сумму квадратов значений.
count: table sum of int; total: table sum of float; sum_of_squares: table sum of float; x: float = input; emit count <- 1; emit total <- x; emit sum_of_squares <- x * x;
Смотрите также
- Pig - аналогичный инструмент и язык для использования с Apache Hadoop
- Лесопилка (программное обеспечение)
Рекомендации
дальнейшее чтение
- С. Гемават, Х. Гобиофф, С.-Т. Леунг, Файловая система Google, в: 19-й симпозиум ACM по принципам операционных систем, материалы, 17 ACM Press, 2003, стр. 29–43.