HCatalog - Loader & Storer

Il HCatLoader e HCatStorerLe API vengono utilizzate con gli script Pig per leggere e scrivere dati nelle tabelle gestite da HCatalog. Per queste interfacce non è richiesta alcuna configurazione specifica di HCatalog.

È meglio avere una certa conoscenza degli script di Apache Pig per capire meglio questo capitolo. Per ulteriore riferimento, segui il nostro tutorial su Apache Pig .

HCatloader

HCatLoader viene utilizzato con gli script Pig per leggere i dati dalle tabelle gestite da HCatalog. Utilizzare la sintassi seguente per caricare i dati in HDFS utilizzando HCatloader.

A = LOAD 'tablename' USING org.apache.HCatalog.pig.HCatLoader();

È necessario specificare il nome della tabella tra virgolette singole: LOAD 'tablename'. Se stai utilizzando un database non predefinito, devi specificare il tuo input come "dbname.tablename'.

Il metastore Hive consente di creare tabelle senza specificare un database. Se hai creato tabelle in questo modo, il nome del database è'default' e non è richiesto quando si specifica la tabella per HCatLoader.

La tabella seguente contiene i metodi importanti e la descrizione della classe HCatloader.

Sr.No. Nome e descrizione del metodo
1

public InputFormat<?,?> getInputFormat()throws IOException

Leggere il formato di input dei dati di caricamento utilizzando la classe HCatloader.

2

public String relativeToAbsolutePath(String location, Path curDir) throws IOException

Restituisce il formato String di Absolute path.

3

public void setLocation(String location, Job job) throws IOException

Imposta la posizione in cui il lavoro può essere eseguito.

4

public Tuple getNext() throws IOException

Restituisce la tupla corrente (key e value) dal ciclo.

HCatStorer

HCatStorer viene utilizzato con gli script Pig per scrivere dati nelle tabelle gestite da HCatalog. Utilizzare la seguente sintassi per l'operazione di memorizzazione.

A = LOAD ...
B = FOREACH A ...
...
...
my_processed_data = ...

STORE my_processed_data INTO 'tablename' USING org.apache.HCatalog.pig.HCatStorer();

È necessario specificare il nome della tabella tra virgolette singole: LOAD 'tablename'. Sia il database che la tabella devono essere creati prima di eseguire lo script Pig. Se stai usando un database non predefinito, devi specificare il tuo input come'dbname.tablename'.

Il metastore Hive consente di creare tabelle senza specificare un database. Se hai creato tabelle in questo modo, il nome del database è'default' e non è necessario specificare il nome del database nel file store dichiarazione.

Per il USINGclausola, puoi avere un argomento stringa che rappresenta le coppie chiave / valore per le partizioni. Questo è un argomento obbligatorio quando si scrive su una tabella partizionata e la colonna della partizione non è nella colonna di output. I valori per le chiavi di partizione NON devono essere quotati.

La tabella seguente contiene i metodi importanti e la descrizione della classe HCatStorer.

Sr.No. Nome e descrizione del metodo
1

public OutputFormat getOutputFormat() throws IOException

Leggere il formato di output dei dati memorizzati utilizzando la classe HCatStorer.

2

public void setStoreLocation (String location, Job job) throws IOException

Imposta la posizione in cui eseguirlo store applicazione.

3

public void storeSchema (ResourceSchema schema, String arg1, Job job) throws IOException

Memorizza lo schema.

4

public void prepareToWrite (RecordWriter writer) throws IOException

Aiuta a scrivere dati in un particolare file utilizzando RecordWriter.

5

public void putNext (Tuple tuple) throws IOException

Scrive i dati della tupla nel file.

Esecuzione di maiale con HCatalog

Il maiale non preleva automaticamente i barattoli di HCatalog. Per portare i barattoli necessari, puoi usare un flag nel comando Pig o impostare le variabili d'ambientePIG_CLASSPATH e PIG_OPTS come descritto sotto.

Per portare i barattoli appropriati per lavorare con HCatalog, includi semplicemente il seguente flag:

pig –useHCatalog <Sample pig scripts file>

Impostazione di CLASSPATH per l'esecuzione

Utilizzare la seguente impostazione CLASSPATH per sincronizzare HCatalog con Apache Pig.

export HADOOP_HOME = <path_to_hadoop_install>
export HIVE_HOME = <path_to_hive_install>
export HCAT_HOME = <path_to_hcat_install>

export PIG_CLASSPATH = $HCAT_HOME/share/HCatalog/HCatalog-core*.jar:\
$HCAT_HOME/share/HCatalog/HCatalog-pig-adapter*.jar:\
$HIVE_HOME/lib/hive-metastore-*.jar:$HIVE_HOME/lib/libthrift-*.jar:\
$HIVE_HOME/lib/hive-exec-*.jar:$HIVE_HOME/lib/libfb303-*.jar:\
$HIVE_HOME/lib/jdo2-api-*-ec.jar:$HIVE_HOME/conf:$HADOOP_HOME/conf:\
$HIVE_HOME/lib/slf4j-api-*.jar

Esempio

Supponiamo di avere un file student_details.txt in HDFS con il seguente contenuto.

student_details.txt

001, Rajiv,    Reddy,       21, 9848022337, Hyderabad
002, siddarth, Battacharya, 22, 9848022338, Kolkata
003, Rajesh,   Khanna,      22, 9848022339, Delhi
004, Preethi,  Agarwal,     21, 9848022330, Pune
005, Trupthi,  Mohanthy,    23, 9848022336, Bhuwaneshwar
006, Archana,  Mishra,      23, 9848022335, Chennai
007, Komal,    Nayak,       24, 9848022334, trivendram
008, Bharathi, Nambiayar,   24, 9848022333, Chennai

Abbiamo anche uno script di esempio con il nome sample_script.pig, nella stessa directory HDFS. Questo file contiene istruzioni che eseguono operazioni e trasformazioni sustudent relazione, come mostrato di seguito.

student = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING 
   PigStorage(',') as (id:int, firstname:chararray, lastname:chararray,
   phone:chararray, city:chararray);
	
student_order = ORDER student BY age DESC;
STORE student_order INTO 'student_order_table' USING org.apache.HCatalog.pig.HCatStorer();
student_limit = LIMIT student_order 4;
Dump student_limit;
  • La prima istruzione dello script caricherà i dati nel file denominato student_details.txt come una relazione denominata student.

  • La seconda istruzione dello script disporrà le tuple della relazione in ordine decrescente, in base all'età, e la memorizzerà come student_order.

  • La terza dichiarazione memorizza i dati elaborati student_order risulta in una tabella separata denominata student_order_table.

  • La quarta istruzione dello script memorizzerà le prime quattro tuple di student_order come student_limit.

  • Infine la quinta affermazione scaricherà il contenuto della relazione student_limit.

Eseguiamo ora il file sample_script.pig come mostrato di seguito.

$./pig -useHCatalog hdfs://localhost:9000/pig_data/sample_script.pig

Ora controlla la tua directory di output (hdfs: user / tmp / hive) per l'output (part_0000, part_0001).