命令hadoop fs-ls/数据将以以下格式返回给定路径中的所有子目录:vdrwxr-xr-x+-myuser mygroup 0 2017-02-13 14:23/data/mysubdirectory我怎样才能发出只返回部分字段的命令。例如日期和子目录:2017年2月13日/data/mysubdirectory
fcg9iug31#
文件中没有显示这样的选项:https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/filesystemshell.html#ls您可以通过管道将hadoop fs-ls的输出传输到awk之类的东西,并打印所需的列。
hadoop fs -ls /data | awk '{print $6 " " $8;}'
下面是使用awk live editor完成的示例:https://awk.js.org/?gist=05aea37413e0e026af98689296705dbd另一种选择是使用java或其他jvm语言中的hdfs客户机api。在那里,您可以调用filesystem#liststatus来获取filestatus,它提供了hadoop fs-ls正在打印到控制台的所有信息。
// Get configuration from HADOOP_CONF_DIR // org.apache.hadoop.conf.Configuration configuration = ... FileSystem fs = FileSystem.get(configuration); for (FileStatus fileStatus : fs.listStatus(new Path("/data"))) { // fileStatus.getModificationTime() -> format date // fileStatus.getPath() -> extract filename }
b4lqfgs42#
最后我做了这样的事:
hadoop fs -ls /data/ | while read f; do echo ${f} | cut -d' ' -f 6,8 done
其中,对于这种情况,6和8表示最后修改日期和文件名字段。ls在此处返回的所有可能字段
2条答案
按热度按时间fcg9iug31#
文件中没有显示这样的选项:
https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/filesystemshell.html#ls
您可以通过管道将hadoop fs-ls的输出传输到awk之类的东西,并打印所需的列。
下面是使用awk live editor完成的示例:
https://awk.js.org/?gist=05aea37413e0e026af98689296705dbd
另一种选择是使用java或其他jvm语言中的hdfs客户机api。在那里,您可以调用filesystem#liststatus来获取filestatus,它提供了hadoop fs-ls正在打印到控制台的所有信息。
b4lqfgs42#
最后我做了这样的事:
其中,对于这种情况,6和8表示最后修改日期和文件名字段。ls在此处返回的所有可能字段