欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

HDFS ls命令按照时间排序(sort by time)

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

[iteblog@www.iteblog.com ~]$ 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

如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop

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

[iteblog@www.iteblog.com ~]$ 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] <args>

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 命令支持了更多的功能,不仅仅是文件按照修改时间排序(包括升序和降序),还可以按照文件大小排序等。所以我们可以直接在命令行上使用这个功能:

[iteblog@www.iteblog.com ~]$ 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] <args>

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.

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

本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【HDFS ls命令按照时间排序(sort by time)】(https://www.iteblog.com/archives/1948.html)
喜欢 (9)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!