8
votes

Y a-t-il l'équivalent pour une commande `Trouver` dans` Hadoop`?

Je sais que sur le terminal, on peut faire une commande trouver pour rechercher des fichiers tels que: xxx

mais, quand je suis dans le système de fichiers Hadoop , Je n'ai pas trouvé de moyen de faire cela. xxx

jette une erreur.

Comment les gens traversent les fichiers dans hadoop? J'utilise hadoop 2.6.0-CDH5.4.1 .


2 commentaires

Il "jette une erreur"? Quelle erreur? trouver est ce que je pense que la plupart des gens utilisent.


Pour les futurs demandeurs d'aide, sur Hadoop 2.6.0-CDH5.4.1 , il semble que cela ne fonctionne pas: hadoop fs -ls -r , mais Une solution raisonnable est la suivante: Hadoop FS -LS -R | Egrep


4 Réponses :


11
votes

hadoop fs -find code> a été introduit dans Apache Hadoop 2.7.0. Très probablement, vous utilisez une version plus ancienne d'où vous ne l'avez pas encore. Voir: hadoop-8989 pour plus d'informations.

Entre-temps vous pouvez Utilisez P>

hdfs dfs -ls -R <pattern>


1 commentaires

Merci. Avez-vous une idée comment utiliser l'option "/ code>" expression "? Les documents disent: Les opérateurs suivants sont reconnus: expression expression expression-et expression expression expression mais je n'ai aucune idée de ce que cela signifie. "



5
votes

Si vous utilisez la pile Cloudera, essayez l'outil de recherche:

${COMMAND} -find . -name "something" -type d ...


0 commentaires

-1
votes

Ajout de HDFSFindTool comme alias dans .bash_profile, facilitera toujours la tâche.

- Ajouter ci-dessous au profil alias hdfsfind = 'hadoop jar /opt/cloudera/parcels/cdh/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.haadoop.hdfsfindTool' alias hdfs = 'hadoop fs'

- u peut utiliser comme suit maintenant: (me utilise ici Rechercher l'outil pour obtenir le dossier de sources HDFS Nom du fichier et enregistrer des fichiers.)

$> cnt = 1; pour FF dans HDFSFind -Find /Dev/ABC/*/2018/02/16/*.CSV -TYPE F ; faire pp = echo $ {ff} | awk -f "/" {impression 7 $} '; fn = basseName $ {FF} ; fcnt = hdfs -cat $ {ff} | wc -l ; echo "$ {cnt} = $ {pp} = $ {fn} = $ {fcnt}"; cnt = EXPR $ {CNT} + 1 ; fait

- Simple pour obtenir le dossier / Détails du fichier: $> HDFSFind -Find / dev / abc / -type f -Name "* .csv" $> HDFSFind -Find / dev / abc / -type d -Name " jouets "


0 commentaires

1
votes

Ce que vous n'avez pas les colis de Cloudera disponibles Vous pouvez utiliser AWK.

hdfs dfs -ls -R /some_path | awk -F / '/^d/ && (NF <= 5) && /something/' 


0 commentaires