当前位置: 首页 > news >正文

云HBase Spark分析引擎对接云数据库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 (
  driver 'com.mysql.jdbc.Driver',
  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的连接地址:
undefined
testdb.test_table:testdb是POLARDB中创建的数据库名称,test_table为创建的表名称。
userpassword分别对应登陆数据库的用户名和密码。

在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 (
 driver 'com.mysql.jdbc.Driver',
 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:
ss

总结

Spark分析引擎作为大数据计算框架可以与云数据库POLARDB很容易结合在一起,在Spark分析引擎中非常便捷地关联、分析POLARDB的数据。本文简单介绍HBase Spark分析引擎与云数据库POLARDB结合的常用操作。更多内容欢迎大家使用HBase Spark分析引擎,云数据库POLARDB。

相关文章:

  • Hive基本操作
  • IDEA之配置svn
  • iPhone6 Plus、iPhone6、iPhone5S和之前版本真实分辨率
  • 云计算读书笔记(四)
  • python调用百度AI提取图片文字
  • 利用新浪微博API的Search接口做微博锐推榜
  • java中的多线程你只要看这一篇就够了
  • 查看Linux版本信息
  • Android 插件化原理-好文收集(陆续中。。。)
  • C#6.0 十大常用特性
  • 无向图的最短路径算法JAVA实现
  • 火掌柜iOS端基于CocoaPods的组件二进制化实践
  • 【深夜急报,Win10下的Linux子系统之Bash】
  • Mongodb简介及安装部署配置
  • Xargs用法详解
  • 【个人向】《HTTP图解》阅后小结
  • C++类的相互关联
  • CSS 三角实现
  • HashMap剖析之内部结构
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Next.js之基础概念(二)
  • PaddlePaddle-GitHub的正确打开姿势
  • ViewService——一种保证客户端与服务端同步的方法
  • WePY 在小程序性能调优上做出的探究
  • 高程读书笔记 第六章 面向对象程序设计
  • 深度学习入门:10门免费线上课程推荐
  • AI算硅基生命吗,为什么?
  • 阿里云ACE认证学习知识点梳理
  • 积累各种好的链接
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • $.ajax,axios,fetch三种ajax请求的区别
  • (3)llvm ir转换过程
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (小白学Java)Java简介和基本配置
  • (一)appium-desktop定位元素原理
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .gitignore文件---让git自动忽略指定文件
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net IE10 _doPostBack 未定义
  • .net6使用Sejil可视化日志
  • .Net多线程总结
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .net下的富文本编辑器FCKeditor的配置方法