Comment forcer STORE (écraser) à HDFS dans Pig?
Lors de l'élaboration de Porc scripts qui utilisent la MAGASIN commande que je dois supprimer le répertoire de sortie pour chaque course ou le script s'arrête et lui propose:
2012-06-19 19:22:49,680 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 6000: Output Location Validation Failed for: 'hdfs://[server]/user/[user]/foo/bar More info to follow:
Output directory hdfs://[server]/user/[user]/foo/bar already exists
Donc je suis à la recherche d'une au-Cochon solution pour supprimer automatiquement le répertoireégalement à ne pas étouffer si le répertoire est inexistante à l'heure de l'appel.
Dans le Pig Latin Référence que j'ai trouvé la commande shell invocateur fs. Malheureusement, le script Pig pauses chaque fois que quelque chose produit une erreur. Donc je ne peux pas utiliser
fs -rmr foo/bar
(j'. e. supprimer récursivement), puisqu'elle brise si le répertoire n'existe pas. Pendant un moment j'ai pensé que je peut utiliser
fs -test -e foo/bar
qui est un test et ne pas casser ou alors j'ai pensé. Cependant, Cochon de nouveau interpretes test
'code de retour sur un non-existant répertoire comme un code de la panne et les pauses.
Il y a un JIRA billet pour le Cochon projet de résoudre mon problème et ce qui suggère un paramètre facultatif REMPLACER ou FORCE_WRITE pour la MAGASIN de commande. De toute façon, je suis en utilisant le Cochon 0.8.1, par nécessité, et il n'y a pas de tels paramètres.
source d'informationauteur valid
Vous devez vous connecter pour publier un commentaire.
Enfin j'ai trouvé une solution sur grokbase. Depuis la découverte de la solution a pris trop de temps, je vais reproduire ici et d'y ajouter.
Supposons que vous souhaitez stocker votre sortie à l'aide de l'instruction
Puis, afin de supprimer le répertoire, vous pouvez appeler au début du script
Pas de ";" ou des citations nécessaire, puisque c'est une commande shell.
Je ne peux pas reproduire maintenant, mais à un certain point dans le temps j'ai un message d'erreur (quelque chose à propos des fichiers manquants) où je peux seulement supposer que rmf interféré avec map/reduce. Donc je vous recommande de mettre l'appel avant toute relation déclaration. Après les Jeux, les Registres et les valeurs par défaut devraient suffire.
Exemple:
Une fois que vous utilisez la commande fs, il y a beaucoup de façons de le faire. Pour un fichier individuel, je me suis retrouvé en ajoutant ceci au début de mes scripts:
Pour un répertoire