HCatalog - Cargador y almacenador

los HCatLoader y HCatStorerLas API se utilizan con scripts de Pig para leer y escribir datos en tablas administradas por HCatalog. No se requiere ninguna configuración específica de HCatalog para estas interfaces.

Es mejor tener algunos conocimientos sobre los scripts de Apache Pig para comprender mejor este capítulo. Para obtener más información, consulte nuestro tutorial de Apache Pig .

HCatloader

HCatLoader se usa con scripts Pig para leer datos de tablas administradas por HCatalog. Utilice la siguiente sintaxis para cargar datos en HDFS con HCatloader.

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

Debe especificar el nombre de la tabla entre comillas simples: LOAD 'tablename'. Si está utilizando una base de datos no predeterminada, debe especificar su entrada como 'dbname.tablename'.

El metastore de Hive le permite crear tablas sin especificar una base de datos. Si creó tablas de esta manera, entonces el nombre de la base de datos es'default' y no es necesario al especificar la tabla para HCatLoader.

La siguiente tabla contiene los métodos importantes y la descripción de la clase HCatloader.

No Señor. Nombre y descripción del método
1

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

Lea el formato de entrada de los datos de carga utilizando la clase HCatloader.

2

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

Devuelve el formato String del Absolute path.

3

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

Establece la ubicación donde se puede ejecutar el trabajo.

4

public Tuple getNext() throws IOException

Devuelve la tupla actual (key y value) del bucle.

HCatStorer

HCatStorer se usa con scripts Pig para escribir datos en tablas administradas por HCatalog. Utilice la siguiente sintaxis para la operación de almacenamiento.

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

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

Debe especificar el nombre de la tabla entre comillas simples: LOAD 'tablename'. Tanto la base de datos como la tabla deben crearse antes de ejecutar su script Pig. Si está utilizando una base de datos no predeterminada, debe especificar su entrada como'dbname.tablename'.

El metastore de Hive le permite crear tablas sin especificar una base de datos. Si creó tablas de esta manera, entonces el nombre de la base de datos es'default' y no es necesario especificar el nombre de la base de datos en el store declaración.

Para el USINGcláusula, puede tener un argumento de cadena que represente pares clave / valor para particiones. Este es un argumento obligatorio cuando está escribiendo en una tabla particionada y la columna de partición no está en la columna de salida. Los valores de las claves de partición NO se deben citar.

La siguiente tabla contiene los métodos importantes y la descripción de la clase HCatStorer.

No Señor. Nombre y descripción del método
1

public OutputFormat getOutputFormat() throws IOException

Lea el formato de salida de los datos almacenados utilizando la clase HCatStorer.

2

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

Establece la ubicación donde ejecutar esto store solicitud.

3

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

Almacene el esquema.

4

public void prepareToWrite (RecordWriter writer) throws IOException

Ayuda a escribir datos en un archivo particular usando RecordWriter.

5

public void putNext (Tuple tuple) throws IOException

Escribe los datos de la tupla en el archivo.

Ejecutando Pig con HCatalog

Pig no recoge automáticamente los frascos de HCatalog. Para traer los frascos necesarios, puede usar una bandera en el comando Pig o establecer las variables de entornoPIG_CLASSPATH y PIG_OPTS como se describe abajo.

Para traer los frascos apropiados para trabajar con HCatalog, simplemente incluya la siguiente bandera:

pig –useHCatalog <Sample pig scripts file>

Configuración de CLASSPATH para ejecución

Utilice la siguiente configuración de CLASSPATH para sincronizar 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

Ejemplo

Supongamos que tenemos un archivo student_details.txt en HDFS con el siguiente contenido.

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

También tenemos un script de muestra con el nombre sample_script.pig, en el mismo directorio HDFS. Este archivo contiene declaraciones que realizan operaciones y transformaciones en elstudent relación, como se muestra a continuación.

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 primera declaración del script cargará los datos en el archivo llamado student_details.txt como una relación llamada student.

  • La segunda declaración del guión organizará las tuplas de la relación en orden descendente, según la edad, y la almacenará como student_order.

  • La tercera declaración almacena los datos procesados. student_order da como resultado una tabla separada llamada student_order_table.

  • La cuarta declaración del script almacenará las primeras cuatro tuplas de student_order como student_limit.

  • Finalmente, la quinta declaración volcará el contenido de la relación. student_limit.

Ejecutemos ahora el sample_script.pig Como se muestra abajo.

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

Ahora, verifique su directorio de salida (hdfs: user / tmp / hive) para ver la salida (part_0000, part_0001).