Sawzall es un lenguaje de programación específico de dominio procedimental , utilizado por Google para procesar grandes cantidades de registros individuales . Sawzall se describió por primera vez en 2003, [1] y el entorno de ejecución szl se convirtió en código abierto en agosto de 2010. [2] Sin embargo, dado que los agregadores de tablas de MapReduce no se han publicado, [3] el entorno de ejecución de código abierto no es útil para el análisis de datos a gran escala de múltiples archivos de registro listos para usar. Sawzall ha sido reemplazado por Lingo (registros en Go ) para la mayoría de los propósitos dentro de Google. [4]
Los registros del servidor de Google se almacenan como grandes colecciones de registros ( buffers de protocolo ) que se dividen en varios discos dentro de GFS . Para realizar cálculos que involucren los registros, los ingenieros pueden escribir programas MapReduce en C++ o Java. Los programas MapReduce deben compilarse y pueden ser más detallados de lo necesario, por lo que escribir un programa para analizar los registros puede llevar mucho tiempo. Para facilitar la escritura de scripts rápidos, Rob Pike et al. desarrollaron el lenguaje Sawzall. Un script Sawzall se ejecuta dentro de la fase Map de un MapReduce y "emite" valores a las tablas. Luego, la fase Reduce (de la que el escritor del script no tiene que preocuparse) agrega las tablas de múltiples ejecuciones en un solo conjunto de tablas.
Actualmente, solo el entorno de ejecución del lenguaje (que ejecuta un script Sawzall una vez sobre una única entrada) ha sido publicado en código abierto; el programa de soporte creado en MapReduce no ha sido publicado. [3]
Algunas características interesantes incluyen:
collection
guarda cada valor emitidosum
guarda la suma de cada valor emitidomaximum(n)
guarda sólo los valores n más altos en un peso dado.sample(n)
da una muestra aleatoria de n valores de todos los valores emitidosquantile(n)
Calcula una distribución de probabilidad acumulativa de los números dados.top(n)
da n valores que son probablemente los más frecuentes de los valores emitidos.unique(n)
estima el número de valores únicos emitidos.El diseño de Sawzall prioriza la eficiencia y la simplicidad del motor sobre la potencia:
Este programa completo de Sawzall leerá la entrada y producirá tres resultados: el número de registros, la suma de los valores y la suma de los cuadrados de los valores.
count: suma de la tabla de int;total: suma de la tabla de float;suma_de_cuadrados: suma de la tabla de flotantes;x: float = entrada;número de emisiones <- 1;emitir total <- x;emitir suma_de_cuadrados <- x * x;