2017-01-24 96 views
1

我目前對Hadoop生態系統和HDFS體系結構有一些初學者的理解。Hadoop NameNode和DataNode插件

我想無論如何,瞭解一些下面講HDFS更深層次的方面:

  • 有沒有一種方法,我可以掛接到NameNode的執行,以確定文件被添加/修改/從HDFS刪除 - 類似的東西Windows中的文件系統事件?
  • 我可以編寫插件,通過在NameNode和DataNode中執行自定義處理來擴展功能。
  • 數據節點通常會爲所有已複製的塊發回塊報告。有沒有辦法擴展這個數據塊報告來添加自定義字段或屬性?

任何針對上述問題的指針都會很棒。

在此先感謝您的幫助

回答

1

有沒有一種方法,我可以掛接到NameNode的執行來識別被添加/修改的文件/刪除從HDFS - 類似的東西到文件系統事件在Windows?

是的!最近版本的HDFS包含一個類似於Linux inotify的功能,它允許HDFS客戶端監聽由NameNode發佈的各種文件系統事件。不幸的是,我們現在沒有關於Apache Hadoop站點上的功能的明確文檔。如果您想了解更多關於此功能的信息,我建議您查看Apache JIRA HDFS-6634,這是跟蹤功能開發的主要問題。附件中的設計文檔和補丁將讓您瞭解它的工作原理。此外,如果您對「HDFS inotify」進行網絡搜索,我希望您會發現一些有用的演示和示例。或者,如果您只需要客戶端針對HDFS執行的所有操作的記錄,那麼解析HDFS審覈日誌可能就足夠了。這是一個與普通HDFS日誌保持在同一目錄中的文件,它記錄了針對NameNode執行的大多數操作的一行。 Hadoop代碼庫中的log4j.properties sample顯示瞭如何啓用此功能。典型的商業發行版默認啓用它。

我可以編寫插件,通過在NameNode和DataNode中執行自定義處理來擴展功能。

沒有,沒有通用的插件機制。這是一個有意的設計選擇,以避免將可能較慢的自定義代碼注入關鍵HDFS守護進程中的風險,這些守護進程預計可以很好地擴展。有幾個特定的​​地方可以通過實現特定的Java類來進行定製,比如權限檢查,但它並不是作爲一種通用插件機制來掛鉤任何可能的事件。

上面提到的inotify特性涉及客戶端連接到NameNode和接收事件,然後,客戶端可以向然而其認爲合適的那些事件。但是,這不涉及在NameNode進程內執行的自定義客戶端代碼。

數據節點通常會爲所有已複製的塊發回塊報告。有沒有辦法擴展這個數據塊報告來添加自定義字段或屬性?

實現這一目標的唯一方法是更改​​HDFS的代碼並構建它並自行部署它,從本質上創建您自己的分支。這可能會導致創建不兼容的版本,而這些版本不會與Hadoop生態系統中的其他應用程序一起使用。 Hadoop RPC使用Protobuf來定義消息傳遞格式,如果使用正確,它可以實現前向和後向兼容性,但是您的更改可能與Apache中上游發生的發展不同。

如果您認爲自己有一項功能可以讓所有HDFS用戶都能使用,那麼您可以考慮提交一份Apache JIRA,將其作爲一項功能提交給Apache Hadoop代碼庫。

+0

優秀的參考文獻 - 感謝提及他們:)。這確實有助於指導我的思維過程,同時牢記HDFS中的可用功能和當前侷限性 –

相關問題