Apache Pig - Arquitetura
A linguagem usada para analisar dados no Hadoop usando Pig é conhecida como Pig Latin. É uma linguagem de processamento de dados de alto nível que fornece um rico conjunto de tipos de dados e operadores para realizar várias operações nos dados.
Para executar uma tarefa específica, os programadores que usam Pig, precisam escrever um script Pig usando a linguagem Pig Latin e executá-los usando qualquer um dos mecanismos de execução (Grunt Shell, UDFs, Embedded). Após a execução, esses scripts passarão por uma série de transformações aplicadas pelo Pig Framework, para produzir a saída desejada.
Internamente, o Apache Pig converte esses scripts em uma série de tarefas MapReduce e, portanto, torna a tarefa do programador mais fácil. A arquitetura do Apache Pig é mostrada abaixo.
Componentes Apache Pig
Conforme mostrado na figura, existem vários componentes na estrutura do Apache Pig. Vamos dar uma olhada nos componentes principais.
Parser
Inicialmente, os scripts do Pig são tratados pelo analisador. Ele verifica a sintaxe do script, verifica o tipo e outras verificações diversas. A saída do analisador será um DAG (gráfico acíclico direcionado), que representa as instruções Pig Latin e os operadores lógicos.
No DAG, os operadores lógicos do script são representados como nós e os fluxos de dados são representados como bordas.
Otimizador
O plano lógico (DAG) é passado para o otimizador lógico, que realiza as otimizações lógicas, como projeção e pushdown.
Compilador
O compilador compila o plano lógico otimizado em uma série de tarefas MapReduce.
Motor de execução
Por fim, as tarefas MapReduce são enviadas ao Hadoop em uma ordem classificada. Finalmente, essas tarefas MapReduce são executadas no Hadoop, produzindo os resultados desejados.
Pig Latin Data Model
O modelo de dados do Pig Latin é totalmente aninhado e permite tipos de dados não atômicos complexos, como map e tuple. A seguir, está a representação diagramática do modelo de dados do Pig Latin.
Átomo
Qualquer valor único no Pig Latin, independentemente de seus dados, é conhecido como um tipo Atom. É armazenado como string e pode ser usado como string e número. int, long, float, double, chararray e bytearray são os valores atômicos de Pig. Um dado ou um valor atômico simples é conhecido como umfield.
Example - 'raja' ou '30'
Tupla
Um registro formado por um conjunto ordenado de campos é conhecido como tupla, os campos podem ser de qualquer tipo. Uma tupla é semelhante a uma linha em uma tabela de RDBMS.
Example - (Raja, 30)
Bolsa
Uma bolsa é um conjunto não ordenado de tuplas. Em outras palavras, uma coleção de tuplas (não exclusivas) é conhecida como bolsa. Cada tupla pode ter qualquer número de campos (esquema flexível). Uma bolsa é representada por '{}'. É semelhante a uma tabela em RDBMS, mas ao contrário de uma tabela em RDBMS, não é necessário que cada tupla contenha o mesmo número de campos ou que os campos na mesma posição (coluna) tenham o mesmo tipo.
Example - {(Raja, 30), (Mohammad, 45)}
Uma bolsa pode ser um campo em uma relação; nesse contexto, é conhecido comoinner bag.
Example - {Raja, 30, {9848022338, [email protected],}}
Mapa
Um mapa (ou mapa de dados) é um conjunto de pares de valores-chave. okeyprecisa ser do tipo chararray e deve ser exclusivo. ovaluepode ser de qualquer tipo. É representado por '[]'
Example - [nome # Raja, idade # 30]
Relação
Uma relação é um saco de tuplas. As relações no Pig Latin são desordenadas (não há garantia de que as tuplas sejam processadas em qualquer ordem particular).