Apache Pig - Lettura dei dati

In generale, Apache Pig funziona su Hadoop. È uno strumento analitico che analizza grandi set di dati esistenti inHadoop File System. Per analizzare i dati utilizzando Apache Pig, dobbiamo inizialmente caricare i dati in Apache Pig. Questo capitolo spiega come caricare i dati su Apache Pig da HDFS.

Preparazione di HDFS

In modalità MapReduce, Pig legge (carica) i dati da HDFS e memorizza i risultati in HDFS. Pertanto, iniziamo HDFS e creiamo i seguenti dati di esempio in HDFS.

ID studente Nome di battesimo Cognome Telefono Città
001 Rajiv Reddy 9848022337 Hyderabad
002 siddarth Battacharya 9848022338 Calcutta
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanthy 9848022336 Bhuwaneshwar
006 Archana Mishra 9848022335 Chennai

Il set di dati sopra contiene dettagli personali come ID, nome, cognome, numero di telefono e città, di sei studenti.

Passaggio 1: verifica di Hadoop

Prima di tutto, verifica l'installazione utilizzando il comando della versione di Hadoop, come mostrato di seguito.

$ hadoop version

Se il tuo sistema contiene Hadoop e se hai impostato la variabile PATH, otterrai il seguente output:

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

Passaggio 2: avvio di HDFS

Sfoglia il file sbin directory di Hadoop e avviare yarn e Hadoop dfs (file system distribuito) come mostrato di seguito.

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

Passaggio 3: creare una directory in HDFS

In Hadoop DFS, puoi creare directory utilizzando il comando mkdir. Crea una nuova directory in HDFS con il nomePig_Data nel percorso richiesto come mostrato di seguito.

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

Passaggio 4: inserimento dei dati in HDFS

Il file di input di Pig contiene ogni tupla / record in singole righe. E le entità del record sono separate da un delimitatore (nel nostro esempio abbiamo usato“,”).

Nel file system locale, crea un file di input student_data.txt contenente i dati come mostrato di seguito.

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.

Ora sposta il file dal file system locale a HDFS usando putcomando come mostrato di seguito. (Puoi usarecopyFromLocal comando pure.)

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

Verifica del file

Puoi usare il file cat comando per verificare se il file è stato spostato nell'HDFS, come mostrato di seguito.

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

Produzione

Puoi vedere il contenuto del file come mostrato di seguito.

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

L'operatore di carico

Puoi caricare i dati in Apache Pig dal file system (HDFS / Local) usando LOAD operatore di Pig Latin.

Sintassi

L'istruzione load è composta da due parti divise dall'operatore "=". Sul lato sinistro, dobbiamo menzionare il nome della relazionewhere vogliamo memorizzare i dati e, sul lato destro, dobbiamo definire howmemorizziamo i dati. Di seguito è riportata la sintassi diLoad operatore.

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

Dove,

  • relation_name - Dobbiamo menzionare la relazione in cui vogliamo memorizzare i dati.

  • Input file path- Dobbiamo menzionare la directory HDFS in cui è archiviato il file. (In modalità MapReduce)

  • function - Dobbiamo scegliere una funzione dall'insieme di funzioni di caricamento fornite da Apache Pig (BinStorage, JsonLoader, PigStorage, TextLoader).

  • Schema- Dobbiamo definire lo schema dei dati. Possiamo definire lo schema richiesto come segue:

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

Note- Carichiamo i dati senza specificare lo schema. In tal caso, le colonne verranno indirizzate come $ 01, $ 02, ecc… (spunta).

Esempio

Ad esempio, carichiamo i dati in formato student_data.txt in Pig sotto lo schema denominato Student usando il LOAD comando.

Avvia il Pig Grunt Shell

Prima di tutto, apri il terminale Linux. Avvia la shell Pig Grunt in modalità MapReduce come mostrato di seguito.

$ Pig –x mapreduce

Avvierà il guscio di Pig Grunt come mostrato di seguito.

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>

Eseguire l'istruzione Load

Ora carica i dati dal file student_data.txt in Pig eseguendo la seguente istruzione Pig Latin nella 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 );

Di seguito è riportata la descrizione della dichiarazione di cui sopra.

Nome relazione Abbiamo archiviato i dati nello schema student.
Percorso del file di input Stiamo leggendo i dati dal file student_data.txt, che si trova nella directory / pig_data / di HDFS.
Funzione di archiviazione Abbiamo usato il PigStorage()funzione. Carica e archivia i dati come file di testo strutturato. Ci vuole un delimitatore usando il quale ogni entità di una tupla è separata, come parametro. Per impostazione predefinita, accetta "\ t" come parametro.
schema

Abbiamo archiviato i dati utilizzando il seguente schema.

colonna id nome di battesimo cognome Telefono città
tipo di dati int array di caratteri array di caratteri array di caratteri array di caratteri

Note - Il loadL'istruzione caricherà semplicemente i dati nella relazione specificata in Pig. Per verificare l'esecuzione delLoad dichiarazione, devi usare il Diagnostic Operators che vengono discussi nei prossimi capitoli.