天天看點

實戰: 基于HBase的大資料線上分析

背景介紹

(一)課程預覽

實戰: 基于HBase的大資料線上分析

What?

基于HBase存儲的應用資料,建構一套大資料處理架構, 使用不同方式對HBase資料進行分析。

Why?

HBase作為開源分布式資料庫,具備高性能,高可用,海量無限擴充的特點。然而HBase查詢接口較簡單,無法滿足資料分析的需求,但HBase具有豐富資料生态,可以結合大量開源的元件對HBase進行資料分析。

Who?

大資料開發,希望了解HBase資料分析及大資料生态的使用者。

How?

本課程将從原理到代碼編寫,手把手教使用者建構基于HBase的大資料分析系統。

(二)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 架構

實戰: 基于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

實戰: 基于HBase的大資料線上分析

首先看HadoopRDD的方式,上方為一個樣例的代碼。

依賴HBase用戶端,底層用TableInputFormat,底層Spark作業會自動把任務切分成Region的并發,然後對每個Region計算,然後擷取最終結果。

4. Spark Connector - SparkSQL

實戰: 基于HBase的大資料線上分析

第二種是用SparkSQL通路HBase。SparkSQL依賴Spark Hbase Connector,像這個代碼裡面會直接建一張Spark的 表,表建好之後,就可以執行一些SQL去通路HBase的資料。

5. 直接使用HBase用戶端讀寫資料

實戰: 基于HBase的大資料線上分析

除了上述方式,也可以直接使用HBase用戶端讀寫資料。

(二)線上分析HBase資料 - Hive 

1. Hive + HBase 架構

實戰: 基于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 ;

實戰: 基于HBase的大資料線上分析

4.線上分析的弊端

弊端一:影響線上

占用HBase線上服務資源 影響應用對HBase的正常通路。

弊端二:存儲格式 相對列存,HBase存儲格式對分析不友好,分析性能差。 弊端三:資料變化

分析過程中,資料一直在變化。

離線及流式分析

除了線上分析,還有另外兩種方式,分别是離線以及流式分析。

(一)HBase資料離線處理分析 

1.完整步驟

實戰: 基于HBase的大資料線上分析
實戰: 基于HBase的大資料線上分析

首先使用LTS (Lindorm Tunnel Service)将Hbase資料全量導出到HDFS,存儲為Parquet格式,接着開發Spark作業分析導出的Parquet檔案資料。

2. 全量導出到HDFS - Parquet格式

實戰: 基于HBase的大資料線上分析

在HDFS頁面上可以直接建立一個任務,然後從某一個叢集把某一張表資料全量導出到一個目标的HDFS上面,格式預設為Parquet。

參考文檔:https://help.aliyun.com/document_detail/156428.html#title-ofz-4ah-45z

3. 使用Spark分析Parquet檔案

實戰: 基于HBase的大資料線上分析

當資料導完後,下一步就是寫一個Spark作業來分析這個Parquet檔案,上方是一個樣例的代碼。

4. 離線分析的弊端

弊端一:實時性差

全量導出代價大,資料量越大資料産出越困難。

弊端二:存儲備援

資料在離線重複存儲。

弊端三:重複導出

識别增量較難,曆史資料重複導出。

(二)HBase資料流式處理分析

實戰: 基于HBase的大資料線上分析
實戰: 基于HBase的大資料線上分析

首先使用LTS增量訂閱HBase 資料,寫入到Kakfa,接着使用Spark Streaming對接Kafka,進行流式計算。

2. 導出到Kafka

實戰: 基于HBase的大資料線上分析

同樣,這裡使用的也是阿裡雲的LTS産品。

LTS裡有Lindorm Streams子產品,它可以訂閱某一張或者某些表的資料,然後寫到對應的消息存儲裡面去。當這個任務建起來之後,HBase寫入資料就會實時同步到Kafka裡。底層實作原理是訂閱HBase日志,同步延遲在秒級别。

3. 使用Spark對接Kafka進行實時計算

實戰: 基于HBase的大資料線上分析

資料增量同步到Kafka之後,使用Spark對接Kafka進行實時計算。

總結

實戰: 基于HBase的大資料線上分析

如上圖所示,整個HBase的資料生态十分豐富,可以看到有很多開源産品,首先上遊APP、日志、資料庫等高并發寫入到HBase之後,Spark、Flink等可以直接讀取HBase資料做分析。同時它們的結果也可以批量寫入/Bulkload到HBase。

然後通過同步工具,如LTS、Kettle等,可以把HBase的資料全量同步到離線分析系統。 也可以通過增量訂閱工具,如LTS、Replication,訂閱到消息隊列,下遊再對接實時計算的産品,如Flink、Spark。

以上就是HBase的大緻生态環境。

繼續閱讀