Spark 讀取 Hbase 優化 --手動劃分 region 提高並行數
一. Hbase 的 region
我們先簡單介紹下 Hbase 的 架構和 region :
從物理叢集的角度看,Hbase 叢集中,由一個 Hmaster 管理多個 HRegionServer,其中每個 HRegionServer 都對應一臺物理機器,一臺 HRegionServer 伺服器上又可以有多個 Hregion(以下簡稱 region)。要讀取一個資料的時候,首先要先找到存放這個資料的 region。而 Spark 在讀取 Hbase 的時候,讀取的 Rdd 會根據 Hbase 的 region 數量劃分 stage。所以當 region 儲存設定得比較大導致 region 比較少,而 spark 的 cpu core 又比較多的時候,就會出現無法充分利用 spark 叢集所有 cpu core 的情況。今年年初我花了一個月整理了一份最適合2018年學習的大資料學習乾貨,從最基礎的大資料叢集搭建,大資料元件和專案實戰,加群834325294 註明簡書既可免費獲得。
我們再從邏輯表結構的角度看看 Hbase 表和 region 的關係。
Hbase是通過把資料分配到一定數量的region來達到負載均衡的。一個table會被分配到一個或多個region中,這些region會被分配到一個或者多個regionServer中。在自動split策略中,當一個region達到一定的大小就會自動split成兩個region。
Region由一個或者多個Store組成,每個store儲存一個columns family,每個Strore又由一個memStore和0至多個StoreFile 組成。memStore儲存在記憶體中, StoreFile儲存在HDFS上。
region是HBase中分散式儲存和負載均衡的最小單元。不同Region分佈到不同RegionServer上,但並不是儲存的最小單元。
二. Spark 讀取 Hbase 優化及 region 手動拆分
在用spark的時候,spark正是根據hbase有多少個region來劃分stage。也就是說region劃分得太少會導致spark讀取時的併發度太低,浪費效能。但如果region數目太多就會造成讀寫效能下降,也會增加ZooKeeper的負擔。所以設定每個region的大小就很關鍵了。
自0.94.0版本以來,split還有三種策略可以選擇,不過一般使用預設的分割槽策略就可以滿足需求,我們要修改的是會觸發 region 分割槽的儲存容量大小。
而在0.94.0版本中,預設的 region 大小為10G,就是說當儲存的資料達到 10 G 的時候,就會觸發 region 分割槽操作。有時候這個值可能太大,這時候就需要修改配置了。我們可以在 HBASE_HOME/conf/hbase-site.xml 檔案中,增加如下配置:
hbase.hregion.max.filesize536870912
其中的 value 值就是你要修改的觸發 region 分割槽的大小,要注意這個值是以 bit 為單位的,這裡是將region檔案的大小改為512m。
修改之後我們就可以手動 split region了,手動分割槽會自動根據這個新的配置值大小,將 region 已經儲存起來的資料進行再次進行拆分。
我們可以在 hbase shell 中使用 split 來進行操作,有以下幾種方式可以進行手動拆分。
split‘tableName’split‘namespace:tableName’split‘regionName’# format: ‘tableName,startKey,id’ split‘tableName’, ‘splitKey’split‘regionName’, ‘splitKey’
這裡使用的是 split ‘namespace:tableName’ 這種方式。其中 tableName 自不必多說,就是要拆分的表名,namespace可以在hbase的web介面中檢視,一般會是default。
使用命令之後稍等一會,hbase會根據新的region檔案大小去split,最終結果可以在web-ui的"table Details"一欄,點選具體table檢視。
以上~
相關文章
- Spark讀Hbase優化 --手動劃分region提高並行數Spark優化並行
- Spark效能優化:提高並行度、使用reduceByKeySpark優化並行
- spark讀取hbase的資料Spark
- MapReduce和Spark讀取HBase快照表Spark
- Spark讀取MongoDB資料的方法與優化SparkMongoDB優化
- hbase啟動時分配region的流程
- hbase region 合併
- HBase Region合併分析
- HBase-Region詳解
- hbase region server 無法啟動一例。Server
- HBase最佳實踐-讀效能優化策略優化
- Hbase優化優化
- HBASE-使用問題-split region
- Python中Spark讀取parquet檔案並獲取schema的JSON表示PythonSparkJSON
- HBase 讀流程解析與優化的最佳實踐優化
- spark與hbaseSpark
- spark-stage任務劃分、sparkclient執行模式Sparkclient模式
- Spark讀取Hbase報錯NoSuchMethodError: org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;SparkErrorApacheHadoopJava
- HBase工具之監控Region的可用和讀寫延時狀況
- HBase查詢優化優化
- 動態規劃之數的劃分動態規劃
- Spark讀取MySQL資料SparkMySql
- Spark效能優化Spark優化
- hive、spark優化HiveSpark優化
- spark大批量讀取Hbase時出現java.lang.OutOfMemoryError: unable to create new native threadSparkJavaErrorthread
- Spark拉取Kafka的流資料,轉插入HBase中SparkKafka
- 斜率優化動態規劃優化動態規劃
- java讀取excel為物件並進行讀寫操作JavaExcel物件
- js程式碼優化 提高執行效能JS優化
- 並行取數提升報表效能並行
- HBase實操:HBase-Spark-Read-Demo 分享Spark
- python讀取txt文字資料進行分詞並生成詞雲圖片Python分詞
- mysql優化之讀寫分離MySql優化
- Spark讀取elasticsearch資料指南SparkElasticsearch
- spark效能優化(一)Spark優化
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- HBase建模、使用以及優化優化
- Apache HBase MTTR 優化實踐Apache優化