所以我有两个脚本:用于将文件上载到hdfs的script 1 script 2将每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或堆栈溢出Accessing a file that is being written时。
当我使用hadoop dfs -put命令(或-copyFromLocal或-cp)上传时,如果文件还没有完成,它似乎会创建[filename].COPYING。但在python脚本中,它似乎会创建同名的文件,但大小会随着时间的推移而增加,直到它完成(我们可以在它完成之前下载它,并得到损坏的文件)。
我想问一下是否有一种方法可以使用python上传文件,这样我们就知道文件是否完成了上传。
事实上,我有另一个变通办法,将它们上传到临时文件夹,并将它们移动到正确的文件夹后,所有完成(我仍在尝试这样做),但如果有另一个想法,这将不胜感激
1条答案
按热度按时间lsmepo6l1#
您可以使用与hDFS相同的策略
1.创建[文件名].COPYING
1.上传数据时,重命名为[filename]
我觉得你也建议用临时文件来代替文件名,但这是同样的想法。正如你所知道的,重命名文件是非常便宜和快速的,所以无论如何这是一个很好的策略。