命令
hadoop fs -ls / data
将以以下格式返回给定路径中的所有子目录:
vdrwxr-xr-x +-myuser mygroup 0 2017-02-13 14:23 / data / mysubdirectory
我如何使命令仅返回某些字段。例如日期和子目录:
2017-02-13 / data / mysubdirectory
答案 0 :(得分:2)
文档中没有显示此类选项:
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实时编辑器完成的示例:
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
}
答案 1 :(得分:0)
我最终是这样的:
hadoop fs -ls /data/ | while read f; do
echo ${f} | cut -d' ' -f 6,8
done
在这种情况下,6和8代表字段Last Modify Date和File Name。 ls here
返回的所有可能字段