背景介紹
(一)課程預覽

What?
基于HBase存儲的應用資料,建構一套大資料處理架構, 使用不同方式對HBase資料進行分析。
Why?
HBase作為開源分布式資料庫,具備高性能,高可用,海量無限擴充的特點。然而HBase查詢接口較簡單,無法滿足資料分析的需求,但HBase具有豐富資料生态,可以結合大量開源的元件對HBase進行資料分析。
Who?
大資料開發,希望了解HBase資料分析及大資料生态的使用者。
How?
本課程将從原理到代碼編寫,手把手教使用者建構基于HBase的大資料分析系統。
(二)HBase資料通路概覽
下面介紹一下HBase的資料通路方式,上方為整體架構圖。
HBase的通路方式主要有三種。第一種是通過API通路,主要是 Put/Get/Scan這三個接口。對資料過濾、聚合等稍微複雜一點的需求,可以用“filter+coprocessor”的方式結合API來處理。
第二種是通過HFile Reader/Writer。因為HBase是存儲計算分離的架構,它的資料檔案存在HDFS上,可以直接用HBase提供的HFile Reader/Writer來讀寫HBase上的資料檔案,然後通過Bulkload到HBase表中。
第三種是通過MapReduce架構封裝,它提供了幾個常用的工具類,API封裝是TableInputFormat和 TableOutputFormat。因為架構需要切分任務,它底層會按照HBase表的分區來自動為每個分區并發帶來通路資料,HFile的封裝也是一樣的。
(三)準備工作
1. 購買HBase執行個體
·購買Lindorm單機版
·Lindorm控制台 -> 執行個體詳情 -> 通路控制 -> 添加開發伺服器IP到白名單
2. 配置用戶端
·Lindorm控制台 -> 資料庫連 接 -> 寬表引擎 -> Lindorm shell下載下傳
·從控制台資料庫連結頁面,擷取到hbase-site.xml配置
3. 配置開發環境
·下載下傳安裝IDE開發環境
·安裝配置好Java環境
注:詳細操作步驟和代碼,請下載下傳Demo工程。
線上互動式分析
下面進行HBase資料線上互動系統分析,這裡的線上互動分析是指在移動HBase資料的場景下,直接對資料進行通路與分析。
(一)線上分析HBase資料 - Spark
1. Spark + HBase 架構
首先可以用“Spark+HBase”架構。
Spark是一個專門為大規模資料處理而設計的快速通用計算引擎。如上圖所示,它上面有Spark RDD與Spark SQL這些引擎可以使用。
Spark連接配接HBase的方式有兩種,一種是通過HBaseClient直接通路HBase。第二種是Spark引入HBase Connector之後,通過Spark SQL/Spark RDD就可以直接操作這個資料。
2.流程概覽
·準備Spark
下載下傳安裝Spark
·開發
1)配置開發環境
2)下載下傳demo工程
3)開發Spark作業
·打包運作
1)打包項目
2)送出Spark作業
3. HadoopRDD – InputFormat
首先看HadoopRDD的方式,上方為一個樣例的代碼。
依賴HBase用戶端,底層用TableInputFormat,底層Spark作業會自動把任務切分成Region的并發,然後對每個Region計算,然後擷取最終結果。
4. Spark Connector - SparkSQL
第二種是用SparkSQL通路HBase。SparkSQL依賴Spark Hbase Connector,像這個代碼裡面會直接建一張Spark的 表,表建好之後,就可以執行一些SQL去通路HBase的資料。
5. 直接使用HBase用戶端讀寫資料
除了上述方式,也可以直接使用HBase用戶端讀寫資料。
(二)線上分析HBase資料 - Hive
1. Hive + HBase 架構
Hive是一個基于Hadoop的資料倉庫工具,用來對大規模資料進行處理。它也提供了SQL的查詢功能,底層是将對應的SQL轉換成MapReduce的任務來執行,是以它會依賴于關系型資料庫作為MetaStore。
把整個架構搭起來之後,就可以通過SQL來執行HBase的資料分析。
2.準備工作
·安裝Hadoop
1)下載下傳安裝Hadoop
2)設定環境變量
3)配置Hadoop
4)啟動hdfs和yarn
5)驗證
·安裝MySQL
1)安裝MySql
2)準備好Hive使用MySql使用者和資料
·安裝配置Hive
1)下載下傳安裝Hive
2)配置Hive
3)添加和替換hbase依賴
4)添加Hbase配置
3.操作過程
1)建HBase外表:
CREATE EXTERNAL TABLE hbase_hive_table (key int, value string) STORED BY ‘org.apache.hadoop.hive. hbase.HBaseStorageHandler’ WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,cf1:val”) TBLPROPERTIES (“hbase.table.name” = “hbase_hive_table”, “hbase.mapred.output.outputtable” = “hbase_hive_table”);
2)SQL查詢:
select count(*) from hbase_hive_table ;
4.線上分析的弊端
弊端一:影響線上
占用HBase線上服務資源 影響應用對HBase的正常通路。
弊端二:存儲格式 相對列存,HBase存儲格式對分析不友好,分析性能差。 弊端三:資料變化
分析過程中,資料一直在變化。
離線及流式分析
除了線上分析,還有另外兩種方式,分别是離線以及流式分析。
(一)HBase資料離線處理分析
1.完整步驟
首先使用LTS (Lindorm Tunnel Service)将Hbase資料全量導出到HDFS,存儲為Parquet格式,接着開發Spark作業分析導出的Parquet檔案資料。
2. 全量導出到HDFS - Parquet格式
在HDFS頁面上可以直接建立一個任務,然後從某一個叢集把某一張表資料全量導出到一個目标的HDFS上面,格式預設為Parquet。
參考文檔:https://help.aliyun.com/document_detail/156428.html#title-ofz-4ah-45z
3. 使用Spark分析Parquet檔案
當資料導完後,下一步就是寫一個Spark作業來分析這個Parquet檔案,上方是一個樣例的代碼。
4. 離線分析的弊端
弊端一:實時性差
全量導出代價大,資料量越大資料産出越困難。
弊端二:存儲備援
資料在離線重複存儲。
弊端三:重複導出
識别增量較難,曆史資料重複導出。
(二)HBase資料流式處理分析
首先使用LTS增量訂閱HBase 資料,寫入到Kakfa,接着使用Spark Streaming對接Kafka,進行流式計算。
2. 導出到Kafka
同樣,這裡使用的也是阿裡雲的LTS産品。
LTS裡有Lindorm Streams子產品,它可以訂閱某一張或者某些表的資料,然後寫到對應的消息存儲裡面去。當這個任務建起來之後,HBase寫入資料就會實時同步到Kafka裡。底層實作原理是訂閱HBase日志,同步延遲在秒級别。
3. 使用Spark對接Kafka進行實時計算
資料增量同步到Kafka之後,使用Spark對接Kafka進行實時計算。
總結
如上圖所示,整個HBase的資料生态十分豐富,可以看到有很多開源産品,首先上遊APP、日志、資料庫等高并發寫入到HBase之後,Spark、Flink等可以直接讀取HBase資料做分析。同時它們的結果也可以批量寫入/Bulkload到HBase。
然後通過同步工具,如LTS、Kettle等,可以把HBase的資料全量同步到離線分析系統。 也可以通過增量訂閱工具,如LTS、Replication,訂閱到消息隊列,下遊再對接實時計算的産品,如Flink、Spark。
以上就是HBase的大緻生态環境。