2015-10-01 1 views
1

Я знаю, что из терминала, можно сделать команду find, чтобы найти файлы, такие как:Есть ли эквивалент команды `find` в` hadoop`?

find . -type d -name "*something*" -maxdepth 4 

Но, когда я нахожусь в Hadoop файловой системе, я не нашел способ сделать это.

hadoop fs -find .... 

выдает сообщение об ошибке.

Как люди проходят файлы в hadoop? Я использую hadoop 2.6.0-cdh5.4.1.

+0

Это "выкидывает ошибку"? Какая ошибка? 'find' - это то, что я ожидаю от большинства людей. –

+0

для будущих помощников справки, на 'hadoop 2.6.0-cdh5.4.1', похоже, что это не работает:' hadoop fs -ls -R ', но разумным решением является следующее:' hadoop fs -ls -R | egrep ' – Candic3

ответ

3

hadoop fs -find было представлено в Apache Hadoop 2.7.0. Скорее всего, вы используете более старую версию, поэтому у вас ее еще нет. см.: HADOOP-8989 для получения дополнительной информации.

В то же время вы можете использовать

hdfs dfs -ls -R <pattern> 

например ,: HDFS ДФС -ls -R /demo/order*.*

, но это не такой мощный, как «найти», конечно, и не хватает некоторых основ. Из того, что я понимаю, люди писали сценарии вокруг этого, чтобы преодолеть эту проблему.

1

Если вы используете стек Cloudera, попробуйте инструмент найти:

org.apache.solr.hadoop.HdfsFindTool 

Установите команду переменной Баш:

COMMAND='hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.hadoop.HdfsFindTool' 

Использование следующим образом:

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

добавление HdfsFindTool в качестве псевдонима в .bash_profile позволит легко использовать его всегда.

--add ниже к профилю псевдоним hdfsfind = 'Hadoop банку /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.hadoop.HdfsFindTool ' псевдоним HDFS =' Hadoop фс

--u можно использовать следующим образом Сейчас: (. вот мне с помощью найти инструмент, чтобы получить папки источника HDFS мудрое имя файла и записи отсчетов)

$> CNT = 1 ; для ff в hdfsfind -find /dev/abc/*/2018/02/16/*.csv -type f; do pp = echo ${ff}|awk -F"/" '{print $7}'; fn = basename ${ff}; fcnt = hdfs -cat ${ff}|wc -l; echo "$ {cnt} = $ {pp} = $ {fn} = $ {fcnt}"; cnt = expr ${cnt} + 1; сделан

--simple, чтобы получить подробную информацию папки/файл: $> hdfsfind -find/DEV/а/-тип х -name "* .csv" $> hdfsfind -find/DEV/а/-type d -name "игрушки"

+0

Пожалуйста, уделите время правильному форматированию кода. –