2014-02-19 87 views
5

有沒有辦法獲取HDFS中的目錄鎖定?這裏就是我想要做的事:在HDFS中鎖定一個目錄

我有一個名爲目錄../最新/ ...

我每天都需要新的數據添加到這個目錄,但在此之前我在這裏複製的新數據,我想要獲取鎖定,這樣在我將新數據複製到其中時,沒有人正在使用它。

有沒有辦法在HDFS中做到這一點?

回答

3

不,沒有辦法通過HDFS來做到這一點。

一般來說,當我遇到這個問題時,我嘗試將數據複製到隨機臨時位置,然後在複製完成後移動文件。這很好,因爲mv非常即時,而複製需要更長的時間。這樣,如果你檢查,看看是否有人正在寫,然後MV,時間段和「鎖定」保持一段較短的時間

  1. 產生一個隨機數
  2. 數據放入一個新的文件夾在HDFS:看到// TMP/$ randomnumber
  3. 檢查的目的是確定(hadoop fs -ls也許)
  4. hadoop fs -mv數據到latest目錄。

有一個渺茫的機會,在3和4之間,你可能會有人砸東西。如果這真的讓你感到緊張,也許你可以在ZooKeeper中實現一個簡單的鎖。 Curator可以幫助你。

+0

對!在'臨時'位置創建數據並移動它並不是防彈的,因爲某些用戶可能正在運行(長時間)MR工作。不知道ZooKeeper中的一個簡單的鎖如何幫助。不能保證用戶在對我的數據運行MR作業之前將首先獲得鎖定,對嗎?我錯過了什麼嗎?不知何故,我認爲鎖必須位於Namenode級別。請說明ZooKeeper方法。謝謝。 – DilTeam

+0

是的,你是對的。 ZooKeeper方法假設您相信每個人都使用ZK獲取鎖定。沒有什麼會阻止用戶忽略它。在我看來,你將不得不尋找一種非技術或設計方法來解決你的問題。 –