Sawzall (язык программирования) - Sawzall (programming language)

Sawzall
Разработчик Google
Впервые появился 2003 ; 18 лет назад ( 2003 )
Лицензия Лицензия Apache 2.0
Веб-сайт код .google .com / archive / p / szl /

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

Эта полная программа 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;

Смотрите также

Рекомендации

дальнейшее чтение

  • С. Гемават, Х. Гобиофф, С.-Т. Леунг, Файловая система Google, в: 19-й симпозиум ACM по принципам операционных систем, материалы, 17 ACM Press, 2003, стр. 29–43.

Внешние ссылки