所以我有 2 個腳本:用于將檔案上傳到 hdfs 的腳本 1 腳本 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/letermartin/blog/2019/03/21/1172373509/are partially-written hdfs files accessible not exactly but much more yes than I previously thought 或在 stackoverflow訪問正在寫入的檔案。
似乎當我使用 hadoop dfs -put 命令(或 -copyFromLocal 或 -cp)上傳時,它會創建 [檔案名]。如果檔案尚未完成,則正在復制。但是在 python 腳本中,它似乎會創建具有相同名稱的檔案,但大小會隨著時間的推移而增加,直到它完成(我們可以在它完成之前下載它并獲得損壞的檔案)。
我想問是否有辦法使用python上傳檔案,以便我們知道檔案是否完成上傳。
實際上我有另一種解決方法將它們上傳到臨時檔案夾并在完成后將它們移動到正確的檔案夾(我仍在嘗試這樣做),但如果有其他想法將不勝感激
uj5u.com熱心網友回復:
您可以使用與 hDFS 相同的策略
- 創建 [檔案名].COPYING
- 上傳資料時重命名為 [檔案名]
我覺得您對臨時檔案提出了相同的建議,而不是更改名稱,但這相當于相同的想法。只是為了讓您知道重命名檔案非常便宜且快速,因此無論如何這是一個好策略。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/422236.html
標籤:
上一篇:網站上的SVG圖示變得透明
