日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

生产环境使用HBase,你必须知道的最佳实践

發布時間:2024/8/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 生产环境使用HBase,你必须知道的最佳实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源 | 阿丸筆記

封圖|?CSDN 下載于視覺中國

前面,我們已經打下了很多關于HBase的理論基礎,今天,我們主要聊聊在實際開發使用HBase中,需要關注的一些最佳實踐經驗。

Schema設計七大原則

1)每個region的大小應該控制在10G到50G之間;

2)一個表最好保持在 50到100個 region的規模;

3)每個cell最大不應該超過10MB,如果超過,應該有些考慮業務拆分,如果實在無法拆分,那就只能使用mob;

4)跟傳統的關系型數據庫不同,一個HBase的表中列族最多不超過3個,列族中的列可以動態添加的,不要設計過多列族;

5)列族名必須盡量短,因為我們知道在存儲的時候,每個keyvalue都會包含列族名;

6)如果一個表存在一個以上的列族,那么必須要注意,不同列族之間行數相差不要太大。例如列族A有10萬行,而列族B有1億行,那么rowkey就有1億行,而region是按照行鍵進行切分的,因此列族A可能會被打散為很多很多小region,這會導致在掃描列族A時會引發較多IO,效率低下。

7)列族可以設置TTL時間,HBase在超過設定時間后,會自動刪除數據。

設置方法有兩種:

# 建表時設置,TTL單位為秒,此例中列簇'f1'的數據保留1天(86400秒)

hbase(main):002:0>create?'table',?{NAME?=>?'f1',?TTL?=>?86400}

# 通過修改表設置

hbase(main):002:0>alter?'table',?{NAME?=>?'f1',?TTL?=>?86400}

這里需要注意,一旦超過設定時間后,該數據就無法讀取了,但是,真正的過期數據刪除,是發生在major compaction時。

.

RowKey設計三大策略

HBase作為一個分布式存儲數據庫,雖然擴容非常容易,但是,對于“熱點”問題,還是非常頭疼的。

所謂“熱點”問題(HotSpotting),就是請求(讀或者寫)短時間內落在了集中的個別region上,導致了該region所在機器的負載急劇上升,超過了單點實例的承受能力,從而引起性能下降或者不可用。

要解決這個問題,就需要設計RowKey時,使得數據盡量往多個region上去寫。

舉個例子:

假如region按照26個字母分成26個,那么同時寫入m開頭的rowkey的記錄都會同時寫入同一個region

比如m001,m002,m003,m004,m005。

因此,RowKey的設計非常關鍵。常見的設計策略有這么幾種。

1)salting

salting策略就是將生成隨機數放在行鍵的開頭作為前綴,使得每個行鍵有隨機的字典序。

對上面的案例進行優化,我們采用了salting策略,插入前給每個rowkey生成一個隨機的字母,變成了

am001,zm002,nm003,qm004,lm005

這樣就能同時往5個region里面寫入了,成功打散。

副作用:由于前綴生成是隨機的,因此如果想要按照字典序查詢這些行,則需要做更多的事情。從這個角度上看,salting增加了寫操作的吞吐量,卻也增大了讀操作的開銷。

2)Hashing

Hashing策略也是一種特殊的salting,是用一個單向的 hash 來取代隨機指派前綴。

這樣能使一個給定rowkey的行在“salted”時有相同的前綴,因此,這樣既可以分散RegionServer間的負載的,同時也允許在讀操作時能夠預測這個前綴值是什么。確定性hash( deterministic hash )可以讓客戶端重建完整的行鍵,然后就可以像正常一樣用Get方法查詢確定的行。

3)reverse key

第三種預防hotspotting的方法是反轉一段固定長度或者可數的鍵,讓變化最多的某個位置放在rowkey的第一位,

副作用:對于Get操作沒有影響,但是不利于Scan操作進行范圍查詢,因為數據在原RowKey上的順序已經被打亂。

預分區

在 HBase核心特性—region split 中,我們知道已經提到過關于預分區。

主要原因是當一張表被首次創建時,只會分配一個region給這個表。因此,在剛剛開始時,所有讀寫請求都會落在這個region所在的region server上,而不管你整個集群有多少個region server。不能充分地利用集群的分布式特性。

因此,預分區主要也是解決“熱點”問題。

最為常見的建表語句為:

create ‘tb’,{NAME => ‘f1’,COMPRESSION => ‘snappy’ }, { NUMREGIONS => 50, SPLITALGO => ‘HexStringSplit’ }

  • NUMREGIONS 為 region的個數,一般按照每個region 8-10GB左右來計算region數量,如果集群規模非常大,那么region數量可以適當取大一些

  • SPLITALGO 為 rowkey分割的算法,Hbase自帶了三種pre-split的算法,分別是 HexStringSplit、DecimalStringSplit 和 UniformSplit。

各種Split算法適用場景:

  • HexStringSplit: rowkey是十六進制的字符串作為前綴的

  • DecimalStringSplit: rowkey是10進制數字字符串作為前綴的

  • UniformSplit: rowkey前綴完全隨機

讀性能優化

前面主要講一些設計方面的優化點。

那如果在HBase的使用過程中,發現查詢較慢,那么就需要根據具體情況,分析查詢慢的原因,并采取相應的策略。

防疫、復工如何并行?天云數據推出人工智能監測方案!到底如何做到事前預防,而不是事后諸葛亮?本周四晚8點,天云數據VP陳勇為各位揭曉答案!掃描下方二維碼免費報名~

今日福利:評論區留言入選,都可獲得價值299元的「2020 AI開發者萬人大會」在線直播門票一張。??快來動動手指,寫下你想說的話吧

推薦閱讀:只要 8 個步驟,學會這個 Docker 命令終極教程! 2020 年,為什么非要采用 DevOps 文化不可? 近 10 年新秀編程語言大 PK,Pick 它! 5 億微博數據疑泄露,Python 爬蟲如何避免踩天坑? 你的企業在什么情況下需要人工智能?快來看看你需要具備哪些條件與能力! 自稱中本聰的他被法官怒懟:你的證詞毫無可信度! 真香,朕在看了!

總結

以上是生活随笔為你收集整理的生产环境使用HBase,你必须知道的最佳实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。