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。