Grep sur plusieurs fichiers dans Hadoop Filesystem
Je suis en train de travailler avec Hadoop et j'ai besoin de trouver qui de ~100 fichiers dans mon système de fichiers Hadoop contenir une certaine chaîne de caractères.
Je peux voir les fichiers que je souhaite à la recherche comme ceci:
bash-3.00$ hadoop fs -ls /apps/mdhi-technology/b_dps/real-time
..ce qui revient à plusieurs entrées comme ceci:
-rw-r--r-- 3 b_dps mdhi-technology 1073741824 2012-07-18 22:50 /apps/mdhi-technology/b_dps/HADOOP_consolidated_RT_v1x0_20120716_aa
-rw-r--r-- 3 b_dps mdhi-technology 1073741824 2012-07-18 22:50 /apps/mdhi-technology/b_dps/HADOOP_consolidated_RT_v1x0_20120716_ab
Comment puis-je trouver lequel de ces contient la chaîne de caractères bcd4bc3e1380a56108f486a4fffbc8dc
? Une fois, je sais, je peux les modifier manuellement.
source d'informationauteur arsenal
Vous devez vous connecter pour publier un commentaire.
C'est une hadoop "système de fichiers", et non pas POSIX, donc, essayez ceci:
Cela devrait fonctionner, mais il est de série et peut être lente. Si votre cluster peut prendre la chaleur, on peut paralléliser:
Avis de la
-P 10
option pourxargs
: c'est combien de fichiers que l'on télécharge et de recherche en parallèle. Commencer bas et d'augmenter le nombre jusqu'à ce que vous saturer d'I/O disque ou de la bande passante du réseau, ce qui est pertinent dans votre configuration.MODIFIER: étant Donné que vous êtes sur SunOS (qui est un peu en état de mort cérébrale), essayez ceci:
À l'aide de
hadoop fs -cat
(ou le plus génériquehadoop fs -text
) pourrait être faisable si vous avez juste deux 1 GO de fichiers. Pour les 100 fichiers mais je voudrais utiliser le streaming-api car il peut être utilisé pour adhoc-les requêtes sans avoir à recourir à un véritable travail de mapreduce. E. g. dans votre cas, créez un scriptget_filename_for_pattern.sh
:Noter que vous devez lire l'intégralité de l'entrée, afin d'éviter de se
java.io.IOException: Stream closed
exceptions.Puis tapez les commandes
Dans les nouvelles distributions
mapred streaming
au lieu dehadoop jar $HADOOP_HOME/hadoop-streaming.jar
devrait fonctionner. Dans ce dernier cas, vous devez définir votre$HADOOP_HOME
correctement afin de trouver le pot (ou de fournir le chemin d'accès complet directement).Pour les requêtes plus simples, vous n'avez même pas besoin d'un script, mais juste peut fournir la commande de la
-mapper
paramètre directement. Mais pour rien un peu complexe, il est préférable d'utiliser un script, parce que l'obtention de la trajectoire de la droite peut être une corvée.Si vous n'avez pas besoin de réduire la phase de fournir la symbolique
NONE
paramètre à la-reduce
option (ou simplement l'utiliser-numReduceTasks 0
). Mais dans votre cas, il est utile d'avoir une réduction de phase pour la sortie consolidés en un seul fichier.