SparkSQL实例管理
一、SparkSQL实例创建与使用
1. 课程介绍
本课程将带领您在已经部署 SequoiaDB 巨杉数据库引擎及创建了 MySQL 实例的环境中,进行 SparkSQL 实例的安装部署并启动 Spark Thrift Server 服务使用 Beeline 客户端进行数据操作。
SparkSQL 简介
SparkSQL 是 Spark 产品中一个组成部分,SQL 的执行引擎使用 Spark 的 RDD 和 Dataframe 实现。目前 SparkSQL 已经可以完整运行 TPC-DS99 测试,标志着 SparkSQL 在数据分析和数据处理场景上技术进一步成熟。SequoiaDB 巨杉数据库为 Spark 开发了 SequoiaDB for Spark 的连接器,让 Spark 支持从 SequoiaDB 中并发获取数据,再完成相应的数据计算。
Spark Thrift Server 介绍
Spark Thrift Server 是 Spark 社区基于 HiveServer2 实现的一个 Thrift 服务,旨在无缝兼容 HiveServer2。
Spark Thrift Server 的接口和协议都和 HiveServer2 完全一致,因此部署好 Spark Thrift Server 后,可以直接使用 hive 的 beeline 客户端访问 Spark Thrift Server 执行相关语句。
请点击右侧选择使用的实验环境
部署架构:
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SparkSQL 实例节点, 1 个引擎协调节点, 1 个编目节点与 3 个数据节点。
图片描述
详细了解 SequoiaDB 巨杉数据库系统架构:
SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本;SequoiaDB 巨杉数据库引擎、SequoiaSQL-MySQL 实例和 SequoiaDB-Spark 连接组件均为 3.4 版本;SparkSQL 版本为 2.4.4;JDK 版本为 openjdk1.8。
2. 切换用户及查看数据库版本
切换到系统用户 sdbadmin,并查看 SequoiaDB 巨杉数据库引擎的版本。
切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户为 sdbadmin。
su - sdbadmin
用户 sdbadmin 的密码为 sdbadmin 。
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
4. 查看节点启动列表
查看 SequoiaDB 巨杉数据库引擎节点列表:
sdblist
copy
操作截图:
图片描述
Note:
如果显示的节点数量与预期不符,请稍等初始化完成并重试该步骤。
C: 编目节点,S:协调节点,D:数据节点
5. 安装 Spark 实例
下面开始安装 Spark 实例,并对 Spark 实例进行必要的配置。
解压 Spark 安装包
1)检查 Spark 安装包;
ls -trl /home/sdbadmin/soft/
copy
操作截图:
1542-610-1
2)解压 Spark 安装包;
tar -zxf /home/sdbadmin/soft/spark-2.4.4-bin-hadoop2.7.tar.gz -C /opt
copy
添加驱动包
1)拷贝 SequoiaDB for Spark 的连接器到 Spark 的 jars 目录下;
cp /opt/sequoiadb/spark/spark-sequoiadb_2.11-3.4.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/
copy
2)拷贝 MySQL 驱动到 Spark 的 jars 目录下;
cp /home/sdbadmin/soft/mysql-jdbc.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/
copy
3)拷贝 SequoiaDB 的 JAVA 驱动到 Spark 的 jars 目录下;
cp /opt/sequoiadb/java/sequoiadb-driver-3.4.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/
copy
设置免密
1)执行 ssh-keygen 生成公钥和密钥,执行后连续回车即可;
ssh-keygen -t rsa
copy
2)执行 ssh-copy-id,把公钥拷贝到本机的 sdbadmin 用户;
ssh-copy-id sdbadmin@sdbserver1
copy
Note:
sdbadmin 的密码是:sdbadmin 。 单机不需要拷贝到其它服务器上,如果是多机部署,需要配置所有服务器的互相关系。
配置 Spark
1)设置 spark-env.sh;
从模板中复制一份 spark-env.sh 脚本:
cp /opt/spark-2.4.4-bin-hadoop2.7/conf/spark-env.sh.template /opt/spark-2.4.4-bin-hadoop2.7/conf/spark-env.sh
copy
在 spark-env.sh 中设置 WORKER 的数量和 MASTER 的 IP;
echo "SPARK_WORKER_INSTANCES=2" >> /opt/spark-2.4.4-bin-hadoop2.7/conf/spark-env.sh
echo "SPARK_MASTER_IP=127.0.0.1" >> /opt/spark-2.4.4-bin-hadoop2.7/conf/spark-env.sh
copy
2)复制以下代码到实验环境终端执行,用于创建设置元数据信息的数据库配置文件 hive-site.xml;
cat > /opt/spark-2.4.4-bin-hadoop2.7/conf/hive-site.xml << EOF
<configuration>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>metauser</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>metauser</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>true</value>
<description>creates necessary schema on a startup if one doesn't exist. set this to false, after creating it once</description>
</property>
</configuration>
EOF
配置 Spark 元数据库
1)使用 Linux 命令进入 MySQL Shell;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
copy
2)创建 metauser 用户;
CREATE USER 'metauser'@'%' IDENTIFIED BY 'metauser';
copy
操作截图:
1542-610-3
3)给 metauser 用户授权;
GRANT ALL ON . TO 'metauser'@'%';
操作截图:
1542-610-4
4)创建 Spark 元数据库;
CREATE DATABASE metastore CHARACTER SET 'latin1' COLLATE 'latin1_bin';
操作截图:
1542-610-5
5)刷新权限;
FLUSH PRIVILEGES;
copy
操作截图:
1542-610-6
6) 退出 MySQL Shell;
\q
6. 启动 Spark 服务
2.4.4-bin-hadoop2.7/sbin/start-all.sh
copy
操作截图:
1542-610-7
2)启动 thriftserver 服务;
/opt/spark-2.4.4-bin-hadoop2.7/sbin/start-thriftserver.sh
copy
操作截图:
1542-610-8
3) 检查进程启动状态;
jps
copy
4) 检查端口监听状态;
netstat -anp | grep 10000
copy
操作截图:
1542-610-9
Note:
本实验环境性能较低,启动 Spark 的耗时较长,请耐心等待 10000 端口的监听状态;如截图所示,此时 10000 端口监听成功即可继续执行后续操作。
6. 在 SequoiaDB 建立集合空间和集合
进入 SequoiaDB Shell,在 SequoiaDB 巨杉数据库引擎中创建 company 集合空间和 employee 集合。
1)使用 Linux 命令进入 SequoiaDB Shell 命令行;
sdb
copy
2)使用 JavaScript 语法,连接协调节点,获取数据库连接;
var db = new Sdb("localhost", 11810);
copy
2)创建 company_domain 逻辑域;
db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
copy
3)创建 company 集合空间;
db.createCS("company", { Domain: "company_domain" } );
copy
4)创建 employee 集合;
db.company.createCL("employee", { "ShardingKey": { "_id": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
5)退出 SequoiaDB Shell;
quit;
copy
7. 在 SparkSQL 关联集合空间和集合
SparkSQL 通过 Spark-SequoiaDB 连接组件关联 SequoiaDB 的集合空间和集合,将 SequoiaDB 巨杉数据库引擎作为 SparkSQL 的数据源进行相应的数据计算。
SparkSQL 与 SequoiaDB 的集合空间和集合关联
1)使用 Beeline 客户端工具连接至 thriftserver 服务;
/opt/spark-2.4.4-bin-hadoop2.7/bin/beeline -u 'jdbc:hive2://localhost:10000'
copy
2)创建并切换至 company 数据库;
CREATE DATABASE company;
USE company;
copy
3)创建 employee 表;
创建 employee 表,并且与 SequoiaDB 中的集合 employee 进行关联:
CREATE TABLE employee
(
empno INT,
ename STRING,
age INT
)
USING com.sequoiadb.spark OPTIONS
(
host 'localhost:11810',
collectionspace 'company',
collection 'employee'
);
copy
Note:
当前环境未开启鉴权,因此忽略了 username 和 password 参数。
操作截图:
1542-610-11
SequoiaDB-SparkSQL 建表语法说明
在 SparkSQL 中关联 SequoiaDB 集合空间和集合的 SQL 语法如下;
CREATE <[TEMPORARY] TABLE | TEMPORARY VIEW> <tablename> [(SCHEMA)]
USING com.sequoiadb.spark OPTIONS (, , ...);
copy
语法说明:</tablename>
TEMPORARY 表示为临时表或视图,只在创建表或视图的会话中有效,会话退出后自动删除。
表名后紧跟的 SCHEMA 可不填,连接器会自动生成。自动生成的 SCHEMA 字段顺序与集合中记录的顺序不一致,因此如果对 SCHEMA 的字段顺序有要求,应该显式定义 SCHEMA。
OPTIONS 为参数列表,参数是键和值都为字符串类型的键值对,其中值的前后需要有单引号,多个参数之间用逗号分隔。
SequoiaDB-SparkSQL 建表参数说明
下面是部分常用的 SequoiaDB-SparkSQL 建表参数说明,完整的建表参数请参考 SequoiaDB-SparkSQL 参数说明。
host :SequoiaDB 协调节点/独立节点地址,多个地址以 “,” 分隔。例如:“server1:11810, server2:11810”。
collectionspace :集合空间名称。
collection :集合名称(不包含集合空间名称)。
username :数据库用户名。
passwordtype : 密码类型,取值为“cleartext”或“file”,分别表示明文密码和文件密钥。
password :数据库用户名对应的用户密码。
preferredinstance :指定分区优先选择的节点实例。
8. 在 Beeline 中进行数据操作
SequoiaDB-SparkSQL 支持通过连接器自动生成 SCHEMA 来创建关联表,这样可以在建表时不指定 SCHEMA 信息。
1)通过连接器自动生成 SCHEMA 来创建 employee_auto_schema 表;
CREATE TABLE employee_auto_schema USING com.sequoiadb.spark OPTIONS
(
host 'localhost:11810',
collectionspace 'company',
collection 'employee'
);
copy
Note:
通过连接器自动生成 SCHEMA,要求在建表时 SequoiaDB 的关联集合中就已经存在数据记录。
2)查看表 employee_auto_schema 的结构信息;
DESC employee_auto_schema;
copy
操作截图:
1542-610-14
3)查询 employee_auto_schema 的数据记录;
SELECT * FROM employee_auto_schema;
copy
Note:
SparkSQL 表 employee 和 employee_auto_schema 关联的都是 SequoiaDB 中的集合 company.employee,所以这两张 SparkSQL 表的对应数据是完全一致的。
9. 通过连接器自动生成 Schema 创建表
在 Beeline 客户端中对 SequoiaDB 巨杉数据库的集合进行数据写入、查询操作。
1)写入数据;
INSERT INTO employee VALUES ( 10001, 'Georgi', 48 );
INSERT INTO employee VALUES ( 10002, 'Bezalel', 21 );
INSERT INTO employee VALUES ( 10003, 'Parto', 33 );
INSERT INTO employee VALUES ( 10004, 'Chirstian', 40 );
copy
1542-610-12
2)进行数据查询;
SELECT * FROM employee;
10. 通过 SQL 结果集创建表
SequoiaDB-SparkSQL 支持 CREATE TABLE ... AS SELECT ... 语法,通过 SQL 结果集创建新表。
通过 SQL 结果集创建表
1)通过已有表 employee 创建表 employee_bak,并将表中的数据存放到指定域和集合空间中;
CREATE TABLE employee_bak USING com.sequoiadb.spark OPTIONS
(
host 'localhost:11810',
domain 'company_domain',
collectionspace 'company',
collection 'employee_bak',
autosplit true,
shardingkey '{_id:1}',
shardingtype 'hash',
compressiontype 'lzw'
) AS SELECT * FROM employee;
copy
操作截图:
图片描述
2)查看 employee_bak 表中的数据;
SELECT * FROM employee_bak;
copy
3)退出 Beeline Shell;
!quit
copy
使用 CREATE TABLE ... AS SELECT ... 语法建表参数说明
下面是部分 SequoiaDB-SparkSQL 使用 CREATE TABLE ... AS SELECT ... 语法建表的参数说明,完整的建表参数请参考 SequoiaDB-SparkSQL 参数说明。
host :SequoiaDB 协调节点/独立节点地址,多个地址以 “,” 分隔。例如:“server1:11810, server2:11810”。
domain :创建集合空间时指定所属域。如果集合空间已存在,则忽略该参数。
collectionspace :集合空间名称。
collection :集合名称(不包含集合空间名称)。
autosplit :创建集合时指定是否自动切分。必须配合散列分区和域使用。
shardingkey :创建集合时指定的分区键。
shardingtype :创建集合时指定的分区类型,取值可以是“hash”和“range”,分别表示散列分区和范围分区。
compressiontype :创建集合时指定的压缩类型,取值可以是“none”、“lzw”和“snappy”,“none”表示不进行压缩。
11. 总结
通过本课程,我们学习了如何在安装有 SequoiaDB 巨杉数据库及 MySQL 实例的环境中安装 Spark,并且学习了如何在 SparkSQL 中操作 SequoiaDB 巨杉数据库的数据。
今天我们学习到的知识点为:
SequoiaDB 集合空间、集合的创建
SparkSQL 实例的配置
SparkSQL 实例中操作 SequoiaDB 巨杉数据库的数据
二、图形化报表工具对接
1. 课程介绍
本课程将带领您在已经部署 SequoiaDB 巨杉数据库引擎及 SparkSQL 实例的环境中,进行图形化报表工具 Pentaho 的安装,并与 SparkSQL 的对接。
SequoiaDB + SparkSQL 还可以与多款报表工具进行对接,了解 SequoiaDB + SparkSQL + SmartBI 的相关内容,可以参考 SequoiaDB + SparkSQL 与 SmartBI 整合教程。
Pentaho 简介
Pentaho 是世界上最流行的开源商务智能软件,以工作流为核心的,强调面向解决方案而非工具组件的,基于 Java 平台的商业智能套件 BI。Pentaho 分为商业版和社区版,社区版除了不包含商业版中特有的 Pentaho Analyzer、原厂专业支持服务、技术文档等,在其他绝大部分常用功能上,与商业版保持一致。本文以社区版 7.0 为例,演示 Pentaho 与 SequoiaDB + SparkSQL 对接及使用。
Pentaho 社区版(7.0)下载地址为:
请点击右侧选择使用的实验环境
部署架构:
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-SparkSQL 数据库实例节点, 1 个引擎协调节点, 1 个编目节点与 3 个数据节点。
图片描述
详细了解 SequoiaDB 巨杉数据库系统架构:
SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例均为 3.4 版本。
2. 切换用户及查看数据库版本
切换到系统用户 sdbadmin,并查看 SequoiaDB 巨杉数据库引擎的版本。
切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户为 sdbadmin。
1)右键实验环境桌面空白处选择 Open Terminal Here 打开终端;
820-2
2)切换到 sdbadmin 用户;
su - sdbadmin
copy
Note:
用户 sdbadmin 的密码为 sdbadmin 。
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
3. 查看节点启动列表
切换到系统用户 sdbadmin,并查看 SequoiaDB 巨杉数据库引擎的版本。
切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户为 sdbadmin。
1)右键实验环境桌面空白处选择 Open Terminal Here 打开终端;
820-2
2)切换到 sdbadmin 用户;
su - sdbadmin
copy
Note:
用户 sdbadmin 的密码为 sdbadmin 。
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
4. Pentaho 的安装
Pentaho 下载得到的安装文件为 pentaho-server-ce-7.0.0.0-25.zip,已放置在 sdbadmin 用户的 home 目录。社区版 Pentaho 安装仅需要解压安装文件到指定目录即可,适用于 Windows 和 Linux 环境。
解压 Pentaho 安装包:
unzip -q /home/sdbadmin/pentaho-server-ce-7.0.0.0-25.zip -d /opt
5. Pentaho 对接 SequoiaDB + SparkSQL
Pentaho 在默认情况下,并不能直接和 SparkSQL 进行通信,但是它支持 Hadoop Hive2 的 JDBC 访问接口,将相关的开发驱动拷贝到 Pentaho 的指定目录即可使用。
配置 SparkSQL 驱动
将 SparkSQL 的开发驱动拷贝一份到 Pentaho 解压目录下的 tomcat\lib 目录中。
cp /opt/spark/jars/hadoop-common-2.7.3.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/hive-exec-1.2.1.spark2.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/hive-jdbc-1.2.1.spark2.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/hive-metastore-1.2.1.spark2.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/httpclient-4.5.6.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/httpcore-4.4.10.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/libthrift-0.9.3.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/log4j-1.2.17.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/slf4j-api-1.7.16.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/slf4j-log4j12-1.7.16.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/spark-hive-thriftserver_2.11-2.4.5.jar /opt/pentaho-server/tomcat/lib/
cp /opt/spark/jars/spark-network-common_2.11-2.4.5.jar /opt/pentaho-server/tomcat/lib/
copy
修改 Pentaho 配置
1)Pentaho 依赖 Tomcat 提供服务,默认端口号为 8080,与 SparkSQL 服务页面端口冲突,因此需要修改端口号,这里修改为 8180;
sed -i 's/<Connector URIEncoding="UTF-8" port="8080"/<Connector URIEncoding="UTF-8" port="8180"/g' /opt/pentaho-server/tomcat/conf/server.xml
copy
启动 Pentaho
配置好 Pentaho 后,用户只需要启动 Pentaho 即可正常使用。
/opt/pentaho-server/start-pentaho.sh
6. Spark 服务启动
Pentaho 通过 Hadoop Hive2 的 JDBC 方式与 SparkSQL 进行通信,所以需要启动 Spark 和 Spark Thrift Server 服务。
1) 启动 Spark;
/opt/spark/sbin/start-all.sh
copy
操作截图:
1542-610-7
2)启动 thriftserver;
/opt/spark/sbin/start-thriftserver.sh
copy
操作截图:
1542-610-8
3) 检查进程启动状态;
jps
copy
4) 检查端口监听状态;
netstat -anp | grep 10000
copy
操作截图:
1542-610-9
Note:
本实验环境性能参数较低,启动 Spark 的耗时较长,请耐心等待 10000 端口的监听状态;如截图所示,此时 10000 端口监听成功即可继续执行后续操作。
7. Pentaho 的使用
本小节演示如何通过 Pentaho 的 WEB 页面操作新增数据源并进行连接。
在 SparkSQL 中创建数据库
1)登录 Beeline 客户端连接 SparkSQL 实例;
/opt/spark/bin/beeline -u 'jdbc:hive2://localhost:10000'
copy
2)在 SparkSQL 中创建 company 数据库,用于连接测试;
CREATE DATABASE company;
copy
3)退出 Beeline 客户端;
!quit
copy
登录 Pentaho
用户在按照以上步骤设置好 Pentaho 和 SequoiaDB 对接之后,就可以在浏览器上输入 http://localhost:8180 地址,登录到 Pentaho 的操作界面。
Pentaho 默认提供管理员账户及一般权限账户,并提供密码,第一次登录时以默认密码登录后可以在用户权限管理菜单中进行用户、角色的管理。本文以管理员账户 Admin 登录进行后续操作,按照图示编号顺序依次点击即可登陆。
1542-620-3
新建数据库连接
1)用户在登录 Pentaho 的用户操作台后,在左上角点击“Manage Data Sources”,在弹出的对话框中选择新建连接;
1542-620-4
2)在弹出的窗口中,依次点击如下按钮,进入新建数据库连接页面;
1542-620-5
3)在数据库类型框中选择 Hadoop Hive 2,接入方式选择 Native(JDBC),并依次填入连接名称、主机名、数据库名、端口号、数据库用户、数据库密码(与数据库用户名相同);
1542-620-6
4)设置无误后点击测试,显示 Success 即表示配置成功;
1542-620-7
5)测试成功后,点击 OK,保存数据库连接配置即可正常使用;
1542-620-8
8. 制作一个简单的折线图
本章节将在 SequoiaDB 巨杉数据库引擎中创建集合空间和集合,并在 SparkSQL 中创建对应的映射表,为折线图提供基础数据。
初始化数据
1)使用 Linux 命令进入 SequoiaDB Shell 命令行;
sdb
copy
2)连接 SequoiaDB 数据库;
var db = new Sdb("localhost", 11810);
copy
3)创建 company_domain 逻辑域;
db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
copy
4)创建 company 集合空间;
db.createCS("company", { Domain: "company_domain" } );
copy
5)创建 employee 集合;
db.company.createCL("employee", { "ShardingKey": { "_id": 1}, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
6)退出 SequoiaDB Shell;
quit;
copy
操作截图:
1542-620-9
7)登录 Beeline 客户端连接 SparkSQL 实例;
/opt/spark/bin/beeline -u 'jdbc:hive2://localhost:10000'
copy
8)创建 employee 表;
创建 employee 表,并且与 SequoiaDB 中的集合 company.employee 进行关联;
CREATE TABLE company.employee
(
empno INT,
ename STRING,
age INT
)
USING com.sequoiadb.spark OPTIONS
(
host 'localhost:11810',
collectionspace 'company',
collection 'employee'
);
copy
9)向 employee 表中插入数据;
INSERT INTO company.employee VALUES
( 10001, 'Georgi', 48 ),
( 10002, 'Bezalel', 21 ),
( 10003, 'Parto', 33 ),
( 10004, 'Chirstian', 40 ),
( 10005, 'Kyoichi', 23 ),
( 10006, 'Anneke', 19 ),
( 10007, 'Ileana', 28 ),
( 10008, 'Liz', 38 ),
( 10009, 'Parish', 31 ),
( 10010, 'Odette', 23 );
copy
10)退出 Beeline 客户端;
!quit
copy
操作截图:
1542-620-10
统计口径展示
1)查询所有人员的年龄作为纵坐标;
SELECT DISTINCT age FROM company.employee ORDER BY age
2)查询所有人员的名字、年龄数据,并将名字作为横坐标;
SELECT ename, age FROM company.employee ORDER BY empno
创建数据源
1)依次点击 Pentaho 首页的 Create New > CDE Dashboard 按钮;
1542-620-11
2)点击如图所示按钮,进入数据源设置页面;
1542-620-12
3)点击如图所示按钮,添加两个数据源配置项;
1542-620-13
4)在第一个数据源的 Query 配置项中加入查询年龄的 SQL,注意 SQL 的结尾不能包括分号,其它配置如图所示;
1542-620-14
5)在第二个数据源的 Query 配置项中加入查询所有人员名字、年龄的 SQL,注意 SQL 的结尾不能包括分号,其他配置如图所示;
1542-620-15
6)点击 Save 按钮,将新建的仪表盘命名为 DEMO 并保存;
1542-620-16
调整布局
1)保存完毕之后,切换到布局面板,对报表的整体显示布局进行设置。首先点击如图所示按钮,选择图表模板;
1542-620-17
2)选择自己喜欢的模板后(下面选择 “ Center Panel Template ” 模板进行演示操作),在如下图所示的 Body 标签下,选择居中的 Column 标签;
1542-620-18
3)点击下图所示工具栏的两个按钮(新增 Row 标签按钮和新增 Cloumn 标签按钮),在选中标签下添加标签,添加完成后,如下图所示;
1542-620-19
4)在新建的两个 Cloumn 标签中设置属性,如下图所示;
1542-620-20
5)为了使结果更加美观,设置第一行的高度属性为 50,如下图所示;
1542-620-20
6)点击 Save 按钮,进行保存;
添加组件
1)保存成功后,切换到添加组件页面,按钮位置如下图所示;
1542-620-21
2)依次点击以下按钮,添加折线图纵坐标组件,并将属性设置为下图所示内容;
1542-620-22
3)依次点击以下按钮,添加折线图横坐标组件,并将属性设置为下图所示内容;
1542-620-23
4)点击 Save 按钮,进行保存;
查看折线图
1)依次点击下图所示按钮,进入文件展示选择页面;
1542-620-24
2)选择制作好的折线图文件;
1542-620-25
3)双击之后,就可以展示出制作好的折线图了,如果对制作结果不太满意,也可以重新修改图示进行美化;
1542-620-25
9. 总结
通过本课程我们学习了如何在已经部署 SequoiaDB 巨杉数据库引擎及 SparkSQL 实例的环境中,进行 Pentaho 的安装,并进行与 SparkSQL 的对接。
知识点
Pentaho 的安装
Pentaho 与 SequoiaDB + SparkSQL 的对接
使用 Pentaho 制作简单折线图
三、对在线联机业务零干扰进行后台统计分析
1. 课程介绍
本课程将带领您在已经部署 SequoiaDB 巨杉数据库引擎及创建了 MySQL 实例、SparkSQL 实例的环境中,通过配置协调节点的读写分离策略,实现在线联机业务与后台统计分析业务的相互隔离。
SequoiaDB 巨杉数据库读写分离介绍
1)写请求处理
所有写请求都只会发往主节点,如果没有主节点则当前复制组不可处理写请求。
2)读请求处理
读请求会按照会话(连接)随机选择组内任意一个节点(对外透明),或按照当前会话(连接)配置的优先实例策略选取相应复制组的数据节点。在一次会话中如果上一次查询(包括 query 和 fetch)返回成功,则下一次查询不会重选节点;如果上一次查询发生失败,则下一次查询将重选节点。如果没有可用节点则返回失败。一次查询中不会重选节点。
请点击右侧选择使用的实验环境
部署架构:
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为一分区三副本,其中,SQL 引擎包括 1 个 SequoiaSQL-MySQL 数据库实例节点和 1 个 SparkSQL 实例节点,数据库引擎包括 3 个协调节点、3 个编目节点和3个数据节点。
图片描述
详细了解 SequoiaDB 巨杉数据库系统架构:
SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本;SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例和 SequoiaDB-SparkSQL 实例连接器均为 3.4 版本;Spark 版本为2.4.4;JDK 版本为 openjdk1.8。
2. 切换用户及查看数据库版本
切换到系统用户 sdbadmin,并查看 SequoiaDB 巨杉数据库引擎的版本。
切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户为 sdbadmin。
su - sdbadmin
copy
Note:
用户 sdbadmin 的密码为 sdbadmin 。
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
copy
操作截图:
图片描述
3. 查看节点启动列表
查看 SequoiaDB 巨杉数据库引擎节点列表:
sdblist
4. 初始化数据
创建 SequoiaDB 集合空间和集合与 SparkSQL 进行关联,并插入部分记录作为后续的实验数据。
创建数据库和数据表
进入 MySQL Shell,在 MySQL 实例中创建数据库 company,以及 employee 表。
1)使用 Linux 命令进入 MySQL Shell;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
copy
2)创建 company 数据库;
CREATE DATABASE company;
copy
3)切换到 company 数据库;
USE company;
copy
4)创建 employee 表,将同步在 SequoiaDB 巨杉数据引擎中创建分区表;
CREATE TABLE employee
(
empno INT AUTO_INCREMENT PRIMARY KEY,
ename VARCHAR(128),
age INT
);
copy
5)向 employee 表中写入数据;
INSERT INTO employee VALUES
( 10001, 'Georgi', 48 ),
( 10002, 'Bezalel', 21 ),
( 10003, 'Parto', 33 ),
( 10004, 'Chirstian', 40 ),
( 10005, 'Kyoichi', 23 ),
( 10006, 'Anneke', 19 ),
( 10007, 'Ileana', 28 ),
( 10008, 'Liz', 38 ),
( 10009, 'Parish', 31 ),
( 10010, 'Odette', 23 );
copy
6)退出 MySQL Shell;
\q
copy
5. 选取优先读备的协调节点
给 SparkSQL 配置一个专用的协调节点进行数据访问,使用该协调节点进行统计分析查询。
1)在 Linux Shell 查看当前集群中的协调节点;
sdblist -l | grep -E "Name|coord"
copy
操作截图:
1542-7
2)查看 MySQL 实例使用的协调节点;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -e "SHOW VARIABLES LIKE 'sequoiadb_conn%';"
copy
操作截图:
1542-8
发现集群中有协调节点 11810、21810、31810 三个,MySQL 实例使用 11810 节点,于是在创建 SparkSQL 表时配置专用协调节点 21810。
6. 在 SparkSQL 中建表
进入 SparkSQL Beeline Shell,在 SparkSQL 实例中创建 employee 表并与 SequoiaDB 中的集合空间、集合关联。
1)查看 Spark 的 Worker 和 Master 是否已经启动;
jps
copy
操作截图:
图片描述
Note:
如果显示的进程名称与预期不符,请稍等初始化完成并重试该步骤。
2)登录 Beeline 连接到 SparkSQL 实例;
/opt/spark/bin/beeline -u 'jdbc:hive2://localhost:10000'
copy
3)创建并切换至 company 数据库;
CREATE DATABASE company;
USE company;
copy
4)创建 employee 表;
创建 employee 表,并且与 SequoiaDB 中的集合 company.employee 进行关联;
CREATE TABLE employee
(
empno INT,
ename STRING,
age INT
)
USING com.sequoiadb.spark OPTIONS
(
host 'localhost:21810',
collectionspace 'company',
collection 'employee',
preferredinstance 'S',
preferredinstancemode 'random',
preferredinstancestrict true
);
copy
Note:
通过指定 host 可以限定查询连接的协调节点,设置 preferredinstance 参数为 "S" 表示查询时优先读取备数据节点的数据,更详细的参数配置可参考 SequoiaDB-SparkSQL 参数说明。
5)退出 Beeline Shell;
!quit
copy
操作截图:
1542-11
7. 确定数据组 group1 主节点
使用 SequoiaDB 的系统命令 sdblist 确定数据组 group1 的主节点,以便确认联机交易跟统计分析是否在同数据组的不同数据节点上执行。
在 Linux Shell 中执行以下命令,确认数据组 group1 的主节点;
sdblist -l | grep -E "Name|group1"
copy
操作截图:
1542-6
从查询结果可以看出,数据组 group1 中,31820 节点是主节点,11820、21820 两个节点是备节点。
8. 验证联机业务与统计分析的相互隔离
分别在 MySQL 端、SparkSQL 端进行对表 employee 的查询操作,会发现在不同的 SQL 实例上进行查询,在同数据组内,会从不同的数据节点上进行数据读取。下面以数据组 group1 为例进行验证。
检查数据组 group1 各数据节点的数据读取量
1)使用嵌入命令模式连接 SequoiaDB 巨杉数据库协调节点;
sdb 'db = new Sdb("localhost", 11810)'
copy
2)使用 snapshot ( SDB_LIST_COLLECTIONS ) 查询集合 company.employee 在数据组 group1 各数据节点的数据读取量;
sdb 'db.snapshot( SDB_LIST_COLLECTIONS , { Name: "company.employee" } )' | grep -E "NodeName|TotalDataRead|GroupName"
copy
操作截图:
1542-12
在 MySQL 端查询 employee 表并观察数据读取状况
1)使用 Linux 命令进入 MySQL Shell;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
copy
2)对 employee 表进行全表查询;
SELECT * FROM company.employee;
copy
3)退出 MySQL Shell;
\q
copy
操作截图:
1542-13
4)使用 snapshot ( SDB_LIST_COLLECTIONS ) 查询集合 company.employee 在数据组 group1 各数据节点的数据读取量;
sdb 'db.snapshot( SDB_LIST_COLLECTIONS , { Name: "company.employee" } )' | grep -E "NodeName|TotalDataRead|GroupName"
copy
操作截图:
1542-14
从查询结果可以看出,MySQL 实例上的查询,在数据组 group1 中,主节点 31820 上的数据查询量增加了,备节点 11820、21820 两个节点上的查询量未增加。
在 SparkSQL 端查询 employee 表并观察数据读取状况
1)登录 Beeline 连接到 SparkSQL 实例;
/opt/spark/bin/beeline -u 'jdbc:hive2://localhost:10000'
copy
2)切换到 company 数据库;
USE company;
copy
3)对 employee 表进行全表查询;
SELECT * FROM employee;
copy
4)退出 Beeline Shell;
!quit
copy
操作截图:
1542-15
5)使用 snapshot ( SDB_LIST_COLLECTIONS ) 查询集合 company.employee 在数据组 group1 各数据节点的数据读取量;
sdb 'db.snapshot( SDB_LIST_COLLECTIONS , { Name: "company.employee" } )' | grep -E "NodeName|TotalDataRead|GroupName"
copy
操作截图:
1542-16
从查询结果可以看出,SparkSQL 实例上的查询,在数据组 group1 中,主节点 31820 上的数据查询量没有增加,备节点 21820 上的查询量增加。
Note:
本环境中数据节点采用三副本架构,包括一个主节点和两个备节点;配置优先从备节点中读取数据,会在两个可选备节点中随机选取其中一个,所以从 SaprkSQL 实例上的查询,数据查询量增加的不一定是 21820 还可能是 11820。
9. 总结
通过本课程,我们学习了如何配置读写分离策略,保证在线联机业务与后台统计分析的相互隔离,并且学习了如何在 MySQL 实例、SparkSQL 实例中操作 SeuqoiaDB 巨杉数据库中的数据。
今天我们学到的知识点为:
MySQL 的使用
SparkSQL 的使用
SequoiaDB 读写分离策略的配置
联机业务与统计分析的相互隔离
四、执行计划分析
1. 课程介绍
本课程将带领您在已经部署 SequoiaDB 巨杉数据库引擎及创建了 MySQL 实例、SparkSQL 实例的环境中,查看 SparkSQL 的执行计划,并进行分析。
请点击右侧选择使用的实验环境
环境架构:
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-SparkSQL 数据库实例节点, 1 个引擎协调节点, 1 个编目节点与 3 个数据节点。
图片描述
详细了解 SequoiaDB 巨杉数据库系统架构:
SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本;SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例和 SequoiaDB-SparkSQL 实例连接器均为 3.4 版本;Spark 版本为2.4.4;JDK 版本为 openjdk1.8。
2. 切换用户及查看数据库版本
切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户为 sdbadmin。
su - sdbadmin
copy
Note:
用户 sdbadmin 的密码为 sdbadmin 。
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
3. 查看节点启动列表
查看 SequoiaDB 巨杉数据库引擎节点列表:
sdblist
4. Spark 进程检查
查看 Spark 的 Worker 和 Master 是否已经启动:
jps
copy
操作截图:
图片描述
Note:
如果显示的进程名称和数量与预期不符,请稍等初始化完成并重试该步骤。
5. 初始化数据
在 SequoiaDB 中建立集合空间和集合
1)使用 Linux 命令进入 SequoiaDB Shell 命令行;
sdb
copy
2)连接 SequoiaDB 数据库;
var db = new Sdb("localhost", 11810);
copy
2)创建 company_domains 逻辑域;
db.createDomain("company_domains", [ "group1", "group2", "group3" ], { AutoSplit: true } );
copy
3)创建 company 集合空间;
db.createCS("company", { Domain: "company_domains" } );
copy
4)创建 employee 集合;
db.company.createCL("employee", {"ShardingKey": { "_id": 1}, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
5)退出 SequoiaDB Shell;
quit;
copy
操作截图:
1542-640-1
在 SparkSQL 中关联 SequoiaDB 的集合空间、集合
进入 SparkSQL Beeline Shell,在 SparkSQL 实例中创建 employee 表并与 SequoiaDB 中的集合空间、集合关联。
1)登录 Beeline 连接到 SparkSQL 实例;
/opt/spark/bin/beeline -u 'jdbc:hive2://localhost:10000'
copy
2)创建并切换至 company 数据库;
CREATE DATABASE company;
USE company;
copy
3)创建 employee 表;
创建 employee 表,并且与 SequoiaDB 中的集合 company.employee 进行关联:
CREATE TABLE employee
(
empno INT,
ename STRING,
age INT
)
USING com.sequoiadb.spark OPTIONS
(
host 'localhost:11810',
collectionspace 'company',
collection 'employee'
);
copy
操作截图:
1542-610-2
4)在 SparkSQL 中插入数据;
INSERT INTO employee VALUES ( 10001, 'Georgi', 48 );
INSERT INTO employee VALUES ( 10002, 'Bezalel', 21 );
INSERT INTO employee VALUES ( 10003, 'Parto', 33 );
INSERT INTO employee VALUES ( 10004, 'Chirstian', 40 );
copy
操作截图:
1542-610-3
6. 查看执行计划并分析
1)执行查询 SQL;
SELECT * FROM employee WHERE empno = 10003;
copy
操作截图:
1542-610-4
2)查看执行计划;
EXPLAIN SELECT * FROM employee WHERE empno = 10003;
copy
操作截图:
1542-610-5
执行计划查询结果分析如下:
Scan:表示此查询扫描的 Spark 表;
PushedFilters:表示过滤条件,包括 empno 不为空和 empno = 10003 这两个条件;
ReadSchema:表示查询的字段名和对应的类型。
7. 总结
通过本课程,我们学习了如何查看 SparkSQL 的执行计划,并且简单学习了如何进行 SparkSQL 执行计划的分析。
知识点总结
SparkSQL 执行计划的查看
SparkSQL 执行计划的分析
考试
此考试是在安装部署 SequoiaDB 巨杉数据库、MySQL 和 SparkSQL 实例的环境中进行如下操作:
在 SequoiaDB 巨杉数据库中创建集合关联 SparkSQL 实例的映射表,进行数据查询;
配置 SparkSQL 实例与 MySQL 实例连接不同的协调节点,并设置 SparkSQL 优先从备节点读取数据;
Note:
考试内容需在系统用户 sdbadmin 下完成,用户密码为 sdbadmin
SequoiaDB 巨杉数据库安装目录(/opt/sequoiadb)
SparkSQL 实例安装目录(/opt/spark)
MySQL 实例安装目录(/opt/sequoiasql/mysql)
知识点
1)在 SequoiaDB 巨杉数据库引擎中创建数据域、集合空间和集合;
2)SequoiaDB 巨杉数据库中的集合和 SparkSQL 实例的表关联,分析执行计划;
3)配置联机交易与统计分析相互隔离;
考试内容
1)切换到 sdbadmin 用户;
2)在 SequoiaDB 数据库上创建集合空间 company,集合 employee,写入如下数据:
( empno: 10001, ename: 'Georgi', age: 48 );
( empno: 10002, ename: 'Bezalel', age: 21 );
( empno: 10003, ename: 'Parto', age: 33 );
Note:
该考试环境为单分区三副本,仅创建了数据组 group1
3)在 MySQL 实例创建数据库 company 和 数据表 employee 与 SequoiaDB 巨杉数据库存储引擎的 employee 集合映射;
4)查看当前 MySQL 实例连接 SequoiaDB 巨杉数据库引擎的协调节点端口是否为11810;
5)使用 beeline 客户端连接 SparkSQL 的 thriftserver 服务,创建对应集合空间的数据库 company,对应集合的表 employee;建表要求:
设置连接 SequoiaDB 的协调节点为 21810;
设置 SparkSQL 读取数据时优先选择备节点;
6)查找年龄最小的员工信息并写入 company.result 表中(使用 Spark 结果集创建表的方式把结果存储到巨杉数据库,包含 empno,ename, age 三个字段);
7)使用 SELECT 方法查看数据;
考试要求
1)完成 SequoiaDB 和 SparkSQL 关联表的创建;
2)进行 SparkSQL 执行计划的分析;
3)配置 SparkSQL 实例与 MySQL 实例连接不同的协调节点;
4)在 SparkSQL 连接的协调节点上配置为优先从备节点读取数据;