hadoop中的find命令是否有等价的用法?

hmmo2u0o  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(536)

我知道在候机楼,你可以 find 命令来查找文件,例如:

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

但是,当我在hadoop文件系统中时,我还没有找到一种方法来做到这一点。

hadoop fs -find ....

抛出错误。
人们如何在hadoop中遍历文件?我在用 hadoop 2.6.0-cdh5.4.1 .

puruo6ea

puruo6ea1#

在.bash\u配置文件中添加hdfsfindtool作为别名,将使其始终易于使用。
--在下面添加alias hdfsfind='hadoop jar/opt/cloudera/parcels/cdh/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.hadoop.hdfsfindtool'alias hdfs='hadoop fs'
--您现在可以使用如下方法:(这里我使用find工具来获取hdfs源文件夹的文件名和记录计数。)
$>cnt=1;对于ff in hdfsfind -find /dev//*/2018/02/16/*.csv -type f ; 做pp= echo ${ff}|awk -F"/" '{print $7}' ;fn公司= basename ${ff} ; fcnt公司= hdfs -cat ${ff}|wc -l ; echo“${cnt}=${pp}=${fn}=${fcnt}”;碳纳米管= expr ${cnt} + 1 ; 完成
--获取文件夹/文件详细信息很简单:$>hdfsfind-find/dev//-type f-name“*.csv”$>hdfsfind-find/dev//-type d-name“玩具”

e5njpo68

e5njpo682#

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

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

这几乎相当于 find . -type d -name "*something*" -maxdepth 4 命令。

ws51t4hk

ws51t4hk3#

如果您使用的是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 ...
laik7k3q

laik7k3q4#

hadoop fs -find 是在ApacheHadoop2.7.0中引入的。很可能你正在使用一个旧版本,因此你还没有它。有关更多信息,请参阅:hadoop-8989。
同时你可以用

hdfs dfs -ls -R <pattern>

e、 g,:hdfs dfs-ls-r/demo/order**
但这当然不如“发现”那么强大,而且缺乏一些基础知识。据我所知,人们一直在围绕这个问题写剧本。

相关问题