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