从unix更改hdfs文件创建日期

tf7tbtn2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(679)

我希望在unix中使用touch命令来更改文件的最后修改日期。触摸屏-d 20101
hdfs的等效touchz命令不支持这一点。hadoop fs-touchz-d 20101
在hadoop中,有没有任何方法可以使用unix或其他任何东西来更改文件的最后修改日期?

l7mqbcuq

l7mqbcuq1#

如果您不想像@scouto建议的那样编写java代码,您可以通过一个简单的解决方法来实现,下面是我对如何实现的解释。


# 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

p、 s-更改本地文件系统的时间和何时将文件复制到hdfs使用 -p 在hdfs中也会保留和反映相同的时间。
如果您关心的是创建一个新文件并在每次更新它时使用 -f 覆盖/强制文件


# 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/
jqjz2hbq

jqjz2hbq2#

hadoop确实提供了这个工具
一般的命令行语法是:command[genericoptions][commandoptions]
用法:hadoop fs[generic options]-touch[-a][-m][-t时间戳][-c]。。。

vm0i2vca

vm0i2vca3#

据我所知,没有shell命令可以做到这一点。
但可以通过 Java 应用程序编程接口
public void settimes(path p,long mtime,long atime)抛出ioexception
设置文件的访问时间。
参数:p-路径mtime-设置此文件的修改时间。自1970年1月1日以来的毫秒数。值-1表示此调用不应设置修改时间。atime-设置此文件的访问时间。自1970年1月1日以来的毫秒数。值-1表示此调用不应设置访问时间。

相关问题