Sawzall (linguagem de programação) - Sawzall (programming language)
Desenvolvedor | |
---|---|
Apareceu pela primeira vez | 2003 |
Licença | Licença Apache 2.0 |
Local na rede Internet | código |
Sawzall é uma linguagem de programação de domínio específico , usada pelo Google para processar um grande número de registros de log individuais . Sawzall foi descrito pela primeira vez em 2003, e o tempo de execução szl foi liberado em agosto de 2010. No entanto, como os agregadores de tabela MapReduce não foram lançados, o tempo de execução de código aberto não é útil para análise de dados em grande escala de vários arquivos de log. a prateleira. Sawzall foi substituído por Lingo (loga em Go ) para a maioria dos propósitos dentro do Google.
Motivação
Os registros do servidor do Google são armazenados como grandes coleções de registros ( Buffers de protocolo ) que são particionados em vários discos dentro do GFS . Para realizar cálculos envolvendo os logs, os engenheiros podem escrever programas MapReduce em C ++ ou Java. Os programas MapReduce precisam ser compilados e podem ser mais detalhados do que o necessário, portanto, escrever um programa para analisar os logs pode ser demorado. Para tornar mais fácil escrever scripts rápidos, Rob Pike et al. desenvolveu a linguagem Sawzall. Um script Sawzall é executado na fase Map de um MapReduce e "emite" valores para as tabelas. Em seguida, a fase Reduzir (com a qual o escritor do script não precisa se preocupar) agrega as tabelas de várias execuções em um único conjunto de tabelas.
Atualmente, apenas o runtime da linguagem (que executa um script Sawzall uma vez em uma única entrada) foi de código aberto; o programa de suporte construído em MapReduce não foi lançado.
Características
Alguns recursos interessantes incluem:
- Um script Sawzall tem uma única entrada (um registro de log) e pode produzir apenas emitindo para tabelas. O script não pode ter outros efeitos colaterais.
- Um script pode definir qualquer número de tabelas de saída. Os tipos de tabela incluem:
-
collection
salva todos os valores emitidos -
sum
salva a soma de todos os valores emitidos -
maximum(n)
salva apenas os valores n mais altos em um determinado peso.
-
- Além disso, existem vários tipos de tabelas estatísticas que fornecem resultados inexatos. Quanto mais alto o parâmetro n, mais precisas são as estimativas.
-
sample(n)
dá uma amostra aleatória de n valores de todos os valores emitidos -
quantile(n)
calcula uma distribuição de probabilidade cumulativa dos números fornecidos. -
top(n)
fornece n valores que são provavelmente os mais frequentes dos valores emitidos. -
unique(n)
estima o número de valores únicos emitidos.
-
O design de Sawzall favorece a eficiência e a simplicidade do motor em relação à potência:
- Sawzall é digitado estaticamente e o mecanismo compila o script para x86 antes de executá-lo.
- Sawzall oferece suporte a listas de tipos de dados compostos , mapas e estruturas. No entanto, não existem referências ou ponteiros. Todas as atribuições e argumentos de função criam cópias. Isso significa que estruturas e ciclos de dados recursivos são impossíveis.
- Como C, as funções podem modificar variáveis globais e variáveis locais, mas não são fechamentos.
Código Sawzall
Este programa Sawzall completo lerá a entrada e produzirá três resultados: o número de registros, a soma dos valores e a soma dos quadrados dos valores.
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;
Veja também
- Pig - ferramenta e linguagem semelhantes para uso com Apache Hadoop
- Serraria (software)
Referências
Leitura adicional
- S. Ghemawat, H. Gobioff, S.-T. Leung, The Google file system, em: 19th ACM Symposium on Operating Systems Principles, Proceedings, 17 ACM Press, 2003, pp. 29-43.