0%

SequoiaDB-Spark实例创建与使用

SequoiaDB-Spark实例创建与使用

安装 Spark 实例

下面开始安装 Spark 实例,并对 Spark 实例进行必要的配置。

解压 Spark 安装包

1)检查 Spark 安装包;

1
ls -trl /home/sdbadmin/soft/

操作截图:

1542-610-1

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
2
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

2)复制以下代码到实验环境终端执行,用于创建设置元数据信息的数据库配置文件 hive-site.xml;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;

1
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root

2)创建 metauser 用户;

1
CREATE USER 'metauser'@'%' IDENTIFIED BY 'metauser';

操作截图:

1542-610-3

3)给 metauser 用户授权;

1
GRANT ALL ON *.* TO 'metauser'@'%';

操作截图:

1542-610-4

4)创建 Spark 元数据库;

1
CREATE DATABASE metastore CHARACTER SET 'latin1' COLLATE 'latin1_bin';

操作截图:

1542-610-5

5)刷新权限;

1
FLUSH PRIVILEGES;

操作截图:

1542-610-6

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

操作截图:

1542-610-7

2)启动 thriftserver 服务;

1
/opt/spark-2.4.4-bin-hadoop2.7/sbin/start-thriftserver.sh

操作截图:

1542-610-8

3) 检查进程启动状态;

1
jps

4) 检查端口监听状态;

1
netstat -anp | grep 10000

操作截图:

1542-610-9

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;

操作截图:

1542-610-10

在 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
2
CREATE DATABASE company;
USE company;

3)创建 employee 表;

创建 employee 表,并且与 SequoiaDB 中的集合 employee 进行关联:

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE employee 
(
empno INT,
ename STRING,
age INT
)
USING com.sequoiadb.spark OPTIONS
(
host 'localhost:11810',
collectionspace 'company',
collection 'employee'
);

Note:

当前环境未开启鉴权,因此忽略了 username 和 password 参数。

操作截图:

1542-610-11

SequoiaDB-SparkSQL 建表语法说明

在 SparkSQL 中关联 SequoiaDB 集合空间和集合的 SQL 语法如下;

1
2
CREATE <[TEMPORARY] TABLE | TEMPORARY VIEW> <tableName> [(SCHEMA)]
USING com.sequoiadb.spark OPTIONS (<option>, <option>, ...);

语法说明:

  • 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
2
3
4
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 );

1542-610-12

2)进行数据查询;

1
SELECT * FROM employee;

操作截图:

1542-610-13

通过连接器自动生成 Schema 创建表

SequoiaDB-SparkSQL 支持通过连接器自动生成 SCHEMA 来创建关联表,这样可以在建表时不指定 SCHEMA 信息。

1)通过连接器自动生成 SCHEMA 来创建 employee_auto_schema 表;

1
2
3
4
5
6
CREATE TABLE employee_auto_schema USING com.sequoiadb.spark OPTIONS 
(
host 'localhost:11810',
collectionspace 'company',
collection 'employee'
);

Note:

通过连接器自动生成 SCHEMA,要求在建表时 SequoiaDB 的关联集合中就已经存在数据记录。

2)查看表 employee_auto_schema 的结构信息;

1
DESC employee_auto_schema;

操作截图:

1542-610-14

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
2
3
4
5
6
7
8
9
10
11
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;

操作截图:

图片描述

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”表示不进行压缩。
-------------本文结束感谢您的阅读-------------