Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据

SequoiaDB实例管理

创建MySQL实例:
设置 SequoiaSQL-MySQL 实例程序权限为可执行:chmod +x sequoiasql-mysql-3.4-linux_x86_64-installer.run
创建myinst实例:/opt/sequoiasql/mysql/bin/sdb_sql_ctl addinst myinst -D database/3306/
在这里插入图片描述
配置参数有三种修改方式:

  • 使用工具 sdb_sql_ctl 修改配置,配置生效需重新启动 MySQL 服务。例如: bin/sdb_sql_ctl chconf myinst --sdb-auto-partition=OFF
  • 修改实例数据目录下的配置文件 auto.cnf,在 [mysqld] 下添加/更改对应配置项,配置生效需重新启动 MySQL 服务。例如: sequoiadb_auto_partition=OFF
  • 通过 MySQL 命令行修改,配置临时有效,当重启MySQL服务后配置将失效。例如: SET GLOBAL sequoiadb_auto_partition=OFF ;
  • 详情:MySQL实例配置
    启动mysql:/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
    在SequoiaDB中:
    查看存储引擎中的集合信息:db.list(SDB_LIST_COLLECTIONS);

创建postgreSQL实例:
创建PostgreSQL实例:/opt/sequoiasql/postgresql/bin/sdb_sql_ctl addinst myinst -D database/5432
启动PostgreSQL实例:/opt/sequoiasql/postgresql/bin/sdb_sql_ctl start myinst
检查创建的实例状态:/opt/sequoiasql/postgresql/bin/sdb_sql_ctl status
进入SequoiaDB:
创建company_domain逻辑域:db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
创建company集合空间:db.createCS("company", { Domain: "company_domain" } );
创建employee集合:db.company.createCL("employee", {"ShardingKey": { "_id": 1}, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
插入数据:

 db.company.employee.insert( { "empno": 1, "ename": "Georgi", "age": 48 } );
db.company.employee.insert( { "empno": 2, "ename": "Bezalel", "age": 21 } );

创建company数据库:/opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb company myinst
进入PostgreSQL shell:/opt/sequoiasql/postgresql/bin/psql -p 5432 company
加载SequoiaDB连接驱动:create extension sdb_fdw
配置与SequoiaDB连接参数:CREATE SERVER sdb_server FOREIGN DATA WRAPPER sdb_fdw OPTIONS (address '127.0.0.1', service '11810', preferedinstance 'A', transaction 'on');

  • 如果需要提供多个协调节点地址,options 中的 address 字段可以按格式 'ip1:port1,ip2:port2,ip3:port3’填写。此时,service 字段可填写任意一个非空字符串
  • preferedinstance 设置 SequoiaDB 的连接属性。多个属性以逗号分隔,如:preferedinstance ‘1,2,A’。详细配置请参考 preferedinstance 取值
  • transaction 设置 SequoiaDB 是否开启事务,默认为off。开启为on 更多 SequoiaDB 连接参数说明请参考 PostgreSQL 实例连接
    创建company数据库外表:
CREATE FOREIGN TABLE employee 
(
  empno INTEGER, 
  ename TEXT,
  age INTEGER
) SERVER sdb_server 
OPTIONS (collectionspace 'company', collection 'employee', decimal 'on');
  • collectionspace 参数指定 SequoiaDB 数据库的集合空间名,该集合空间必须已经存在
  • collection 参数指定 SequoiaDB 数据库的集合名,该集合必须已经存在且属于 collectionspace 参数所指定的集合空间
  • decimal 参数值为 on 时,表示需要对接 SequoiaDB 的decimal字段 更多 PostgreSQL 实例外表创建参数请参考 PostgreSQL 实例连接
    更新表的统计信息:ANALYZE employee;

创建SparkSQL实例
连接MySQL实例:/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
创建metauser用户:CREATE USER 'metauser'@'%' IDENTIFIED BY 'metauser';
给metauser用户授权:GRANT ALL ON *.* TO 'metauser'@'%';
刷新权限:FLUSH PRIVILEGES;
创建元数据库:CREATE DATABASE metastore CHARACTER SET 'latin1' COLLATE 'latin1_bin';
在这里插入图片描述
执行 ssh-keygen 生成公钥和密钥,执行后连续回车即可:ssh-keygen -t rsa
执行 ssh-copy-id,把公钥拷贝到本机的 sdbadmin 用户:ssh-copy-id sdbadmin@sdbserver1
进行Spark的配置目录:cd /opt/spark-2.4.4-bin-hadoop2.7/conf
从模板中拷贝spark-env.sh文件:cp spark-env.sh.template spark-env.sh
设置Spark实例的Master:echo "SPARK_MASTER_HOST=sdbserver1" >> spark-env.sh
指定Spark实例的元数据信息存放的数据库信息。
创建设置元数据库配置文件 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?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

检查是否创建成功: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驱动连接器: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:cp /opt/sequoiadb/java/sequoiadb-driver-3.4.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/
拷贝 MySQL 的 java 驱动 mysql-jdbc.jar:cp /home/sdbadmin/soft/mysql-jdbc.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/

设置Spark日志级别:
由于 Spark 默认日志级别为 INFO ,运行 spark-sql 客户端时会打印大量日志输出屏幕,为了避免这个问题把日志级别改为 ERROR。
拷贝 log4j.properties:cp log4j.properties.template log4j.properties
log4j.properties 中设置日志级别:sed -i 's/log4j.rootCategory=INFO, console/log4j.rootCategory=ERROR, console/g' log4j.properties
检查日志输出配置是否成功:cat log4j.properties

测试SparkSQL实例:
进入 Spark 的安装目录:cd /opt/spark-2.4.4-bin-hadoop2.7
启动 Spark:sbin/start-all.sh
查看 Spark 的 master 和 worker 是否启动完成:jps
启动 spark-sql 客户端:bin/spark-sql
创建company数据库:create database company; use company;
创建映射表:

CREATE TABLE company.employee 
(
empno INT,
ename STRING,
age INT
) USING com.sequoiadb.spark OPTIONS (host 'localhost:11810', collectionspace 'company', collection 'employee', username '', password '');

在这里插入图片描述测试运行sql:SELECT AVG(age) FROM company.employee;

PostgreSQL实例访问数据:
创建company数据库:/opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb company myinst
进入PostgreSQL shell:/opt/sequoiasql/postgresql/bin/psql -p 5432 company
加载SequoiaDB连接驱动:CREATE EXTENSION sdb_fdw;
配置与SequoiaDB连接参数:

CREATE SERVER sdb_server FOREIGN DATA WRAPPER sdb_fdw OPTIONS
(
address '127.0.0.1', 
service '11810', 
preferedinstance 'A', 
transaction 'off'
);
  • 如果需要提供多个协调节点地址,options 中的 address 字段可以按格式 'ip1:port1,ip2:port2,ip3:port3’填写。此时,service 字段可填写任意一个非空字符串
  • preferedinstance 设置 SequoiaDB 的连接属性。多个属性以逗号分隔,如:preferedinstance ‘1,2,A’。详细配置请参考 preferedinstance 取值
  • transaction 设置 SequoiaDB 是否开启事务,默认为off。开启为on 更多 SequoiaDB 连接参数说明请参考 PostgreSQL 实例连接
    创建company数据库外表:

关联存储引擎中的集合:
创建company数据库外表:

CREATE FOREIGN TABLE employee 
(
  empno INTEGER, 
  ename TEXT,
  age INTEGER
) SERVER sdb_server 
OPTIONS (collectionspace 'company', collection 'employee', decimal 'on');
  • collectionspace 参数指定 SequoiaDB 数据库的集合空间名,该集合空间必须已经存在
  • collection 参数指定 SequoiaDB 数据库的集合名,该集合必须已经存在且属于 collectionspace 参数所指定的集合空间
  • decimal 参数值为 on 时,表示需要对接 SequoiaDB 的decimal字段 更多 PostgreSQL 实例外表创建参数请参考 PostgreSQL 实例连接

更新表的统计信息:ANALYZE employee;

SparkSQL实例中访问数据:
在这里插入图片描述
创建映射表:

CREATE TABLE company.employee 
(
empno INT,
ename STRING,
age INT
) USING com.sequoiadb.spark OPTIONS (host 'localhost:11810', collectionspace 'company', collection 'employee', username '', password '');

在这里插入图片描述运行测试sql:SELECT AVG(age) FROM company.employee;

创建S3对象存储实例:
配置巨杉数据库事务级别:
在这里插入图片描述
设置事务级别及配置为等锁模式:
db.updateConf( { transactionon: true, transisolation: 1, translockwait: true } );

配置SequoiaS3:
进入SequoiaS3程序目录:cd /opt/sequoiadb/tools/sequoias3
配置 SequoiaS3,打开 config 目录中的 application.properties 文件:cat config/application.properties
增加以下内容至 application.properties 文件,配置对外监听端口:echo "server.port=8002" >> /opt/sequoiadb/tools/sequoias3/config/application.properties
增加以下内容至 application.properties 文件,配置 coord 节点的 IP 和端口,可以配置多组并使用逗号分隔:echo "sdbs3.sequoiadb.url=sequoiadb://localhost:11810" >> /opt/sequoiadb/tools/sequoias3/config/application.properties
在这里插入图片描述
SequoiaS3配置

启动S3实例:
启动SequoiaS3:./sequoias3.sh start
Note: 如需停止 SequoiaS3 进程,执行 stop -p {port} 停止监听指定端口的 SequoiaS3 进程,或执行 stop -a 停止所有 SequoiaS3 进程:./sequoias3.sh stop -p 8002

操作bucket及文件对象:
在本例中将使用 curl restful 方式来测试 s3 接口。
创建存放数据文件的目录 /home/sdbadmin/s3:mkdir -p /home/sdbadmin/s3
进入目录:cd /home/sdbadmin/s3

创建同sdbbucket:
在 shell 环境中设置变量及相关值:

bucket="sdbbucket"  
dateValue=`date -R`  
resource="/${bucket}/"  
contentType="application/octet-stream"  
stringToSign="PUT\n\n\n${dateValue}\n${resource}"  
s3Key="ABCDEFGHIJKLMNOPQRST"  
s3Secret="abcdefghijklmnopqrstuvwxyz0123456789ABCD"  
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`  

使用 curl 创建一个 sdbbucket:curl -v -X PUT "http://localhost:8002/${bucket}" -H "Host: localhost:8002" -H "Date: ${dateValue}" -H "Authorization: AWS ${s3Key}:${signature}"

获取S3中的sdbbucket信息:
使用 curl 获取上个小节创建的 sdbbucket 的信息:curl -v -X GET "http://localhost:8002" -H "Host: localhost:8002" -H "Date: ${dateValue}" -H "Authorization: AWS ${s3Key}:${signature}"

向桶中写入文件:
查看 /opt/sequoiadb/bin/sdb 文件的信息:ls -l /opt/sequoiadb/bin/sdb
在 shell 环境中设置变量及相关值:

file="/opt/sequoiadb/bin/sdb"
objname="sdb"  
bucket=sdbbucket  
url="localhost:8002"  
resource="/${bucket}/${objname}"  
contentType="application/x-compressed-tar"  
dateValue=`date -R`  
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"  
s3Key="ABCDEFGHIJKLMNOPQRST"  
s3Secret="abcdefghijklmnopqrstuvwxyz0123456789ABCD"  
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`

使用 curl 向 sdbbucket 中写入文件 sdb,在 S3 中的名称是 sdb:curl -X PUT -T "${file}" -H "Host: ${url}" -H "Date: ${dateValue}" -H "Content-Type: ${contentType}" -H "Authorization: AWS ${s3Key}:${signature}" "http://${url}/${bucket}/${objname}"

从桶中下载文件:
使用 curl 从 sdbbucket 中读取文件对象"sdb",并存放到当前目录,保存的文件名为"sdb_download"。

在 shell 环境中设置变量及相关值:

file="./sdb_download"  
objname="sdb"  
bucket=sdbbucket  
url="localhost:8002"  
resource="/${bucket}/${objname}"  
contentType="application/x-compressed-tar"  
dateValue=`date -R`  
stringToSign="GET\n\n${contentType}\n${dateValue}\n${resource}"  
s3Key="ABCDEFGHIJKLMNOPQRST"  
s3Secret="abcdefghijklmnopqrstuvwxyz0123456789ABCD"  
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`

使用 curl 从 sdbbucket 中下载文件:curl -o ${file} -X GET -H "Host: ${url}" -H "Date: ${dateValue}" -H "Content-Type: ${contentType}" -H "Authorization: AWS ${s3Key}:${signature}" "http://${url}/${bucket}/${objname}"

观察S3元数据:
在这里插入图片描述查看创建的“sdbbucket” bucket的元数据:db.S3_SYS_Meta.S3_Bucket.find();
查看上载的文件的元数据:db.S3_SYS_Meta.S3_ObjectMeta.find();
文件对象所在的集合,这个集合由 S3 实例自动创建,并且默认按照每年每个季度分表,及每个季度产生一个新的Collection:
db.S3_SYS_Data_2020_1.S3_ObjectData_Q1.listLobs();

在S3实例中删除文件和桶:
在 shell 环境中设置变量及相关值:

objname="sdb"  
bucket=sdbbucket  
url="localhost:8002"  
resource="/${bucket}/${objname}"  
contentType="application/x-compressed-tar"  
dateValue=`date -R`  
stringToSign="GET\n\n${contentType}\n${dateValue}\n${resource}"  
s3Key="ABCDEFGHIJKLMNOPQRST"  
s3Secret="abcdefghijklmnopqrstuvwxyz0123456789ABCD"  
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`  

使用 curl 命令 删除 sdbbucket 中的文件对象"sdb":curl -X DELETE -H "Host: ${url}" -H "Date: ${dateValue}" -H "Content-Type: ${contentType}" -H "Authorization: AWS ${s3Key}:${signature}" "http://${url}/${bucket}/${objname}"
使用 curl 命令,从 SequoiaS3 中删除桶"sdbbucket":curl -X DELETE -H "Host: ${url}" -H "Date: ${dateValue}" -H "Content-Type: ${contentType}" -H "Authorization: AWS ${s3Key}:${signature}" "http://${url}/${bucket}"
在这里插入图片描述
创建NFS网络文件系统实例:
查看fuse的版本信息:fusermount --version
查看 SequoiaFS 实例程序:ls -lrt /opt/sequoiadb/bin/sequoiafs
创建集合空间和集合:
创建逻辑域:db.createDomain("fs_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
创建集合空间:db.createCS("fscs", { Domain: "fs_domain" } );
创建 fscl 集合,存储挂载目录下文件的内容:db.fscs.createCL("fscl", { "ShardingKey": { "_id": 1}, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
创建挂载点及配置文件:
在这里插入图片描述
创建挂载点mountpoint:mkdir -p /opt/sequoiafs/mountpoint
创建 SequoiaFS 的配置文件目录和日志目录:

mkdir -p /opt/sequoiafs/conf/fscs_fscl/001/
mkdir -p /opt/sequoiafs/log/fscs_fscl/001/

产生一个空配置文件,SequoiaFS 服务在启动时会将指定的值写入该文件中,其他参数使用缺省值:touch /opt/sequoiafs/conf/fscs_fscl/001/sequoiafs.conf
在这里插入图片描述
sequoiafs /opt/sequoiafs/mountpoint -i localhost:11810 -l fscs.fscl --autocreate -c /opt/sequoiafs/conf/fscs_fscl/001/ --diagpath /opt/sequoiafs/log/fscs_fscl/001/ -o big_writes -o max_write=131072 -o max_read=131072
在这里插入图片描述
sequoiaFS实例参数配置
查看挂载目录:
本地 SequoiaFS 节点通过 mount 可以看到挂载信息。通过 sequoiafs 挂载上的 /opt/sequoiafs/mountpoint 目录,文件系统类型为 fuse.sequoiafs:mount
在这里插入图片描述在这里插入图片描述
查看 SequoiaFS 实例在 SequoiaDB 存储引擎存储的挂载信息:db.sequoiafs.maphistory.find();

挂载目录下文件和目录操作:本章节将创建 fsdir 目录和 fsfile.txt 文件用于作为 SequoiaFS 实例的测试例子。

创建目录:
进入挂载目录:cd /opt/sequoiafs/mountpoint/
创建目录:mkdir fsdir

创建文件并写入内容:
进入新建的 fsdir 目录:cd /opt/sequoiafs/mountpoint/fsdir
使用echo重定向内容创建文件:echo 'hello, this is a fsfile!' >> fsfile.txt
查看文件内容是否存在:cat fsfile.txt
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 【华为云技术分享】云图说 | 容器交付流水线ContainerOps,助力企业容器化转型

下一篇: 推动量子计算与AI融合,飞桨成为中国首个支持量子机器学习的深度学习平台

精华推荐