云覆 bill 2019-02-19 21:57:54 浏览 176 评论 0
hbase
性能
数据库
集群
- spark
- aliyun
- JDBC
- html
- POLARDB
摘要: HBase Spark 分析引擎是云数据库 HBase 版提供的分析引擎, 基于 Spark 提供的复杂分析, 流式处理, 机器学习的能力. Spark 分析引擎可以对接阿里云的各种数据源, 例如: 云 HBase 数据, MongoDB,Phoenix 等, 同时也支持对接 POLARDB 数据库.
HBase Spark 分析引擎是云数据库 HBase 版提供的分析引擎, 基于 Spark 提供的复杂分析, 流式处理, 机器学习的能力. Spark 分析引擎可以对接阿里云的多种数据源, 例如: 云 HBase 数据库, MongoDB,Phoenix 等, 同时也支持对接云数据库 POLARDB.POLARDB 是阿里云自研的下一代关系型云数据库, 100% 兼容 MySQL, 性能最高是 MySQL 的 6 倍. 本文主要介绍 HBase Spark 分析引擎如何对接云数据库 POLARDB.
场景介绍
POLARDB 中经常会存储一些维度表信息, 例如: 用户维度表信息, 包含用户的 ID, 姓名, 地址等信息. 此类数据的特点是数据量小, 不经常改变.
Spark 中经常会存在一些海量事实表数据用于数据的分析, 例如用户的通话信息, 交易信息等. 此类数据的特点是数据量大, 增量更新. 用户需要在这类数据中统计, 分析挖掘有价值的内容.
例如: 用户事实表数据一般包含用户的 ID 信息, 在 Spark 侧对事实表统计分析时, 对分析的结果需要补齐用户的其他信息, 例如姓名, 地址等.
这时就可以通过 Spark 分析引擎直接和 POLARDB 的数据表做关联查询和统计分析, 而不用担心搬迁 POLARDB 的数据, 以及搬迁数据带来的数据同步问题和额外的维护工作量.
下面内容介绍在 Spark 分析引擎中如何对接云数据库 POLARDB.
在 Spark 分析引擎中创建表
本文中的 SQL 样例可以运行在 Spark 分析引擎的 SQL 服务 ThriftServer.
在 Spark 分析引擎中创建关联 POLARDB 表的语法如下:
- 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 有四个字段, col1,col2,col3,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, 分区并行读取
在 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.
来源: https://yq.aliyun.com/articles/690754