我们在使用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
如果你想按照最近修改的时间降序排序(也就是越早修改的文件显示在最下面),可以如下实现:
[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)