在`hadoop`中是否存在`find`命令的等价物?

Can*_*ic3 7 terminal hadoop hdfs hadoop2

我知道从终端,可以执行find命令来查找文件,例如:

find . -type d -name "*something*" -maxdepth 4 
Run Code Online (Sandbox Code Playgroud)

但是,当我在hadoop文件系统中时,我还没有找到办法做到这一点.

hadoop fs -find ....
Run Code Online (Sandbox Code Playgroud)

抛出错误.

人们如何遍历hadoop中的文件?我正在使用hadoop 2.6.0-cdh5.4.1.

Leg*_*ato 8

hadoop fs -find在Apache Hadoop 2.7.0中引入.很可能你使用的是旧版本,因此你还没有.请参阅:HADOOP-8989了解更多信息.

在此期间你可以使用

hdfs dfs -ls -R <pattern>
Run Code Online (Sandbox Code Playgroud)

例如:hdfs dfs -ls -R /demo/order*.*

但这并不像"发现"那样强大,缺乏一些基础知识.据我所知,人们一直在编写脚本来解决这个问题.


小智 5

如果您使用的是 Cloudera 堆栈,请尝试使用查找工具:

org.apache.solr.hadoop.HdfsFindTool
Run Code Online (Sandbox Code Playgroud)

将命令设置为 bash 变量:

COMMAND='hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.hadoop.HdfsFindTool'
Run Code Online (Sandbox Code Playgroud)

用法如下:

${COMMAND} -find . -name "something" -type d ...
Run Code Online (Sandbox Code Playgroud)