“hadoop”中的“find”命令是否具有等效性?

“hadoop”中的“find”命令是否具有等效性?,hadoop,terminal,hdfs,hadoop2,Hadoop,Terminal,Hdfs,Hadoop2,我知道从终端可以执行find命令来查找以下文件: find . -type d -name "*something*" -maxdepth 4 但是,当我在hadoop文件系统中时,我还没有找到一种方法来做到这一点 hadoop fs -find .... 抛出一个错误 人们如何在hadoop中遍历文件?我使用的是ApacheHadoop2.7.0中引入的Hadoop2.6.0-cdh5.4.1HadoopFS-find。很可能您使用的是旧版本,因此您还没有。 有关更多信息,请参阅 在此期

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

find . -type d -name "*something*" -maxdepth 4 
但是,当我在hadoop文件系统中时,我还没有找到一种方法来做到这一点

hadoop fs -find ....
抛出一个错误


人们如何在hadoop中遍历文件?我使用的是ApacheHadoop2.7.0中引入的
Hadoop2.6.0-cdh5.4.1
HadoopFS-find
。很可能您使用的是旧版本,因此您还没有。 有关更多信息,请参阅

在此期间,您可以使用

hdfs dfs -ls -R <pattern>
hdfs-dfs-ls-R
e、 g,: hdfs dfs-ls-R/demo/order**


但这当然不如“发现”那么强大,而且缺乏一些基础知识。据我所知,人们一直在围绕它编写脚本来解决这个问题。

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

org.apache.solr.hadoop.HdfsFindTool
将命令设置为bash变量:

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 ...

在.bash_配置文件中添加HdfsFindTool作为别名将使其始终易于使用

--将以下内容添加到配置文件 别名hdfsfind='hadoop jar/opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.hadoop.HdfsFindTool' 别名hdfs='hadoop fs'

--您现在可以使用如下方法:(这里我使用find工具获取HDFS源文件夹的文件名和记录计数。)

$>cnt=1;对于
hdfsfind-find/dev/abc/*/2018/02/16/*.csv中的ff-类型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
;完成

--易于获取文件夹/文件详细信息: $>hdfsfind-find/dev/abc/-type f-name“*.csv”
$>hdfsfind-find/dev/abc/-type d-name“toys”

如果您没有可用的cloudera包裹,可以使用awk

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

hdfs dfs-ls-R/some|u路径| awk-F/'/^d/&(NF-It“抛出错误”?什么错误?
find
是我期望大多数人使用的。对于未来的求助者,在
hadoop 2.6.0-cdh5.4.1
上,这似乎不起作用:
hadoop fs-ls-R
,但一个合理的解决方案是:
hadoop fs-ls-R | egrp
谢谢。知道如何使用
hadoop fs-find
“表达式”选项?文档中说:
以下运算符已被识别:expression-表达式-和expression
,但我不知道这意味着什么`