HDFS ls查看文件命令按照时间排序(sort by time)

 

  我们在使用HDFS Shell的时候只用最频繁的命令可能就是 ls 了,其具体含义我就不介绍了。在使用 ls 的命令时,我们可能想对展示出来的文件按照修改时间排序,也就是最近修改的文件(most recent)显示在最前面。如果你使用的是Hadoop 2.8.0以下版本,内置是不支持按照时间等属性排序的。不过值得高兴的是,我们可以结合Shell命令来实现按照文件最近修改的时间对 ls 命令输出结果进行排序;比如,我想按照最近修改的时间升序排序(也就是越早修改的文件显示在最上面),可以如下实现:

[[email protected] ~]$ hadoop fs -ls /user/iteblog | sort -k6,7

drwxr-xr-x   - iteblog iteblog          0 2015-06-16 14:57 /user/iteblog/hive

drwxr-xr-x   - iteblog iteblog          0 2016-07-04 16:16 /user/iteblog/spark

drwxr-xr-x   - iteblog iteblog          0 2016-11-16 20:07 /user/iteblog/data

drwxr-xr-x   - iteblog iteblog          0 2016-12-12 18:59 /user/iteblog/logs

drwxr-xr-x   - iteblog iteblog          0 2017-02-17 02:40 /user/iteblog/temp

drwxr-xr-x   - iteblog iteblog          0 2017-02-18 19:22 /user/iteblog/.sparkStaging

drwx------   - iteblog iteblog          0 2017-02-18 20:11 /user/iteblog/.Trash

 

如果你想按照最近修改的时间降序排序(也就是越早修改的文件显示在最下面),可以如下实现:

[[email protected] ~]$ hadoop fs -ls /user/iteblog | sort -r -k6,7

drwx------   - iteblog iteblog          0 2017-02-18 20:11 /user/iteblog/.Trash

drwxr-xr-x   - iteblog iteblog          0 2017-02-18 19:22 /user/iteblog/.sparkStaging

drwxr-xr-x   - iteblog iteblog          0 2017-02-17 02:40 /user/iteblog/temp

drwxr-xr-x   - iteblog iteblog          0 2016-12-12 18:59 /user/iteblog/logs

drwxr-xr-x   - iteblog iteblog          0 2016-11-16 20:07 /user/iteblog/data

drwxr-xr-x   - iteblog iteblog          0 2016-07-04 16:16 /user/iteblog/spark

drwxr-xr-x   - iteblog iteblog          0 2015-06-16 14:57 /user/iteblog/hive

如果你使用的是Hadoop 2.8.0及以上版本,我们可以发现Hadoop内置(HADOOP-8934)就支持了这个功能,如下:

Usage: hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u]

 

Options:

 

-C: Display the paths of files and directories only.

-d: Directories are listed as plain files.

-h: Format file sizes in a human-readable fashion (eg 64.0m instead of 67108864).

-q: Print ? instead of non-printable characters.

-R: Recursively list subdirectories encountered.

-t: Sort output by modification time (most recent first).

-S: Sort output by file size.

-r: Reverse the sort order.

-u: Use access time rather than modification time for display and sorting.

可以从上面 ls 参数列表看出,最新版的Hadoop ls 命令支持了更多的功能,不仅仅是文件按照修改时间排序(包括升序和降序),还可以按照文件大小排序等。所以我们可以直接在命令行上使用这个功能:

[[email protected] ~]$ hadoop fs -ls -t /user/iteblog

drwx------   - iteblog iteblog          0 2017-02-18 20:11 /user/iteblog/.Trash

drwxr-xr-x   - iteblog iteblog          0 2017-02-18 19:22 /user/iteblog/.sparkStaging

drwxr-xr-x   - iteblog iteblog          0 2017-02-17 02:40 /user/iteblog/temp

drwxr-xr-x   - iteblog iteblog          0 2016-12-12 18:59 /user/iteblog/logs

drwxr-xr-x   - iteblog iteblog          0 2016-11-16 20:07 /user/iteblog/data

drwxr-xr-x   - iteblog iteblog          0 2016-07-04 16:16 /user/iteblog/spark

drwxr-xr-x   - iteblog iteblog          0 2015-06-16 14:57 /user/iteblog/hive

hadoop fs -ls -t -r /user/iteblog输出的结果正好和上面相反。

有些用户可能会说,你不是说这个功能是从Hadoop 2.8.0版本开始才支持的,但是为什么我在Hadoop 2.7.1的官方文档看到了有关 ls 支持 -t 参数的说明呢?如下:

 

Usage: hadoop fs -ls [-d] [-h] [-R] [-t] [-S] [-r] [-u]

 

Options:

 

-d: Directories are listed as plain files.

-h: Format file sizes in a human-readable fashion (eg 64.0m instead of 67108864).

-R: Recursively list subdirectories encountered.

-t: Sort output by modification time (most recent first).

-S: Sort output by file size.

-r: Reverse the sort order.

-u: Use access time rather than modification time for display and sorting.

我想和你说,这是一个误会,其实这个版本并不支持。不信你自己去命令行试试。

你可能感兴趣的:(Hadoop,大数据)