hadoop fs -ls是否有返回字段子集的选项?

时间:2019-05-05 07:16:52

标签: hadoop

命令

  

hadoop fs -ls / data

将以以下格式返回给定路径中的所有子目录:

  

vdrwxr-xr-x +-myuser mygroup 0 2017-02-13 14:23 / data / mysubdirectory

我如何使命令仅返回某些字段。例如日期和子目录:

  

2017-02-13 / data / mysubdirectory

2 个答案:

答案 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

返回的所有可能字段