# Changing the file timestamp to 201708210100 in local unix file system
[root@quickstart TestFolder]# touch -t 201708210100 SomeTestFile.txt
[root@quickstart TestFolder]# ls -lh
total 0
-rw-r--r-- 1 root root 0 Aug 21 01:00 SomeTestFile.txt
# when copying the file to hdfs i'm using -p option which preserves the file timestamp
[root@quickstart TestFolder]# hdfs dfs -copyFromLocal -p SomeTestFile.txt /Temp
# After copying the file if you look at the below TS its reflected the same way in as in local
[root@quickstart TestFolder]# hdfs dfs -ls /Temp/SomeTestFile.txt
-rw-r--r-- 1 root root 0 2017-08-21 01:00 /Temp/SomeTestFile.txt
# HDFS FILE SomeTestFile.txt
hdfs dfs -ls /Temp/SomeTestFile.txt
# To change the file TS for SomeTestFile.txt #Get it to local
hdfs dfs -get /Temp/SomeTestFile.txt /SomeFolderInLinux/
# Change the time in local with touch
touch -t 201701010100 /SomeFolderInLinux/SomeTestFile.txt
# Here is the main part of preserving the time and overwriting the file in hdfs
hdfs dfs -copyFromLocal -p -f /SomeFolderInLinux/SomeTestFile.txt /Temp/
3条答案
按热度按时间l7mqbcuq1#
如果您不想像@scouto建议的那样编写java代码,您可以通过一个简单的解决方法来实现,下面是我对如何实现的解释。
p、 s-更改本地文件系统的时间和何时将文件复制到hdfs使用
-p
在hdfs中也会保留和反映相同的时间。如果您关心的是创建一个新文件并在每次更新它时使用
-f
覆盖/强制文件jqjz2hbq2#
hadoop确实提供了这个工具
一般的命令行语法是:command[genericoptions][commandoptions]
用法:hadoop fs[generic options]-touch[-a][-m][-t时间戳][-c]。。。
vm0i2vca3#
据我所知,没有shell命令可以做到这一点。
但可以通过
Java
应用程序编程接口public void settimes(path p,long mtime,long atime)抛出ioexception
设置文件的访问时间。
参数:p-路径mtime-设置此文件的修改时间。自1970年1月1日以来的毫秒数。值-1表示此调用不应设置修改时间。atime-设置此文件的访问时间。自1970年1月1日以来的毫秒数。值-1表示此调用不应设置访问时间。