我知道在候机楼,你可以 find 命令来查找文件,例如:
find
find . -type d -name "*something*" -maxdepth 4
但是,当我在hadoop文件系统中时,我还没有找到一种方法来做到这一点。
hadoop fs -find ....
抛出错误。人们如何在hadoop中遍历文件?我在用 hadoop 2.6.0-cdh5.4.1 .
hadoop 2.6.0-cdh5.4.1
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“玩具”
hdfsfind -find /dev//*/2018/02/16/*.csv -type f
echo ${ff}|awk -F"/" '{print $7}'
basename ${ff}
hdfs -cat ${ff}|wc -l
expr ${cnt} + 1
e5njpo682#
如果您没有cloudera包裹,您可以使用awk。
hdfs dfs -ls -R /some_path | awk -F / '/^d/ && (NF <= 5) && /something/'
这几乎相当于 find . -type d -name "*something*" -maxdepth 4 命令。
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 ...
laik7k3q4#
hadoop fs -find 是在ApacheHadoop2.7.0中引入的。很可能你正在使用一个旧版本,因此你还没有它。有关更多信息,请参阅:hadoop-8989。同时你可以用
hadoop fs -find
hdfs dfs -ls -R <pattern>
e、 g,:hdfs dfs-ls-r/demo/order**但这当然不如“发现”那么强大,而且缺乏一些基础知识。据我所知,人们一直在围绕这个问题写剧本。
4条答案
按热度按时间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“玩具”
e5njpo682#
如果您没有cloudera包裹,您可以使用awk。
这几乎相当于
find . -type d -name "*something*" -maxdepth 4
命令。ws51t4hk3#
如果您使用的是cloudera堆栈,请尝试查找工具:
将命令设置为bash变量:
用法如下:
laik7k3q4#
hadoop fs -find
是在ApacheHadoop2.7.0中引入的。很可能你正在使用一个旧版本,因此你还没有它。有关更多信息,请参阅:hadoop-8989。同时你可以用
e、 g,:hdfs dfs-ls-r/demo/order**
但这当然不如“发现”那么强大,而且缺乏一些基础知识。据我所知,人们一直在围绕这个问题写剧本。