Hbase 面試問答

問:Hbase大量寫入很慢,一個列族,每個200多列,一秒寫30000條數據,使用mutate添加數據,clientbuffer緩存大小爲10M,四臺測試機,128G內存,分配60G給Hbase,該怎麼優化?

答:可以使用bulkload方式寫入,通過mr程序生產hfile文件,直接用bulkload導入生成的hfile文件,速度非常快。

問:hbase大規模的丟數據,整個數據庫系統都掛掉了,然後發錯誤日誌,說Hdfs內部的配置文件,hbase.version,丟失了。大家有遇到過類似的問題嗎?自建的集羣。

答:檢查一下一些服務的端口有沒有暴露到公網,是不是集羣被攻擊了。自建還是有一些風險的。然後檢查下自己的hbase配置。看看數據的備份情況。

問:start-hbase.sh中有這麼一段:


if [ "$distMode" == 'false' ]
then
"$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@
else
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" $commandToRun zookeeper
"$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
--hosts "${HBASE_REGIONSERVERS}" $commandToRun regionserver
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
--hosts "${HBASE_BACKUP_MASTERS}" $commandToRun master-backup
fi

distMode爲false時表示單機,true時表示集羣,看腳本好像是單機只啓動master,是否是說單機環境下不需要zookeeper,regionserver這些的意思,可是網上搜了下又有人說單機環境下master和 zookeeper會運行在同一個jvm。有誰對hbase比較熟悉的可以解答下嗎?

答:單機模式所有的服務都是一個jvm 進程啓動,底層的文件系統是本地文件系統,該jvm進程包括有zookeeper,hmaster和regionserver。其他模式需要手動分別啓動zk,hmaster,regionserver到不同的進程中。

問:Hbase 在大規模用戶畫像標籤,標籤有近百個左右,適合嗎?

答:hbase就是適用這種幾百幾千級別的場景,甚至可以支持百萬列級別的,但是建議常用的小於10w列。

問:hbase 2 內置現在的事務做的怎麼樣?支持到什麼隔離級別?如果有的話,hbase分佈式事務依靠什麼做的?

答:hbase事務目前還是region級別,hbase是可以做到跨行事務,但是隻限於region級別。

問:批量刪除hbase的數據用什麼方式比較快

答:最快的方式就是直接設置TTL,如果業務無法滿足,建議直接調度delete接口,性能也較快。

問:HBase 2.0 的查詢性能怎樣優化的?

答:在HBase的讀和寫鏈路中,均會產生大量的內存垃圾和碎片。比如說寫請求時需要從Connection的ByteBuffer中拷貝數據到KeyValue結構中,在把這些KeyValue結構寫入memstore時,又需要將其拷貝到MSLAB中,WAL Edit的構建,Memstore的flush等等,都會產生大量的臨時對象,和生命週期結束的對象。隨着寫壓力的上升,GC的壓力也會越大。讀鏈路也同樣存在這樣的問題,cache的置換,block數據的decoding,寫網絡中的拷貝等等過程,都會無形中加重GC的負擔。而HBase2.0中引入的全鏈路offheap功能,正是爲了解決這些GC問題。大家知道Java的內存分爲onheap和offheap,而GC只會整理onheap的堆。全鏈路Offheap,就意味着HBase在讀寫過程中,KeyValue的整個生命週期都會在offheap中進行,HBase自行管理offheap的內存,減少GC壓力和GC停頓。

寫鏈路的offheap包括以下幾個優化:

  • 在RPC層直接把網絡流上的KeyValue讀入offheap的bytebuffer中

  • 使用offheap的MSLAB pool

  • 使用支持offheap的Protobuf版本(3.0+)

讀鏈路的offheap主要包括以下幾個優化:

  • 對BucketCache引用計數,避免讀取時的拷貝

  • 使用ByteBuffer做爲服務端KeyValue的實現,從而使KeyValue可以存儲在offheap的內存中

  • 對BucketCache進行了一系列性能優化

問:Hbase的bulkload有全量與增量的概念麼?

答:snapshot 做全量 ,然後bulkload 做增量。

問:Hive on hbase 分析10億以上數據性能問題?

答:性能會損失,hive支持通過類似sql語句的語法來操作hbase中的數據, 但是速度較慢。

問:直接讀HFile與通過Hbase客戶端讀,性能提升多少?

答:全表掃使用spark讀HFile,比直接讀hbase性能提升兩倍以上,並且不會影響hbase其他讀寫使用。

問:HBase region個數如何劃分?

答:最好是你的regionserver的倍數 ,會自動的分配到每個服務器 ,注意rowkey要分散。參考文檔:https://help.aliyun.com/document_detail/71787.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章