我的情況如下:我有一個包含3個ZooKeeper的20節點Hadoop/HBase集羣。我通過MapReduce處理大量從HBase表格到其他HBase表格的數據。HBase如何通過羣集在MapReduce中分配新區域?
現在,如果我創建一個新表並告訴任何作業使用該表作爲輸出接收器,則其所有數據都會轉到同一個區域服務器上。如果只有少數幾個地區,這並不會讓我感到意外。我擁有的特定表格大約有450個區域,現在出現這個問題:大多數這些區域(大約80%)都在同一個區域服務器上!
我在想,現在HBase如何分配整個羣集中新區域的分配以及這種行爲是正常/期望還是錯誤。不幸的是,我不知道從哪裏開始尋找我的代碼中的錯誤。
我問的原因是這使得工作變得非常慢。只有當作業完成後,表才能在整個集羣中保持平衡,但這並不能解釋這種行爲。 HBase不應該在創建時將新區域分配給不同的服務器嗎?
感謝您的輸入!
謝謝你,現在我知道它爲什麼會發生這種情況。我的羣集位於Cloudera的CDH3,HBase的版本是0.90.4。從你的評論中,我收集到可能是我的集羣中有161個表的問題? – bwacx
它只是一個問題,hbase沒有意識到表需要均勻分佈,因爲它只分配區域。如果你只有一張桌子,這不太可能發生,但強制所有用戶只有少量桌子是不合理的。 – David