2017-02-08 2 views
0

J'ai un travail Map uniquement qui traite un fichier texte volumineux. Chaque ligne est analysée et catégorisée. MultipleOutputs est utilisé pour sortir chaque catégorie dans des fichiers séparés. Finalement, toutes les données sont ajoutées à une table Hive dédiée à chaque catégorie. Mon flux de travail actuel fait le travail mais est un peu lourd. Je vais ajouter quelques catégories, et j'ai pensé que je pourrais peut-être rationaliser le processus. J'ai quelques idées et je cherchais des idées.Ajout des résultats d'un travail Hadoop à Hive Table

Flux de travail actuel:

  1. emploi de la carte seule divise grand fichier en catégories. La sortie ressemble à ceci:
    categ1-m-00000
    categ1-m-00001
    categ1-m-00002
    categ2-m-00000
    categ2-m-00001
    categ2- m-00002
    categ3-m-00000
    categ3-m-00001
    categ3-m-00002
  1. Un processus externe (non-Hadoop) copie les fichiers de sortie dans des répertoires distincts pour chaque catégorie.
    categ1/00000
    categ1/00001
    categ1/00002
    categ2/00000
    categ2/00001
    categ2/00002
    categ3/00000
    categ3/00001
    categ3/00002
  1. Une table externe est créée pour chaque catégorie, puis les données sont insérées dans la table Hive permanente de cette catégorie.

nouveaux flux de travail possibles

  • utilisation Spark à boucle à travers les fichiers de sortie, et en fonction du nom de fichier, insérer les données dans la table Hive permanente appropriée.
  • Utilisez HCatalog pour insérer les données dans la table Hive permanente directement depuis le mappeur, ou peut-être un réducteur ou un ensemble de réducteurs dédiés à chaque catégorie.

Répondre

0

Pour MultipleOutputs pavent la voie de sortie vers un dossier de base où vos tables externes ruche situés. Ensuite, écrivez les données dans "<table_name>/<filename_prefix>". Et vos données seront situées dans vos tables cibles.

+0

Cela a fonctionné comme un charme! Je ne peux pas croire que j'ai raté cette version de l'écriture. –