Exemple : création d'une table HCatalog et écriture dans celle-ci avec Pig
Vous pouvez créer une table HCatalog et utiliser Apache Pig pour y écrire par le biais de HCatStorer à l'aide d'une source de données dans Amazon S3. HCatalog exige que vous désactiviez l'écriture directe ou l'opération échoue silencieusement. Définissez les configurations mapred.output.direct.NativeS3FileSystem
et mapred.output.direct.EmrFileSystem
sur false
à l'aide de la classification mapred-site
, ou manuellement depuis le shell Grunt. L'exemple suivant illustre une table créée à l'aide de l'interface de ligne de commande HCat, suivie des commandes exécutées dans le shell Grunt pour remplir la table à partir d'un fichier d'exemple de données dans Amazon S3.
Pour exécuter cet exemple, il est nécessaire de se connecter au nœud principal à l'aide de SSH.
Créez un fichier script HCatalog, wikicount.q
, avec le contenu suivant, qui crée une table HCatalog nommée wikicount
.
CREATE EXTERNAL TABLE IF NOT EXISTS wikicount( col1 string, col2 bigint ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' STORED AS ORC LOCATION 's3://
MyBucket
/hcat/wikicount';
Utilisez une commande CLI HCat pour exécuter le script depuis le fichier.
hcat -f wikicount.q
Ensuite, démarrez le shell Grunt avec l'option -useHCatalog
, définissez des configurations pour désactiver l'écriture directe, chargez les données depuis un emplacement S3, puis écrivez les résultats dans la table wikicount.
pig -useHCatalog SET mapred.output.direct.NativeS3FileSystem false; SET mapred.output.direct.EmrFileSystem false; A = LOAD 's3://support.elasticmapreduce/training/datasets/wikistats_tiny/' USING PigStorage(' ') AS (Site:chararray, page:chararray, views:int, total_bytes:long); B = GROUP A BY Site; C = FOREACH B GENERATE group as col1, COUNT(A) as col2; STORE C INTO 'wikicount' USING org.apache.hive.hcatalog.pig.HCatStorer();