HCatalog - Chargeur et stockage

le HCatLoader et HCatStorerLes API sont utilisées avec les scripts Pig pour lire et écrire des données dans les tables gérées par HCatalog. Aucune configuration spécifique à HCatalog n'est requise pour ces interfaces.

Il est préférable d'avoir des connaissances sur les scripts Apache Pig pour mieux comprendre ce chapitre. Pour plus d'informations, veuillez consulter notre tutoriel Apache Pig .

HCatloader

HCatLoader est utilisé avec les scripts Pig pour lire les données des tables gérées par HCatalog. Utilisez la syntaxe suivante pour charger des données dans HDFS à l'aide de HCatloader.

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

Vous devez spécifier le nom de la table entre guillemets simples: LOAD 'tablename'. Si vous utilisez une base de données autre que celle par défaut, vous devez spécifier votre entrée comme 'dbname.tablename'.

Le métastore Hive vous permet de créer des tables sans spécifier de base de données. Si vous avez créé des tables de cette façon, le nom de la base de données est'default' et n'est pas requis lors de la spécification de la table pour HCatLoader.

Le tableau suivant contient les méthodes importantes et la description de la classe HCatloader.

N ° Sr. Nom et description de la méthode
1

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

Lisez le format d'entrée des données de chargement à l'aide de la classe HCatloader.

2

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

Il renvoie le format String du Absolute path.

3

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

Il définit l'emplacement où le travail peut être exécuté.

4

public Tuple getNext() throws IOException

Renvoie le tuple actuel (key et value) de la boucle.

HCatStorer

HCatStorer est utilisé avec les scripts Pig pour écrire des données dans des tables gérées par HCatalog. Utilisez la syntaxe suivante pour l'opération de stockage.

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

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

Vous devez spécifier le nom de la table entre guillemets simples: LOAD 'tablename'. La base de données et la table doivent être créées avant d'exécuter votre script Pig. Si vous utilisez une base de données autre que celle par défaut, vous devez spécifier votre entrée comme'dbname.tablename'.

Le métastore Hive vous permet de créer des tables sans spécifier de base de données. Si vous avez créé des tables de cette façon, le nom de la base de données est'default' et vous n'avez pas besoin de spécifier le nom de la base de données dans le store déclaration.

Pour le USINGclause, vous pouvez avoir un argument de chaîne qui représente des paires clé / valeur pour les partitions. Il s'agit d'un argument obligatoire lorsque vous écrivez dans une table partitionnée et que la colonne de partition n'est pas dans la colonne de sortie. Les valeurs des clés de partition ne doivent PAS être entre guillemets.

Le tableau suivant contient les méthodes importantes et la description de la classe HCatStorer.

N ° Sr. Nom et description de la méthode
1

public OutputFormat getOutputFormat() throws IOException

Lisez le format de sortie des données stockées à l'aide de la classe HCatStorer.

2

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

Définit l'emplacement où exécuter ceci store application.

3

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

Stockez le schéma.

4

public void prepareToWrite (RecordWriter writer) throws IOException

Cela aide à écrire des données dans un fichier particulier à l'aide de RecordWriter.

5

public void putNext (Tuple tuple) throws IOException

Écrit les données du tuple dans le fichier.

Running Pig avec HCatalog

Pig ne prend pas automatiquement les bocaux HCatalog. Pour importer les fichiers JAR nécessaires, vous pouvez utiliser un indicateur dans la commande Pig ou définir les variables d'environnementPIG_CLASSPATH et PIG_OPTS comme décrit ci-dessous.

Pour apporter les pots appropriés pour travailler avec HCatalog, ajoutez simplement le drapeau suivant -

pig –useHCatalog <Sample pig scripts file>

Définition du CLASSPATH pour l'exécution

Utilisez le paramètre CLASSPATH suivant pour synchroniser le HCatalog avec 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

Exemple

Supposons que nous ayons un fichier student_details.txt en HDFS avec le contenu suivant.

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

Nous avons également un exemple de script avec le nom sample_script.pig, dans le même répertoire HDFS. Ce fichier contient des instructions effectuant des opérations et des transformations sur lestudent relation, comme indiqué ci-dessous.

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 première instruction du script chargera les données dans le fichier nommé student_details.txt comme une relation nommée student.

  • La deuxième instruction du script organisera les tuples de la relation dans l'ordre décroissant, en fonction de l'âge, et le stockera comme student_order.

  • La troisième instruction stocke les données traitées student_order résulte en une table distincte nommée student_order_table.

  • La quatrième instruction du script stockera les quatre premiers tuples de student_order comme student_limit.

  • Enfin, la cinquième instruction videra le contenu de la relation student_limit.

Exécutons maintenant le sample_script.pig comme indiqué ci-dessous.

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

Maintenant, vérifiez votre répertoire de sortie (hdfs: user / tmp / hive) pour la sortie (part_0000, part_0001).