2016-08-24 100 views
1

我知道HDFS是一次寫入和多次讀取。
假設如果我想更新HDFS中的文件有沒有辦法做到這一點?如何更新HDFS中的文件

提前謝謝!

回答

1

如果要添加行,你必須把其他文件和連接文件:

hdfs dfs -appendToFile localfile /user/hadoop/hadoopfile 

要修改已經寫入文件的任何部分,你有三種選擇:

  1. 從hdfs獲取文件並在本地修改其內容

    hdfs dfs -copyToLocal /hdfs/source/path /localfs/destination/path

    hdfs dfs -cat /hdfs/source/path | modify...

  2. 使用的加工技術更新爲Map Reduce Apache Spark,結果將顯示爲文件的目錄,你會刪除舊文件。這應該是最好的方法。

  3. 安裝NFS或Fuse,都支持附加操作。

    NFS Gateway

    Hadoop Fuse:mountableHDFS,有助於允許被安裝HDFS(在Unix的大多數調味劑)作爲使用mount命令一個標準的文件系統。一旦被安裝,用戶可以使用標準UNIX實用程序如 'LS', 'CD', 'CP', 'MKDIR', '發現', '的grep'

4

選項1 HDFS的實例操作:

如果你只是要附加到現有的文件

  1. echo "<Text to append>" | hdfs dfs -appendToFile - /user/hduser/myfile.txt OR

  2. hdfs dfs -appendToFile - /user/hduser/myfile.txt,然後在終端上鍵入文本。一旦你完成輸入,然後點擊「按Ctrl + d」

選項2:

獲取從HDFS原始文件到本地文件系統,進行修改,然後把它放回HDFS。

  1. hdfs dfs -get /user/hduser/myfile.txt

  2. vi myfile.txt #OR使用任何其他工具,並修改它

  3. hdfs dfs -put -f myfile.txt /user/hduser/myfile.txt

+0

我知道這幾乎是一歲,但對任何人可能正在尋找答案 - 在選項2中,放置已存在的文件將導致錯誤。您需要首先移動/重命名/從HDFS中移除文件。您可以使用'hdfs dfs -mv /home/hduser/myfile.txt/home/hduser/old_myfile.txt'將其重命名爲 – AgentBawls

+0

或者您可以簡單地爲'put'命令添加'-f'標誌。更新答案;) – daemon12