本節書摘來異步社群《hbase管理指南》一書中的第1章,第1.8節,作者: 蔣燚峰 譯者: 蘇南,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
在進行下一步工作之前,我們需要進行一些基本設定的調優。這都是一些非常基本和非常重要的hadoop(hdfs)、zookeeper和hbase設定,你應該在安裝好叢集後立刻修改這些設定。
有些設定會對資料持久性或叢集可用性産生影響,是以必須進行配置,而另外一些設定則是為保證hbase順暢運作而推薦你進行的設定。
這些配置的設定值取決于你的硬體、資料量和叢集的規模。本節将對此進行一種指南式的描述。你可能需要根據自己的具體環境對這些設定值進行一些修改。
每次修改都需要先同步到所有用戶端和從節點上,然後再重新啟動相應的守護程序,這樣才能使修改生效。
叢集的配置應該進行如下一些修改。
1.打開hdfs的dfs.support.append屬性。dfs.support.append屬性決定hdfs是否支援追加(sync)功能。其預設值為false。必須将其設定為true,否則在區域伺服器崩潰時,就有可能丢失資料。
2.調高dfs.datanode.max.xcievers屬性的值,使datanode可以讓更多數量的線程保持打開,以便可以處理更多的并發請求。
3.調高zookeeper堆記憶體的大小,以使該記憶體不必進行交換。
4.調高zookeeper的最大用戶端連接配接數,以便處理更多的并發請求。
hadoop$ echo "maxclientcnxns=60" >> $zk_home/conf/zoo.cfg
5.調高hbase堆記憶體的大小,以使hbase可以順暢運作。
6.調低zookeeper.session.timeout屬性的值,以使hbase可以很快發現某台區域伺服器已當機,并且能夠在很短時間内對其進行恢複。
7.若要修改hadoop/zookeeper/hbase的日志設定,需要修改hadoop/zookeeper/hbase各自安裝目錄下的conf目錄中的log4j.properties檔案和hadoop-env.sh或hbase-env.sh檔案。最好能将日志目錄改到安裝檔案夾之外。例如,下面這個例子就将hbase的日志目錄指定到了/usr/local/hbase/logs目錄上。
在第1步中,我們通過打開dfs.support.append屬性,因而啟用了hdfs的寫盤功能。在啟用了該功能之後,我們可以通過調用flush函數來讓hdfs寫程序確定對資料進行了持久化。這樣hbase就可以保證:在一台區域伺服器發生當機時,我們可以通過在其他區域伺服器上重演故障伺服器的預寫日志(wal,write-ahead log)的方式來恢複故障伺服器上的資料。
若想确認是否支援hdfs追加功能,可檢視hbase啟動時的hmaster日志。如果沒有啟用追加功能,你就會看到類似下面這樣的日志。
在第2步中,我們對dfs.datanode.max.xcievers屬性進行了配置,該屬性指定了hdfs的datanode可同時打開的檔案數量的上限。
提示 請注意,該屬性的名字是xcievers,這個名字有拼寫錯誤。其預設值是256,這個值太低,無法在hdfs上運作hbase。
第3步和第4步是設定zookeeper的屬性。zookeeper對于記憶體交換非常敏感,記憶體交換會使其性能嚴重降低。zookeeper的堆記憶體大小需要在java.env檔案中設定。zookeeper可同時打開的連接配接的數量也有一個上限。其預設值是10,這對于hbase來說太低了,尤其是還要在hbase上運作mapreduce的時候。 我們建議你把它設定為60。
在第5步中,我們配置了hbase堆記憶體的大小。hbase預設的堆大小為1gb, 對于目前伺服器的硬體水準來說,這也太低了。對于大型的機器來說,8gb或更大都是一個比較合理的值,但不要超過16gb。
在第6步中,我們将zookeeper的會話逾時時間修改為一個較低的值。逾時時間更短意味着hbase可以更快地發現有區域伺服器發生了當機,是以,hbase可以在很短的時間内在其他伺服器上恢複那些被毀壞的區域。另一方面,如果會話逾時時間過短,也會有在叢集負載很重時hregionserver守護程序将自己的程序殺掉的風險,因為它可能還沒來得及把心跳信号發給zookeeper,時間就已經逾時了。
第8章“基本性能調整”
第9章“進階配置和調整”