Sawzall es un lenguaje de programación procedimental específico de dominio , 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 publicó como código abierto en agosto de 2010. [ 2 ] Sin embargo, dado que los agregadores de tablas 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 disponibles en el mercado. Sawzall ha sido reemplazado por Lingo (logs en Go ) para la mayoría de los propósitos dentro de Google. [ 4 ]
Motivación
Los registros del servidor de Google se almacenan como grandes colecciones de registros ( Protocol Buffers ) particionados en varios discos dentro de GFS . Para realizar cálculos con estos registros, los ingenieros pueden escribir programas MapReduce en C++ o Java. Los programas MapReduce deben compilarse y pueden ser más extensos 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 y otros desarrollaron el lenguaje Sawzall. Un script de Sawzall se ejecuta dentro de la fase Map de un MapReduce y "emite" valores a tablas. Luego, la fase Reduce (de la que el autor del script no tiene que preocuparse) agrega las tablas de varias ejecuciones en un único conjunto de tablas.
Actualmente, solo el entorno de ejecución del lenguaje (que ejecuta un script de Sawzall una vez sobre una sola entrada) se ha publicado como código abierto; el programa de soporte construido sobre MapReduce no se ha publicado. [ 3 ]
Características
Algunas características interesantes incluyen:
- Un script de Sawzall tiene una única entrada (un registro de log) y solo puede generar resultados escribiendo en tablas. El script no puede tener otros efectos secundarios.
- Un script puede definir cualquier número de tablas de salida. Los tipos de tabla incluyen:
collectionguarda cada valor emitidosumguarda la suma de cada valor emitidomaximum(n)Guarda únicamente los n valores más altos para un peso determinado.
- Además, existen varios tipos de tablas estadísticas que arrojan resultados inexactos. Cuanto mayor sea el parámetro n, más precisas serán las estimaciones.
sample(n)proporciona una muestra aleatoria de n valores de entre todos los valores emitidos.quantile(n)Calcula una distribución de probabilidad acumulativa de los números dados.top(n)da n valores que probablemente sean 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:
- Sawzall es un lenguaje de tipado estático, y el motor compila el script a x86 antes de ejecutarlo.
- Sawzall admite los tipos de datos compuestos listas, mapas y estructuras. Sin embargo, no admite referencias ni punteros. Todas las asignaciones y argumentos de función crean copias. Esto significa que las estructuras de datos recursivas y los ciclos son imposibles.
- Al igual que en C, las funciones pueden modificar variables globales y locales , pero no son cierres.
Código de la sierra de sable
Este programa completo para 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.
recuento: suma de la tabla de enteros; total: suma de la tabla de números flotantes; suma_de_cuadrados: tabla suma de números flotantes; x: flotante = entrada; recuento de emisiones <- 1; emitir total <- x; emitir suma_de_cuadrados <- x * x;
Véase también
- Pig : herramienta y lenguaje similares para usar con Apache Hadoop.
- Aserradero (software)
Referencias
- ↑ Rob Pike, Sean Dorward, Robert Griesemer, Sean Quinlan. Interpretación de los datos: Análisis paralelo con Sawzall.
- ↑ Proyecto de código abierto de Sawzall en Google Code .
- 1 2 Discusión sobre qué partes de Sawzall son de código abierto .
- ↑ "Reemplazando a Sawzall" . 4 de diciembre de 2015. Consultado el 18 de junio de 2018 .
Lecturas adicionales
- S. Ghemawat, H. Gobioff, S.-T. Leung, El sistema de archivos de Google, en: 19º Simposio ACM sobre Principios de Sistemas Operativos, Actas, 17 ACM Press, 2003, págs. 29–43.
Enlaces externos
- Archivo de Google Code: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code.
- MapReduce
- Lenguajes de programación específicos de dominio
- Lenguajes de programación procedimental
- Software de Google
- Lenguajes de programación creados en 2003
- Software que utiliza la licencia Apache.