最主要的是IO的操作(重點(diǎn))
不要在一張表里定義太多的Column Family
- Hbase目前不能良好的處理超過(guò)包含2-3個(gè)CF的表。
- 因?yàn)槟硞€(gè)CF在flush發(fā)生時(shí),它鄰近的CF也會(huì)因關(guān)聯(lián)效應(yīng)被觸發(fā)flush,最終導(dǎo)致系統(tǒng)產(chǎn)生更多IO
配置優(yōu)化
zookeeper.session.timeout
1.默認(rèn)的是3分鐘
2.RegionServer與Zookeeper間的連接超時(shí)時(shí)間。當(dāng)超時(shí)時(shí)間到后,ReigonServer會(huì)被Zookeeper從RS集群清單中移除,HMaster收到移除通知后,會(huì)對(duì)這臺(tái)server負(fù)責(zé)的regions重新balance,讓其他存活的RegionServer接管.
3.regionserver ->(連接超時(shí)) zookeeper ->(傳遞給) hmaster ->(重新分配) regionhbase.hregion.max.filesize
1.默認(rèn)是256M
2.在當(dāng)前ReigonServer上單個(gè)Reigon的最大存儲(chǔ)空間,單個(gè)Region超過(guò)該值時(shí),這個(gè)Region會(huì)被自動(dòng)split成更小的region壓縮
1.當(dāng)對(duì)壓縮速度由較高的要求的時(shí)候,我們用LZO
2.當(dāng)對(duì)壓縮率有要求時(shí)(對(duì)存儲(chǔ)空間)我們用GZIP(默認(rèn)的)批量導(dǎo)入
1.在批量導(dǎo)入數(shù)據(jù)到Hbase前,你可以通過(guò)預(yù)先創(chuàng)建regions,來(lái)平衡數(shù)據(jù)的負(fù)載(負(fù)載均衡)autoflush
1.將HTABLE的setAutoFlush設(shè)置為false,可以支持客戶端批量更新.即當(dāng)Put填滿客戶端flush緩存時(shí),才發(fā)送到服務(wù)端,默認(rèn)是trueScan Caching
1.scanner一次緩存多少數(shù)據(jù)來(lái)scan(從服務(wù)端一次抓多少數(shù)據(jù)回來(lái)scan)。
默認(rèn)值是 1,一次只取一行。Scan Attribute Selection
1.scan時(shí)建議指定需要的Column Family,減少通信量,否則scan操作默認(rèn)會(huì)返回整個(gè)row的所有數(shù)據(jù)(所有Coulmn Family)。Close ResultScanners
1.通過(guò)scan取完數(shù)據(jù)后,記得要關(guān)閉ResultScanner,否則RegionServer可能會(huì)出現(xiàn)問(wèn)題(對(duì)應(yīng)的Server資源無(wú)法釋放)Optimal Loading of Row Keys
1.當(dāng)你scan一張表的時(shí)候,返回結(jié)果只需要row key(不需要CF, qualifier,values,timestaps)時(shí),你可以在scan實(shí)例中添加一個(gè)filterList,并設(shè)置 MUST_PASS_ALL操作,filterList中add?FirstKeyOnlyFilter或KeyOnlyFilter。這樣可以減少網(wǎng)絡(luò)通信量。Turn off WAL on Puts
1.當(dāng)Put某些非重要數(shù)據(jù)時(shí),你可以設(shè)置writeToWAL(false),來(lái)進(jìn)一步提高寫(xiě)性能。writeToWAL(false)會(huì)在Put時(shí)放棄寫(xiě)WAL log。風(fēng)險(xiǎn)是,當(dāng)RegionServer宕機(jī)時(shí),可能你剛才Put的那些數(shù)據(jù)會(huì)丟失,且無(wú)法恢復(fù)hbase對(duì)于內(nèi)存有特別的嗜好,在硬件允許的情況下配足夠多的內(nèi)存給它。
通過(guò)修改hbase-env.sh中的
export HBASE_HEAPSIZE=3000 #這里默認(rèn)為1000m