Apache Pig - Lendo Dados

Em geral, o Apache Pig funciona com base no Hadoop. É uma ferramenta analítica que analisa grandes conjuntos de dados que existem noHadoop File Ssistema Para analisar dados usando o Apache Pig, temos que carregar inicialmente os dados no Apache Pig. Este capítulo explica como carregar dados para o Apache Pig a partir do HDFS.

Preparando HDFS

No modo MapReduce, o Pig lê (carrega) dados do HDFS e armazena os resultados de volta no HDFS. Portanto, vamos iniciar o HDFS e criar os seguintes dados de amostra no HDFS.

Identidade estudantil Primeiro nome Último nome telefone Cidade
001 Rajiv Reddy 9848022337 Hyderabad
002 Sidarth Battacharya 9848022338 Calcutá
003 Rajesh Khanna 9848022339 Délhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanthy 9848022336 Bhuwaneshwar
006 Archana Mishra 9848022335 Chennai

O conjunto de dados acima contém detalhes pessoais como id, nome, sobrenome, número de telefone e cidade de seis alunos.

Etapa 1: verificar o Hadoop

Em primeiro lugar, verifique a instalação usando o comando de versão do Hadoop, conforme mostrado abaixo.

$ hadoop version

Se o seu sistema contém Hadoop, e se você configurou a variável PATH, você obterá a seguinte saída -

Hadoop 2.6.0 
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 
Compiled by jenkins on 2014-11-13T21:10Z 
Compiled with protoc 2.5.0 
From source with checksum 18e43357c8f927c0695f1e9522859d6a 
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop
common-2.6.0.jar

Etapa 2: iniciando o HDFS

Navegue pelo sbin diretório do Hadoop e iniciar yarn e Hadoop dfs (sistema de arquivos distribuído) conforme mostrado abaixo.

cd /$Hadoop_Home/sbin/ 
$ start-dfs.sh 
localhost: starting namenode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-namenode-localhost.localdomain.out 
localhost: starting datanode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-datanode-localhost.localdomain.out 
Starting secondary namenodes [0.0.0.0] 
starting secondarynamenode, logging to /home/Hadoop/hadoop/logs/hadoop-Hadoopsecondarynamenode-localhost.localdomain.out
 
$ start-yarn.sh 
starting yarn daemons 
starting resourcemanager, logging to /home/Hadoop/hadoop/logs/yarn-Hadoopresourcemanager-localhost.localdomain.out 
localhost: starting nodemanager, logging to /home/Hadoop/hadoop/logs/yarnHadoop-nodemanager-localhost.localdomain.out

Etapa 3: crie um diretório no HDFS

No Hadoop DFS, você pode criar diretórios usando o comando mkdir. Crie um novo diretório no HDFS com o nomePig_Data no caminho necessário conforme mostrado abaixo.

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/Pig_Data

Etapa 4: Colocar os dados no HDFS

O arquivo de entrada do Pig contém cada tupla / registro em linhas individuais. E as entidades do registro são separadas por um delimitador (em nosso exemplo usamos“,”)

No sistema de arquivos local, crie um arquivo de entrada student_data.txt contendo dados conforme mostrado abaixo.

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Agora, mova o arquivo do sistema de arquivos local para HDFS usando putcomando como mostrado abaixo. (Você pode usarcopyFromLocal comando também.)

$ cd $HADOOP_HOME/bin 
$ hdfs dfs -put /home/Hadoop/Pig/Pig_Data/student_data.txt dfs://localhost:9000/pig_data/

Verificando o arquivo

Você pode usar o cat comando para verificar se o arquivo foi movido para o HDFS, conforme mostrado abaixo.

$ cd $HADOOP_HOME/bin
$ hdfs dfs -cat hdfs://localhost:9000/pig_data/student_data.txt

Resultado

Você pode ver o conteúdo do arquivo conforme mostrado abaixo.

15/10/01 12:16:55 WARN util.NativeCodeLoader: Unable to load native-hadoop
library for your platform... using builtin-java classes where applicable
  
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai

O Operador de Carga

Você pode carregar dados no Apache Pig a partir do sistema de arquivos (HDFS / Local) usando LOAD operador de Pig Latin.

Sintaxe

A declaração de carga consiste em duas partes divididas pelo operador “=”. No lado esquerdo, precisamos mencionar o nome da relaçãowhere queremos armazenar os dados e, do lado direito, temos que definir hownós armazenamos os dados. Dada a seguir está a sintaxe doLoad operador.

Relation_name = LOAD 'Input file path' USING function as schema;

Onde,

  • relation_name - Temos que mencionar a relação em que queremos armazenar os dados.

  • Input file path- Devemos mencionar o diretório HDFS onde o arquivo está armazenado. (No modo MapReduce)

  • function - Temos que escolher uma função do conjunto de funções de carga fornecidas pelo Apache Pig (BinStorage, JsonLoader, PigStorage, TextLoader)

  • Schema- Temos que definir o esquema dos dados. Podemos definir o esquema necessário da seguinte forma -

(column1 : data type, column2 : data type, column3 : data type);

Note- Carregamos os dados sem especificar o esquema. Nesse caso, as colunas serão endereçadas como $ 01, $ 02, etc… (verificar).

Exemplo

Como exemplo, vamos carregar os dados em student_data.txt no Pig sob o esquema denominado Student usando o LOAD comando.

Inicie o Pig Grunt Shell

Em primeiro lugar, abra o terminal Linux. Inicie o shell Pig Grunt no modo MapReduce, conforme mostrado abaixo.

$ Pig –x mapreduce

Ele iniciará o shell Pig Grunt conforme mostrado abaixo.

15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType

2015-10-01 12:33:38,080 [main] INFO  org.apache.pig.Main - Apache Pig version 0.15.0 (r1682971) compiled Jun 01 2015, 11:44:35
2015-10-01 12:33:38,080 [main] INFO  org.apache.pig.Main - Logging error messages to: /home/Hadoop/pig_1443683018078.log
2015-10-01 12:33:38,242 [main] INFO  org.apache.pig.impl.util.Utils - Default bootup file /home/Hadoop/.pigbootup not found
  
2015-10-01 12:33:39,630 [main]
INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:9000
 
grunt>

Execute a declaração de carga

Agora carregue os dados do arquivo student_data.txt no Pig executando a seguinte instrução Pig Latin no shell Grunt.

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' 
   USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, 
   city:chararray );

A seguir está a descrição da declaração acima.

Nome da relação Nós armazenamos os dados no esquema student.
Caminho do arquivo de entrada Estamos lendo dados do arquivo student_data.txt, que está no diretório / pig_data / do HDFS.
Função de armazenamento Nós usamos o PigStorage()função. Ele carrega e armazena dados como arquivos de texto estruturados. Leva um delimitador usando o qual cada entidade de uma tupla é separada, como um parâmetro. Por padrão, leva '\ t' como parâmetro.
esquema

Armazenamos os dados usando o seguinte esquema.

coluna Eu iria primeiro nome último nome telefone cidade
tipo de dados int matriz char matriz char matriz char matriz char

Note - o loaddeclaração simplesmente carregará os dados na relação especificada no Pig. Para verificar a execução doLoad declaração, você tem que usar o Diagnostic Operators que são discutidos nos próximos capítulos.