2
我很困惑hadoop namenode內存問題。Hadoop namenode內存使用情況
當NameNode的內存使用率低於一定比例較高(比如75%),閱讀和通過Hadoop的API編寫HDFS文件會失敗(例如,調用一些open()將拋出異常),什麼是原因?有沒有人有同樣的事情? PS。此時namenode盤io不高,CPU相對空閒。
什麼決定了namenode'QPS(每秒查詢)?
非常感謝!
我很困惑hadoop namenode內存問題。Hadoop namenode內存使用情況
當NameNode的內存使用率低於一定比例較高(比如75%),閱讀和通過Hadoop的API編寫HDFS文件會失敗(例如,調用一些open()將拋出異常),什麼是原因?有沒有人有同樣的事情? PS。此時namenode盤io不高,CPU相對空閒。
什麼決定了namenode'QPS(每秒查詢)?
非常感謝!
由於名稱節點基本上是一個RPC服務器管理與塊HashMap
,你有兩個主要的內存問題:
HashMap
是相當昂貴的,它的衝突解決(單獨的鏈接算法)是昂貴的好吧,因爲它將碰撞的元素存儲在鏈表中。dfs.namenode.service.handler.count
的數據節點它被默認設置爲10或者,您可以配置此dfs.namenode.handler.count
爲其他客戶配置此,像MapReduce作業,JobClients
,想要運行一項工作。當請求進入並且它想要創建一個新的處理程序時,它可能會出現內存不足(新的線程也分配了一大堆棧空間,也許你需要增加這個空間)。所以這些就是爲什麼你的namenode需要這麼多記憶的原因。
What determines namenode'QPS (Query Per Second) ?
我還沒有對它進行基準測試,所以我不能給你很好的提示。當然,微調處理程序計數要高於可並行運行的任務數+推測執行。 根據您提交工作的方式,您還必須微調其他屬性。
當然,你應該給namenode總是足夠的內存,所以它有空間不會陷入完整的垃圾收集週期。
謝謝,我設置dfs.namenode.handler.count = 8000,根據你的答案,它會花費namnode 8000 * 2M(假設一個線程花費2M)?另一件事,爲什麼讀寫hdfs文件失敗時namenode內存使用率> 75%?我想不出一個理由 –
你一般不能這麼說,但是至少使用1mb堆棧,2mb是我相信的一個好上限。 –
我寫了一個程序,需要從hdfs中獲取很多文件,當namonode內存使用率> 75%時,它會發現許多文件不能從hdfs獲得 –