如何解析Hbase原理以及基本運行方式和優化,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
10年積累的成都做網站、成都網站設計經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有寧江免費網站建設讓你可以放心的選擇與我們合作。
HBase是一個構建在HDFS上的分布式列存儲系統;
HBase是基于Google BigTable模型開發的,典型的key/value系統;
HBase是Apache Hadoop生態系統中的重要一員,主要用于海量非結構化數據存儲;
從邏輯上講,HBase將數據按照表、行和列進行存儲。
與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力
:總結一點,都知道Hbase是一個基于HDFS的列數據庫對不對!
BIGTABLE:所謂的大表,一個表可以有數十億行,和百萬個列。
面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索
稀疏:空(null)列并不占用存儲空間,表可以設計的非常稀疏;
數據多版本:每個單元中的數據可以有多個版本,默認情況下版本號自動分配,是單元格插入時的時間戳;(所以說,Hbase中沒有修改這一個概念,如果修改就是增加數據,只不過時間戳變了。查詢出來的數據也就變了。)
數據類型單一:Hbase中的數據都是字符串,沒有類型。
注:針對字符串 我需要解釋一下:最適合使用Hbase存儲的數據是非常稀疏的數據(非結構化或者半結構化的數據)。Hbase之所以擅長存儲這類數據,是因為Hbase是column-oriented列導向的存儲機制,而我們熟知的RDBMS都是row- oriented行導向的存儲機制
結構化數據:結構化信息,我們通常接觸的數據庫所管理的信息,包括生產、業務、交易、客戶信息等方面的記錄
非結構化數據:非結構化數據,包括所有格式的辦公文檔、文本、圖片、XML、HTML、各類報表、圖像和音頻/視頻信息等等
分析:在許多大型像奇藝,搜狐,騰訊視頻 優酷視頻。他們的資源可能大部分是非結構化數據。
HBase的基本元素:
表、行、列、單元格: 表的基本要素
鍵:一般是指行的鍵,即唯一標識某行的元素。表中的行,可以根據鍵進行排序,而對表的訪問,也通過鍵。
列族:所有列族成員擁有相同的前綴,某列族的成員,需要預先定義,但也可以直接進行追加。
列族成員會一起放進存儲器。而HBase面向列的存儲,是面向列族的數據存儲,數據存儲與調優都在這個層次,HBase表與RDBMS中表類似,行是排序的,客戶端可以把列添加到列族中去。
單元格cell: 單元格中存放的是不可分割的字節數組。并且每個單元格擁有版本信息。HBase的是按版本信息倒序排列。
區域region:將表水平劃分,是HBase集群分布數據的最小單位。在線的所有區域就構成了表的內容。
自動分區:(跟hadoopHDFS很相似)
Hbase中一個表被劃分了很多個Region,它可以動態擴展,保證整個系統的負載均衡。
讓一個Region達了上限的時候,就會自動拆分二個相等的Region。(原理就是Hbase中的split和compaction)
每個Region由一個RegionServer管理,一個RegionServer可以管理多個Region。
4. RgionServer管理100-1000個region比較合適。 Region的大小一般在1-20GB
HBase 是一個高可靠性、高性能、面向列、可伸縮的分布式數據庫,但是當并發量過高或者已有數據量很大時,讀寫性能會下降。我們可以采用如下方式逐步提升 HBase 的檢索速度。
預先分區
默認情況下,在創建 HBase 表的時候會自動創建一個 Region 分區,當導入數據的時候,所有的HBase 客戶端都向這一個 Region 寫數據,直到這個 Region 足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先創建一些空的 Regions,這樣當數據寫入 HBase 時,會按照Region 分區情況,在集群內做數據的負載均衡。
Rowkey 優化
HBase 中 Rowkey 是按照字典序存儲,因此,設計 Rowkey 時,要充分利用排序特點,將經常一起讀取的數據存儲到一塊,將最近可能會被訪問的數據放在一塊。
此外,Rowkey 若是遞增的生成,建議不要使用正序直接寫入 Rowkey,而是采用 reverse 的方式反轉 Rowkey,使得 Rowkey 大致均衡分布,這樣設計有個好處是能將 RegionServer 的負載均衡,否則容易產生所有新數據都在一個 RegionServer 上堆積的現象,這一點還可以結合 table的預切分一起設計。
減少ColumnFamily 數量
不要在一張表里定義太多的 ColumnFamily。目前 Hbase 并不能很好的處理超過 2~3 個 ColumnFamily 的表。因為某個 ColumnFamily 在 flush 的時候,它鄰近的 ColumnFamily 也會因關聯效應被觸發 flush,最終導致系統產生更多的 I/O。
緩存策略 (setCaching)
創建表的時候,可以通過 HColumnDescriptor.setInMemory(true) 將表放到 RegionServer 的緩存中,保證在讀取的時候被 cache 命中。
設置存儲生命期
創建表的時候,可以通過 HColumnDescriptor.setTimeToLive(int timeToLive) 設置表中數據的存儲生命期,過期數據將自動被刪除。
硬盤配置
每臺 RegionServer 管理 10~1000 個 Regions,每個 Region 在 1~2G,則每臺 Server 最少要10G,最大要 1000*2G=2TB,考慮 3 備份,則要 6TB。方案一是用 3 塊 2TB 硬盤,二是用 12塊 500G 硬盤,帶寬足夠時,后者能提供更大的吞吐率,更細粒度的冗余備份,更快速的單盤故障恢復。
分配合適的內存給 RegionServer 服務
在不影響其他服務的情況下,越大越好。例如在 HBase 的 conf 目錄下的 hbase-env.sh 的最后添加 export HBASE_REGIONSERVER_OPTS="-Xmx16000m $HBASE_REGIONSERVER_OPTS”
其中 16000m 為分配給 RegionServer 的內存大小。
寫數據的備份數
備份數與讀性能成正比,與寫性能成反比,且備份數影響高可用性。有兩種配置方式,一種是將hdfs-site.xml 拷貝到 hbase 的 conf 目錄下,然后在其中添加或修改配置項 dfs.replication 的值為要設置的備份數,這種修改對所有的 HBase 用戶表都生效,另外一種方式,是改寫 HBase 代碼,讓 HBase 支持針對列族設置備份數,在創建表時,設置列族備份數,默認為 3,此種備份數只對設置的列族生效。
WAL(預寫日志)
可設置開關,表示 HBase 在寫數據前用不用先寫日志,默認是打開,關掉會提高性能,但是如果系統出現故障 (負責插入的 RegionServer 掛掉),數據可能會丟失。配置 WAL 在調用 Java API寫入時,設置 Put 實例的 WAL,調用 Put.setWriteToWAL(boolean)。
批量寫
HBase 的 Put 支持單條插入,也支持批量插入,一般來說批量寫更快,節省來回的網絡開銷。在客戶端調用 Java API 時,先將批量的 Put 放入一個 Put 列表,然后調用 HTable 的 Put(Put 列表) 函數來批量寫。
客戶端一次從服務器拉取的數量
通過配置一次拉去的較大的數據量可以減少客戶端獲取數據的時間,但是它會占用客戶端內存。有三個地方可進行配置:
1)在 HBase 的 conf 配置文件中進行配置 hbase.client.scanner.caching;
2)通過調用 HTable.setScannerCaching(int scannerCaching) 進行配置;
3)通過調用 Scan.setCaching(int caching) 進行配置。三者的優先級越來越高。
RegionServer 的請求處理 IO 線程數
較少的 IO 線程適用于處理單次請求內存消耗較高的 Big Put 場景 (大容量單次 Put 或設置了較大cache 的 Scan,均屬于 Big Put) 或 ReigonServer 的內存比較緊張的場景。
較多的 IO 線程,適用于單次請求內存消耗低,TPS 要求 (每秒事務處理量 (TransactionPerSecond)) 非常高的場景。設置該值的時候,以監控內存為主要參考。
在 hbase-site.xml 配置文件中配置項為 hbase.regionserver.handler.count。
Region 大小設置
配置項為 hbase.hregion.max.filesize,所屬配置文件為 hbase-site.xml.,默認大小 256M。
在當前 ReigonServer 上單個 Reigon 的最大存儲空間,單個 Region 超過該值時,這個 Region會被自動 split 成更小的 Region。小 Region 對 split 和 compaction 友好,因為拆分 Region 或compact 小 Region 里的 StoreFile 速度很快,內存占用低。缺點是 split 和 compaction 會很頻繁,特別是數量較多的小 Region 不停地 split, compaction,會導致集群響應時間波動很大,Region 數量太多不僅給管理上帶來麻煩,甚至會引發一些 Hbase 的 bug。一般 512M 以下的都算小 Region。大 Region 則不太適合經常 split 和 compaction,因為做一次 compact 和 split 會產生較長時間的停頓,對應用的讀寫性能沖擊非常大。
此外,大 Region 意味著較大的 StoreFile,compaction 時對內存也是一個挑戰。如果你的應用場景中,某個時間點的訪問量較低,那么在此時做 compact 和 split,既能順利完成 split 和 compaction,又能保證絕大多數時間平穩的讀寫性能。compaction 是無法避免的,split 可以從自動調整為手動。只要通過將這個參數值調大到某個很難達到的值,比如 100G,就可以間接禁用自動 split(RegionServer 不會對未到達 100G 的 Region 做 split)。再配合 RegionSplitter 這個工具,在需要 split 時,手動 split。手動 split 在靈活性和穩定性上比起自動 split 要高很多,而且管理成本增加不多,比較推薦 online 實時系統使用。內存方面,小 Region 在設置 memstore 的大小值上比較靈活,大 Region 則過大過小都不行,過大會導致 flush 時 app 的 IO wait 增高,過小則因 StoreFile 過多影響讀性能。
關于如何解析Hbase原理以及基本運行方式和優化問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯行業資訊頻道了解更多相關知識。
新聞標題:如何解析Hbase原理以及基本運行方式和優化
標題路徑:http://m.newbst.com/article26/gejgjg.html
成都網站建設公司_創新互聯,為您提供移動網站建設、企業網站制作、營銷型網站建設、網站設計、用戶體驗、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯