Python: 如何知道文件是否完成上传到 hdfs

Python: how to know if file is finished uploading into hdfs

所以我有 2 个脚本: 用于将文件上传到 hdfs 的 script1 script2 将每 n 秒访问该文件夹并读取文件

我的上传脚本是这样的

from hdfs import InsecureClient
from requests import Session
from requests.auth import HTTPBasicAuth

session = Session()
session.auth = HTTPBasicAuth('hadoop', 'password')
client_hdfs = InsecureClient('http://hadoop.domain.com:50070', user='hadoop', session=session)
client_hdfs.upload(hdfsPath,filePath,overwrite=True)

当我读 https://martin.atlassian.net/wiki/spaces/lestermartin/blog/2019/03/21/1172373509/are+partially-written+hdfs+files+accessible+not+exactly+but+much+more+yes+than+I+previously+thought 或者在 Whosebug Accessing a file that is being written.

似乎当我使用 hadoop dfs -put 命令(或 -copyFromLocal 或 -cp)上传时,如果文件尚未完成,它将创建 [filename].COPYING。但是在 python 脚本中,它似乎会创建具有相同名称的文件,但大小会随着时间的推移而增加,直到它完成(我们可以在它完成之前下载它并得到损坏的文件)。

想请问有没有什么方法可以使用python上传文件,让我们知道文件是否上传完成。

实际上,我还有另一种解决方法,可以将它们上传到临时文件夹,并在完成所有操作后将它们移动到正确的文件夹(我仍在尝试这样做),但如果有其他想法,我们将不胜感激

您可以使用与 hDFS 相同的策略

  1. 创建[文件名].COPYING
  2. 上传数据后重命名为[文件名]

我觉得你建议用临时文件做同样的事情,而不是更改名称,但这相当于相同的想法。只是想让你知道重命名文件非常便宜和快速,所以无论如何这是一个很好的策略。