SequoiaDB-Spark实例创建与使用
安装 Spark 实例
下面开始安装 Spark 实例,并对 Spark 实例进行必要的配置。
解压 Spark 安装包
1)检查 Spark 安装包;
1 | ls -trl /home/sdbadmin/soft/ |
操作截图:
2)解压 Spark 安装包;
1 | tar -zxf /home/sdbadmin/soft/spark-2.4.4-bin-hadoop2.7.tar.gz -C /opt |
添加驱动包
1)拷贝 SequoiaDB for Spark 的连接器到 Spark 的 jars 目录下;
1 | cp /opt/sequoiadb/spark/spark-sequoiadb_2.11-3.4.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/ |
2)拷贝 MySQL 驱动到 Spark 的 jars 目录下;
1 | cp /home/sdbadmin/soft/mysql-jdbc.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/ |
3)拷贝 SequoiaDB 的 JAVA 驱动到 Spark 的 jars 目录下;
1 | cp /opt/sequoiadb/java/sequoiadb-driver-3.4.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/ |
设置免密
1)执行 ssh-keygen 生成公钥和密钥,执行后连续回车即可;
1 | ssh-keygen -t rsa |
2)执行 ssh-copy-id,把公钥拷贝到本机的 sdbadmin 用户;
1 | ssh-copy-id sdbadmin@sdbserver1 |
Note:
sdbadmin 的密码是:
sdbadmin
。 单机不需要拷贝到其它服务器上,如果是多机部署,需要配置所有服务器的互相关系。
配置 Spark
1)设置 spark-env.sh;
从模板中复制一份 spark-env.sh 脚本:
1 | 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 |
在 spark-env.sh 中设置 WORKER 的数量和 MASTER 的 IP;
1 | echo "SPARK_WORKER_INSTANCES=2" >> /opt/spark-2.4.4-bin-hadoop2.7/conf/spark-env.sh |
2)复制以下代码到实验环境终端执行,用于创建设置元数据信息的数据库配置文件 hive-site.xml;
1 | cat > /opt/spark-2.4.4-bin-hadoop2.7/conf/hive-site.xml << EOF |
配置 Spark 元数据库
1)使用 Linux 命令进入 MySQL Shell;
1 | /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root |
2)创建 metauser 用户;
1 | CREATE USER 'metauser'@'%' IDENTIFIED BY 'metauser'; |
操作截图:
3)给 metauser 用户授权;
1 | GRANT ALL ON *.* TO 'metauser'@'%'; |
操作截图:
4)创建 Spark 元数据库;
1 | CREATE DATABASE metastore CHARACTER SET 'latin1' COLLATE 'latin1_bin'; |
操作截图:
5)刷新权限;
1 | FLUSH PRIVILEGES; |
操作截图:
6) 退出 MySQL Shell;
1 | \q |
启动 Spark 服务
本课程演示如何使用 Spark Thrift Server 服务连接 Spark 进行数据操作,所以需要启动 Spark 和 Spark Thrift Server 服务。
1) 启动 Spark;
1 | /opt/spark-2.4.4-bin-hadoop2.7/sbin/start-all.sh |
操作截图:
2)启动 thriftserver 服务;
1 | /opt/spark-2.4.4-bin-hadoop2.7/sbin/start-thriftserver.sh |
操作截图:
3) 检查进程启动状态;
1 | jps |
4) 检查端口监听状态;
1 | netstat -anp | grep 10000 |
操作截图:
Note:
本实验环境性能较低,启动 Spark 的耗时较长,请耐心等待 10000 端口的监听状态;如截图所示,此时 10000 端口监听成功即可继续执行后续操作。
在 SequoiaDB 建立集合空间和集合
进入 SequoiaDB Shell,在 SequoiaDB 巨杉数据库引擎中创建 company 集合空间和 employee 集合。
1)使用 Linux 命令进入 SequoiaDB Shell 命令行;
1 | sdb |
2)使用 JavaScript 语法,连接协调节点,获取数据库连接;
1 | var db = new Sdb("localhost", 11810); |
2)创建 company_domain 逻辑域;
1 | db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } ); |
3)创建 company 集合空间;
1 | db.createCS("company", { Domain: "company_domain" } ); |
4)创建 employee 集合;
1 | db.company.createCL("employee", { "ShardingKey": { "_id": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } ); |
5)退出 SequoiaDB Shell;
1 | quit; |
操作截图:
在 SparkSQL 关联集合空间和集合
SparkSQL 通过 Spark-SequoiaDB 连接组件关联 SequoiaDB 的集合空间和集合,将 SequoiaDB 巨杉数据库引擎作为 SparkSQL 的数据源进行相应的数据计算。
SparkSQL 与 SequoiaDB 的集合空间和集合关联
1)使用 Beeline 客户端工具连接至 thriftserver 服务;
1 | /opt/spark-2.4.4-bin-hadoop2.7/bin/beeline -u 'jdbc:hive2://localhost:10000' |
2)创建并切换至 company 数据库;
1 | CREATE DATABASE company; |
3)创建 employee 表;
创建 employee 表,并且与 SequoiaDB 中的集合 employee 进行关联:
1 | CREATE TABLE employee |
Note:
当前环境未开启鉴权,因此忽略了 username 和 password 参数。
操作截图:
SequoiaDB-SparkSQL 建表语法说明
在 SparkSQL 中关联 SequoiaDB 集合空间和集合的 SQL 语法如下;
1 | CREATE <[TEMPORARY] TABLE | TEMPORARY VIEW> <tableName> [(SCHEMA)] |
语法说明:
- 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 :指定分区优先选择的节点实例。
在 Beeline 中进行数据操作
在 Beeline 客户端中对 SequoiaDB 巨杉数据库的集合进行数据写入、查询操作。
1)写入数据;
1 | INSERT INTO employee VALUES ( 10001, 'Georgi', 48 ); |
2)进行数据查询;
1 | SELECT * FROM employee; |
操作截图:
通过连接器自动生成 Schema 创建表
SequoiaDB-SparkSQL 支持通过连接器自动生成 SCHEMA 来创建关联表,这样可以在建表时不指定 SCHEMA 信息。
1)通过连接器自动生成 SCHEMA 来创建 employee_auto_schema 表;
1 | CREATE TABLE employee_auto_schema USING com.sequoiadb.spark OPTIONS |
Note:
通过连接器自动生成 SCHEMA,要求在建表时 SequoiaDB 的关联集合中就已经存在数据记录。
2)查看表 employee_auto_schema 的结构信息;
1 | DESC employee_auto_schema; |
操作截图:
3)查询 employee_auto_schema 的数据记录;
1 | SELECT * FROM employee_auto_schema; |
Note:
SparkSQL 表 employee 和 employee_auto_schema 关联的都是 SequoiaDB 中的集合 company.employee,所以这两张 SparkSQL 表的对应数据是完全一致的。
通过 SQL 结果集创建表
SequoiaDB-SparkSQL 支持 CREATE TABLE ... AS SELECT ...
语法,通过 SQL 结果集创建新表。
通过 SQL 结果集创建表
1)通过已有表 employee 创建表 employee_bak,并将表中的数据存放到指定域和集合空间中;
1 | CREATE TABLE employee_bak USING com.sequoiadb.spark OPTIONS |
操作截图:
2)查看 employee_bak 表中的数据;
1 | SELECT * FROM employee_bak; |
3)退出 Beeline Shell;
1 | !quit |
使用 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”表示不进行压缩。