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.
|
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.