Sawzall — это процедурный предметно-ориентированный язык программирования , используемый Google для обработки большого количества отдельных записей журнала . Sawzall был впервые описан в 2003 году [1] , а среда выполнения szl была открыта в августе 2010 года. [2] Однако, поскольку агрегаторы таблиц MapReduce не были выпущены, [3] среда выполнения с открытым исходным кодом бесполезна для больших масштабируемый анализ данных нескольких готовых файлов журналов. Sawzall был заменен на Lingo (логи в Go ) для большинства целей в Google. [4]
Журналы сервера Google хранятся в виде больших коллекций записей ( буферов протокола ), которые распределены по множеству дисков внутри GFS . Чтобы выполнять вычисления с использованием журналов, инженеры могут писать программы MapReduce на C++ или Java. Программы MapReduce требуют компиляции и могут быть более подробными, чем необходимо, поэтому написание программы для анализа журналов может занять много времени. Чтобы упростить написание быстрых сценариев, Роб Пайк и др. разработал язык Sawzall. Сценарий Sawzall выполняется на этапе Map в MapReduce и «выдает» значения в таблицы. Затем на этапе сокращения (о котором автору сценария не нужно беспокоиться) таблицы из нескольких запусков объединяются в единый набор таблиц.
В настоящее время только среда выполнения языка (которая запускает сценарий Sawzall один раз для одного ввода) имеет открытый исходный код; вспомогательная программа, построенная на MapReduce, не была выпущена. [3]
Некоторые интересные функции включают в себя:
collection
сохраняет каждое выданное значениеsum
сохраняет сумму каждого излучаемого значенияmaximum(n)
сохраняет только самые высокие n значений заданного веса.sample(n)
дает случайную выборку из n значений из всех выданных значенийquantile(n)
вычисляет кумулятивное распределение вероятностей заданных чисел.top(n)
дает n значений, которые, вероятно, являются наиболее частыми из выдаваемых значений.unique(n)
оценивает количество выданных уникальных значений.В конструкции Sawzall предпочтение отдается эффективности и простоте двигателя, а не мощности:
Эта полная программа Sawzall прочитает входные данные и выдаст три результата: количество записей, сумму значений и сумму квадратов значений.
count: таблица суммы целых чисел;итого: таблица суммы резерва;sum_of_squares: таблица суммы с плавающей запятой;х: поплавок = ввод;количество выбросов <- 1;общее количество выбросов <- x;испускать sum_of_squares <- x * x;