Use o Apache Pig com o Apache Hadoop no HDInsight

Saiba como usar Apache Pig com o HDInsight.

O Apache Pig é uma plataforma para criar programas para o Apache Hadoop usando uma linguagem procedural conhecida como Pig Latin. O Pig é uma alternativa ao Java para a criação de soluções de MapReduce e está incluído no Azure HDInsight. Use a tabela a seguir para descobrir várias maneiras pelas quais o Pig pode ser usado com o HDInsight:

Por que usar o Apache Pig

Um dos desafios do processamento de dados usando o MapReduce no Hadoop é implementar a lógica de processamento usando somente um mapa e uma função de redução. Em processamentos complexos, é comum você precisar dividir o processamento em várias operações de MapReduce e depois encadeá-las para atingir o resultado desejado.

O Pig permite que você defina o processamento como uma série de transformações pelas quais os dados fluem para produzir a saída desejada.

A linguagem do Pig Latin permite descrever o fluxo de dados a partir de dados brutos, por meio de uma ou mais transformações, para produzir a saída desejada. Os programas em Pig Latin seguem este padrão geral:

  • Carga: ler dados a serem manipulados no sistema de arquivos.

  • Transformação: manipular os dados.

  • Despejo ou armazenamento: a saída dos dados na tela ou armazenamento para processamento.

Funções definidas pelo usuário

O Pig Latin também oferece suporte a UDF (funções definidas pelo usuário), que permite que você invoque componentes externos que implementam a lógica que é difícil de modelar no Pig Latin.

Para saber mais sobre o Pig Latin, confira o Manual de referência do Pig Latin 1 e o Manual de referência do Pig Latin 2.

Dados de exemplo

O HDInsight fornece vários conjuntos de dados de exemplo, que são armazenados nos diretórios /example/data e /HdiSamples. Esses diretórios estão no armazenamento padrão do cluster. O exemplo do Pig neste documento usa o arquivo log4j de /example/data/sample.log.

Cada log dentro do arquivo consiste em uma linha de campos que contém um campo [LOG LEVEL] para mostrar o tipo e a gravidade, por exemplo:

2012-02-03 20:26:41 SampleClass3 [ERROR] verbose detail for id 1527353937

No exemplo anterior, o nível de log é ERRO.

Observação

Você também pode gerar um arquivo log4j usando a ferramenta de log Apache Log4j e carregá-lo para o blob. Consulte Carregar dados para o HDInsight para obter instruções. Para saber mais sobre como o armazenamento de blob do Azure é usado com o HDInsight, confira Usar armazenamento de blob do Azure com o HDInsight.

Exemplo de trabalho

O trabalho do Pig Latin a seguir carrega o arquivo sample.log do armazenamento padrão para o cluster HDInsight. Em seguida, ele executa uma série de transformações que resultam na contagem de quantas vezes cada nível de log ocorreu nos dados de entrada. Os resultados são gravados em STDOUT.

LOGS = LOAD 'wasb:///example/data/sample.log';
LEVELS = foreach LOGS generate REGEX_EXTRACT($0, '(TRACE|DEBUG|INFO|WARN|ERROR|FATAL)', 1)  as LOGLEVEL;
FILTEREDLEVELS = FILTER LEVELS by LOGLEVEL is not null;
GROUPEDLEVELS = GROUP FILTEREDLEVELS by LOGLEVEL;
FREQUENCIES = foreach GROUPEDLEVELS generate group as LOGLEVEL, COUNT(FILTEREDLEVELS.LOGLEVEL) as COUNT;
RESULT = order FREQUENCIES by COUNT desc;
DUMP RESULT;

A imagem a seguir mostra um resumo do que cada transformação faz aos dados.

Graphical representation of the transformations.

Executar o trabalho do Pig Latin

O HDInsight pode executar trabalhos Pig Latin utilizando vários métodos. Use a tabela a seguir para decidir qual método é o melhor para você e siga o link para obter o passo-a-passo.

Pig e SQL Server Integration Services

Também é possível usar o SSIS (SQL Server Integration Services) para executar um trabalho do Pig. O Feature Pack do Azure para SSIS fornece os seguintes componentes que funcionam com trabalhos do Pig no HDInsight.

Saiba mais sobre o Feature Pack do Azure para SSIS aqui.

Próximas etapas

Agora que você aprendeu a usar o Pig com o HDInsight, use os links abaixo para explorar outras maneiras de trabalhar com o Azure HDInsight.