初始化数据
创建 SequoiaDB 集合空间和集合与 SparkSQL 进行关联,并插入部分记录作为后续的实验数据。
创建数据库和数据表
进入 MySQL Shell,在 MySQL 实例中创建数据库 company,以及 employee 表。
1)使用 Linux 命令进入 MySQL Shell;
1 | /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root |
2)创建 company 数据库;
1 | CREATE DATABASE company; |
3)切换到 company 数据库;
1 | USE company; |
4)创建 employee 表,将同步在 SequoiaDB 巨杉数据引擎中创建分区表;
1 | CREATE TABLE employee |
5)向 employee 表中写入数据;
1 | INSERT INTO employee VALUES |
6)退出 MySQL Shell;
1 | \q |
选取优先读备的协调节点
给 SparkSQL 配置一个专用的协调节点进行数据访问,使用该协调节点进行统计分析查询。
1)在 Linux Shell 查看当前集群中的协调节点;
1 | sdblist -l | grep -E "Name|coord" |
操作截图:
2)查看 MySQL 实例使用的协调节点;
1 | /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -e "SHOW VARIABLES LIKE 'sequoiadb_conn%';" |
操作截图:
发现集群中有协调节点 11810、21810、31810 三个,MySQL 实例使用 11810 节点,于是在创建 SparkSQL 表时配置专用协调节点 21810。
在 SparkSQL 中建表
进入 SparkSQL Beeline Shell,在 SparkSQL 实例中创建 employee 表并与 SequoiaDB 中的集合空间、集合关联。
1)查看 Spark 的 Worker 和 Master 是否已经启动;
1 | jps |
操作截图:
Note:
如果显示的进程名称与预期不符,请稍等初始化完成并重试该步骤。
2)登录 Beeline 连接到 SparkSQL 实例;
1 | /opt/spark/bin/beeline -u 'jdbc:hive2://localhost:10000' |
3)创建并切换至 company 数据库;
1 | CREATE DATABASE company; |
4)创建 employee 表;
创建 employee 表,并且与 SequoiaDB 中的集合 company.employee 进行关联;
1 | CREATE TABLE employee |
Note:
通过指定
host
可以限定查询连接的协调节点,设置preferredinstance
参数为 “S” 表示查询时优先读取备数据节点的数据,更详细的参数配置可参考 SequoiaDB-SparkSQL 参数说明。
5)退出 Beeline Shell;
1 | !quit |
操作截图:
确定数据组 group1 主节点
使用 SequoiaDB 的系统命令 sdblist 确定数据组 group1 的主节点,以便确认联机交易跟统计分析是否在同数据组的不同数据节点上执行。
在 Linux Shell 中执行以下命令,确认数据组 group1 的主节点;
1 | sdblist -l | grep -E "Name|group1" |
操作截图:
从查询结果可以看出,数据组 group1 中,31820 节点是主节点,11820、21820 两个节点是备节点。
验证联机业务与统计分析的相互隔离
分别在 MySQL 端、SparkSQL 端进行对表 employee 的查询操作,会发现在不同的 SQL 实例上进行查询,在同数据组内,会从不同的数据节点上进行数据读取。下面以数据组 group1 为例进行验证。
检查数据组 group1 各数据节点的数据读取量
1)使用嵌入命令模式连接 SequoiaDB 巨杉数据库协调节点;
1 | sdb 'db = new Sdb("localhost", 11810)' |
2)使用 snapshot ( SDB_LIST_COLLECTIONS ) 查询集合 company.employee 在数据组 group1 各数据节点的数据读取量;
1 | sdb 'db.snapshot( SDB_LIST_COLLECTIONS , { Name: "company.employee" } )' | grep -E "NodeName|TotalDataRead|GroupName" |
操作截图:
在 MySQL 端查询 employee 表并观察数据读取状况
1)使用 Linux 命令进入 MySQL Shell;
1 | /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root |
2)对 employee 表进行全表查询;
1 | SELECT * FROM company.employee; |
3)退出 MySQL Shell;
1 | \q |
操作截图:
4)使用 snapshot ( SDB_LIST_COLLECTIONS ) 查询集合 company.employee 在数据组 group1 各数据节点的数据读取量;
1 | sdb 'db.snapshot( SDB_LIST_COLLECTIONS , { Name: "company.employee" } )' | grep -E "NodeName|TotalDataRead|GroupName" |
操作截图:
从查询结果可以看出,MySQL 实例上的查询,在数据组 group1 中,主节点 31820 上的数据查询量增加了,备节点 11820、21820 两个节点上的查询量未增加。
在 SparkSQL 端查询 employee 表并观察数据读取状况
1)登录 Beeline 连接到 SparkSQL 实例;
1 | /opt/spark/bin/beeline -u 'jdbc:hive2://localhost:10000' |
2)切换到 company 数据库;
1 | USE company; |
3)对 employee 表进行全表查询;
1 | SELECT * FROM employee; |
4)退出 Beeline Shell;
1 | !quit |
操作截图:
5)使用 snapshot ( SDB_LIST_COLLECTIONS ) 查询集合 company.employee 在数据组 group1 各数据节点的数据读取量;
1 | sdb 'db.snapshot( SDB_LIST_COLLECTIONS , { Name: "company.employee" } )' | grep -E "NodeName|TotalDataRead|GroupName" |
操作截图:
从查询结果可以看出,SparkSQL 实例上的查询,在数据组 group1 中,主节点 31820 上的数据查询量没有增加,备节点 21820 上的查询量增加。
Note:
本环境中数据节点采用三副本架构,包括一个主节点和两个备节点;配置优先从备节点中读取数据,会在两个可选备节点中随机选取其中一个,所以从 SaprkSQL 实例上的查询,数据查询量增加的不一定是 21820 还可能是 11820。