准备工作 本示例使用 MySQL 实例存储 Spark 引擎的元数据信息,故需要在 MySQL 实例中创建一个数据库进行存储。
使用 MySQL Shell 连接 SequoiaDB-MySQL 实例;
1 /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
1 CREATE USER 'metauser' @'%' IDENTIFIED BY 'metauser' ;
1 GRANT ALL ON *.* TO 'metauser' @'%' ;
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;
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 );
Spark 实例配置 Spark 安装包和 MySQL 驱动已放置在 /home/sdbadmin/soft 目录下,本示例使用 Spark 的 standalone 模式安装。
解压 Spark 安装包
1 tar -zxvf spark-2.4.4-bin-hadoop2.7.tar.gz -C /opt
设置免密 部署 Spark 实例为了实现自动化操作,需要配置 ssh 免密码登陆方式。
1)执行 ssh-keygen 生成公钥和密钥,执行后连续回车即可;
操作截图:
2)执行 ssh-copy-id,把公钥拷贝到本机的 sdbadmin 用户;
1 ssh-copy-id sdbadmin@sdbserver1
Note:
用户 sdbadmin 的密码是:sdbadmin
操作截图:
设置 spark-env.sh
1 cd /opt/spark-2.4.4-bin-hadoop2.7/conf
1 cp spark-env.sh.template spark-env.sh
1 echo "SPARK_MASTER_HOST=sdbserver1" >> spark-env.sh
查看 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 日志级别
1 cp log4j.properties.template log4j.properties
log4j.properties 中设置日志级别;
1 sed -i 's/log4j.rootCategory=INFO, console/log4j.rootCategory=ERROR, console/g' log4j.properties
测试 SparkSQL 实例 之前的小节已经创建了 Spark 元数据库,并且通过 SequoiaSQL-MySQL 实例创建了分区表。本小节将对 SparkSQL 实例进行测试。
1 cd /opt/spark-2.4 .4 -bin-hadoop2.7
查看 Spark 的 master 和 worker 是否启动完成;
操作截图:
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 数据库没有配置用户则设为空串(‘’)
1 SELECT AVG (age) FROM company.employee;