根据hadoop源代码,从类中提取以下描述 -
appendToFile
"Appends the contents of all the given local files to the
given dst file. The dst file will be created if it does not exist."
把
"Copy files from the local file system into fs. Copying fails if the file already exists, unless the -f flag is given.
Flags:
-p : Preserves access and modification times, ownership and the mode.
-f : Overwrites the destination if it already exists.
-l : Allow DataNode to lazily persist the file to disk. Forces
replication factor of 1. This flag will result in reduced
durability. Use with care.
-d : Skip creation of temporary file(<dst>._COPYING_)."
我正在尝试将文件定期更新为hdfs,因为它是从我本地文件系统中的流媒体源动态更新的。
我应该使用appendToFile和put,以及为什么?
答案 0 :(得分:1)
appendToFile
修改HDFS中的现有文件,因此只需要将新数据流式传输/写入文件系统。
put
重写整个文件,因此需要将整个新版本的文件流式传输/写入文件系统。
如果您只是附加到文件(即将日志添加到文件末尾),则应该支持appendToFile
。如果这是你的用例,这个功能会更快。如果文件的更改不仅仅是简单的追加到最后,您应该使用put
(速度较慢,但不会丢失数据或损坏文件)。