HBase應用 | 雲HBase Spark分析引擎對接雲數據庫POLARDB

HBase Spark分析引擎是雲數據庫HBase版提供的分析引擎,基於Spark提供的複雜分析、流式處理、機器學習的能力。Spark分析引擎能夠對接阿里雲的多種數據源,例如:雲HBase數據庫、MongoDB、Phoenix等,同時也支持對接雲數據庫POLARDB。POLARDB是阿里雲自研的下一代關係型雲數據庫,100%兼容MySQL,性能最高是MySQL的6倍。本文主要介紹HBase Spark分析引擎如何對接雲數據庫POLARDB。html

場景介紹

POLARDB中常常會存儲一些維度表信息,例如:用戶維度表信息,包含用戶的ID,姓名,地址等信息。此類數據的特色是數據量小,不常常改變。
Spark 中常常會存在一些海量事實表數據用於數據的分析,例如用戶的通話信息、交易信息等。此類數據的特色是數據量大、增量更新。用戶須要在這類數據中統計、分析挖掘有價值的內容。
例如:用戶事實表數據通常包含用戶的ID信息,在Spark側對事實表統計分析時,對分析的結果須要補齊用戶的其餘信息,例如姓名、地址等。
這時就能夠經過Spark分析引擎直接和POLARDB的數據表作關聯查詢和統計分析,而不用擔憂搬遷POLARDB的數據,以及搬遷數據帶來的數據同步問題和額外的維護工做量。
下面就看下在Spark分析引擎中如何關聯雲數據庫POLARDB。
mysql

在Spark分析引擎中建立表

本文中的SQL樣例能夠運行在Spark分析集羣的SQL服務ThriftServer:sql

https://help.aliyun.com/document_detail/93902.html?spm=a2c4e.11153940.blogcont690754.15.454833521E4hrG數據庫

在Spark分析引擎中建立關聯POLARDB表的語法以下:apache

 

 

create table jdbc_polordb
using org.apache.spark.sql.jdbc
options (
  url "jdbc:mysql://pc-xxx.rwlb.rds.aliyuncs.com:3306",
  dbtable "testdb.test_table",
  user 'testuser',
  password 'xxx'
)

 

樣例使用的是Spark的JDBC DataSource API。每一個參數意義以下:性能優化

jdbc:mysql://pc-xxx.rwlb.rds.aliyuncs.com:3306:POLARDB的數據庫地址,從POLARDB集羣中獲取,能夠是集羣地址,主地址或者SQL加速地址,對應下圖中POLARDB的鏈接地址:
圖片
併發

testdb.test_table:testdb是POLARDB中建立的數據庫名稱,test_table爲建立的表名稱。
user和password分別對應登錄數據庫的用戶名和密碼。
框架

在Spark分析引擎中操做表

在Spark分析引擎中建立表後,能夠直接在Spark分析引擎中操做POLARDB表。表的操做經常使用的有:查詢表、插入數據、刪除表。
1.查詢樣例:
機器學習

 

 

select * from jdbc_polordb limit 5;
+-----+---------+--+
| id  |  name   | +-----+---------+--+ | 9   | name9   |
| 15  | name15  | | 9   | name99  |
| 28  | name28  | | 15  | name15  |
+-----+---------+--+
select * from jdbc_polordb where id >= 96;
+------+-----------+--+
|  id  |   name    | +------+-----------+--+ | 96   | name96    |
| 99   | name99    | | 98   | name98    |
| 99   | name99    | | 97   | name97    |
| 100  | name100   | | 200  | testdata  |
+------+-----------+--+

 

2.插入數據樣例:性能

 

 

insert into jdbc_polordb values(200'testdata');
+---------+--+
| Result  |
+---------+--+
+---------+--+
select * from jdbc_polordb where id=200;
+------+-----------+--+
|  id  |   name    |
+------+-----------+--+
| 200  | testdata  |
+------+-----------+--+

 

3.與其餘表join樣例:

 

 

select j.id, j.name from jdbc_polordb j join test_parquet t on j.id = t.id;
+-----+--------+--+
| id  |  name  |
+-----+--------+--+
| 1   | name1  |
| 3   | name3  |
| 5   | name5  |
+-----+--------+--+

 

4. 刪除表樣例(Spark側刪除表不會刪除POLARDB中的表):

 

 

drop table jdbc_polordb;
+---------+--+
| Result  |
+---------+--+
+---------+--+

 

Spark分析引擎查詢POLARDB性能優化

Spark分析引擎中查詢POLARDB表性能方面提供了以下的優化能力:
1.列值裁剪
根據用戶的SQL語句在POLARDB中獲取須要字段的數據。例如,POLARDB中的表test_table有四個字段,col一、col二、col三、col4。 Spark中的查詢語句爲:

 

 

select col1, col3 from jdbc_polordb

 

則Spark分析引擎只會獲取表test_table中col1和col3兩個字段對應的數據,減小數據量的獲取。

2.過濾條件下推
Spark分析引擎支持經常使用的過濾條件下推,例如:=,>,>=,<,<=,is null, is not null,like xx%, like %xx, like %xx%,in,not。查詢SQL如:

 

 

select * from jdbc_polordb where id >= 96;
select * from jdbc_polordb where id=200;

 

Spark分析引擎會把過濾條件id=200,id>=96下推到POLARDB,減小數據量的獲取,提高查詢性能。

3.分區並行讀取http://www.changhai120.com/
在Spark分析引擎中建立JDBC表時能夠指定分區,查詢會按照分區字段和分區數併發查詢。語法以下:

 

 

create table jdbc_polordb
using org.apache.spark.sql.jdbc
options (
 url "jdbc:mysql://pc-xxx.rwlb.rds.aliyuncs.com:3306",
 dbtable "testdb.test_table",
 user 'testuser',
 password 'xxx',
 partitionColumn 'id',
 lowerBound '20',
 upperBound '80',
 numPartitions '5'
)

 

partitionColumn:是須要分區的字段名稱,對應POLARDB中表的字段;

lowerBound:爲對應字段的下界值;
upperBound:爲對應字段的上界值;
numPartitions:爲分區數。
在此基礎上執行select * from jdbc_polordb,Spark分析引擎會下發5個並行的Job查詢POLARDB數據庫。下圖爲Spark分析引擎的並行Job:

圖片

 

總結

Spark分析引擎做爲大數據計算框架能夠與雲數據庫POLARDB很容易結合在一塊兒,在Spark分析引擎中很是便捷地關聯、分析POLARDB的數據。本文簡單介紹HBase Spark分析引擎與雲數據庫POLARDB結合的經常使用操做。更多內容歡迎你們使用HBase Spark分析引擎,雲數據庫POLARDB。

相關文章
相關標籤/搜索