0%

SequoiaDB-Spark创建元数据库

准备工作

本示例使用 MySQL 实例存储 Spark 引擎的元数据信息,故需要在 MySQL 实例中创建一个数据库进行存储。

  • 使用 MySQL Shell 连接 SequoiaDB-MySQL 实例;
1
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
  • 创建 metauser 用户;
1
CREATE USER 'metauser'@'%' IDENTIFIED BY 'metauser';
  • 给 metauser 用户授权;
1
GRANT ALL ON *.* TO 'metauser'@'%';
  • 刷新权限;
1
FLUSH PRIVILEGES;
  • 创建元数据库;
1
CREATE DATABASE metastore CHARACTER SET 'latin1' COLLATE 'latin1_bin';

创建测试数据库及数据表

在 SequoiaSQL-MySQL 实例中创建数据表,为 Spark 安装完毕后进行数据操作测试提供测试数据。SequoiaSQL-MySQL 实例默认使用 SequoiaDB 数据库存储引擎,在 MySQL 上创建表将同步在 SequoiaDB 上创建对应的分区表(hash分区,包含所有分区组)。自动分区时,分区键按顺序优先使用主键字段和唯一索引字段。如果两者都没有,则不做分区。

  • 创建数据库,并切换到该数据库;
1
2
CREATE DATABASE company;
USE company;
  • 创建包含自增主键字段的 employee 表;
1
2
3
4
5
6
CREATE TABLE employee 
(
empno INT AUTO_INCREMENT PRIMARY KEY,
ename VARCHAR(128),
age INT
);
  • 进行基本的数据写入操作;
1
2
INSERT INTO employee (ename, age) VALUES ("Jacky", 36);
INSERT INTO employee (ename, age) VALUES ("Alice", 18);
  • 退出 MySQL Shell;
1
\q

Spark 实例配置

Spark 安装包和 MySQL 驱动已放置在 /home/sdbadmin/soft 目录下,本示例使用 Spark 的 standalone 模式安装。

解压 Spark 安装包

  • 进入安装包存放目录;
1
cd /home/sdbadmin/soft
  • 解压安装包;
1
tar -zxvf spark-2.4.4-bin-hadoop2.7.tar.gz -C /opt

设置免密

部署 Spark 实例为了实现自动化操作,需要配置 ssh 免密码登陆方式。

1)执行 ssh-keygen 生成公钥和密钥,执行后连续回车即可;

1
ssh-keygen -t rsa

操作截图:

img

2)执行 ssh-copy-id,把公钥拷贝到本机的 sdbadmin 用户;

1
ssh-copy-id  sdbadmin@sdbserver1

Note:

用户 sdbadmin 的密码是:sdbadmin

操作截图:

img

设置 spark-env.sh

  • 进入 Spark 的配置目录;
1
cd /opt/spark-2.4.4-bin-hadoop2.7/conf
  • 从模板中拷贝 spark-env.sh 文件;
1
cp spark-env.sh.template spark-env.sh
  • 设置 Spark 实例的 Master;
1
echo "SPARK_MASTER_HOST=sdbserver1" >> spark-env.sh
  • 查看 spark-env.sh 文件是否设置成功;
1
cat spark-env.sh

设置元数据库

指定 Spark 实例的元数据信息存放的数据库信息。

  • 创建设置元数据数据库配置文件 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?useSSL=false</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
  • 检查是否创建成功;
1
cat /opt/spark-2.4.4-bin-hadoop2.7/conf/hive-site.xml

拷贝相关驱动

  • 用户只要将 SequoiaDB for Spark 连接器 spark-sequoiadb_2.11-3.4.jar 和 SequoiaDB 的 Java 驱动 sequoiadb-driver-3.4.jar 加入 Spark 的 jar 目录即可,另外本示例使用了 MySQL 作为元数据存储数据库,也需要加入 MySQL 的 Java 驱动 mysql-jdbc.jar。

  • 拷贝 spark-sequoiadb_2.11-3.4.jar 驱动连接器;

1
cp /opt/sequoiadb/spark/spark-sequoiadb_2.11-3.4.jar  /opt/spark-2.4.4-bin-hadoop2.7/jars/
  • 拷贝 SequoiaDB 的 java 驱动 sequoiadb-driver-3.4.jar;
1
cp /opt/sequoiadb/java/sequoiadb-driver-3.4.jar  /opt/spark-2.4.4-bin-hadoop2.7/jars/
  • 拷贝 MySQL 的 java 驱动 mysql-jdbc.jar;
1
cp /home/sdbadmin/soft/mysql-jdbc.jar  /opt/spark-2.4.4-bin-hadoop2.7/jars/

设置 Spark 日志级别

  • 由于 Spark 默认日志级别为 INFO ,运行 spark-sql 客户端时会打印大量日志输出屏幕,为了避免这个问题把日志级别改* 为 ERROR。

  • 拷贝 log4j.properties;

1
cp log4j.properties.template  log4j.properties
  • log4j.properties 中设置日志级别;
1
sed -i 's/log4j.rootCategory=INFO, console/log4j.rootCategory=ERROR, console/g' log4j.properties
  • 检查日志输出配置是否成功;
1
cat log4j.properties

测试 SparkSQL 实例

之前的小节已经创建了 Spark 元数据库,并且通过 SequoiaSQL-MySQL 实例创建了分区表。本小节将对 SparkSQL 实例进行测试。

  • 进入 Spark 的安装目录;
1
cd /opt/spark-2.4.4-bin-hadoop2.7
  • 启动 Spark;
1
sbin/start-all.sh
  • 查看 Spark 的 master 和 worker 是否启动完成;
1
jps

操作截图:

img

  • 启动 spark-sql 客户端;
1
bin/spark-sql
  • 创建 company 数据库;
1
2
CREATE DATABASE company;
USE company;
  • 创建映射表;
1
2
3
4
5
6
CREATE TABLE company.employee 
(
empno INT,
ename STRING,
age INT
) USING com.sequoiadb.spark OPTIONS (host 'localhost:11810', collectionspace 'company', collection 'employee', username '', password '');

Note:

  • host 参数指定 SequoiaDB 数据库的协调节点/独立节点地址,多个地址以”,”分隔
  • collectionspace 参数指定 SequoiaDB 数据库的集合空间名,该集合空间必须已经存在
  • collection 参数指定 SequoiaDB 数据库的集合名,该集合必须已经存在且属于 collectionspace 参数所指定的集合空间
  • username 参数指定 SequoiaDB 数据库的连接用户名,若 SequoiaDB 数据库没有配置用户则设为空串(‘’)
  • password 参数指定 SequoiaDB 数据库的连接用户对应的密码,若 SequoiaDB 数据库没有配置用户则设为空串(‘’)
  • 测试运行 sql;
1
SELECT AVG(age) FROM company.employee;
  • 退出 spark-sql 客户端;
1
exit;
-------------本文结束感谢您的阅读-------------