赞
踩
前几天领导让用spark集成OceanBase支持读写,没办法只能简单的了解一下OceanBase,然后搭建了一个单机版的OceanBase测试使用,这里也理解的比较浅显,毕竟时间紧任务重,一切以完成任务为目的。。。
简单的介绍一下OceanBase 吧,大部分都是从官网直接拿过来的
OceanBase 数据库是阿里巴巴和蚂蚁集团不基于任何开源产品,完全自研的原生分布式关系数据库软件
, 产品具有云原生、强一致性、高度兼容 Oracle/MySQL 等特性
OceanBase 数据库具有业务连续性、应用易用性、低成本及低风险的产品优势。
OceanBase 数据库采用 Shared-Nothing
架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎,运行在普通 PC 服务器组成的集群之上,具备可扩展、高可用、高性能、低成本、云原生等核心特性。
OceanBase 数据库支持数据跨地域(Region)部署,以 OceanBase 数据库可以支持多城市部署,也支持多城市级别的容灾。一个 Region 可以包含一个或者多个 Zone,Zone 是一个逻辑的概念,它包含了 1 台或者多台运行了 OBServer 进程的服务器。
每个 Zone 会提供两种服务:总控服务(RootService)和分区服务(PartitionService)。总控服务负责整个集群的资源调度、资源分配、数据分布信息管理以及 Schema 管理等功能
OceanBase 数据库基于 Paxos 的分布式选举算法来实现系统的高可用,
Parser(词法/语法解析模块)
Resolver(语义解析模块)
Transfomer(逻辑改写模块)
Optimizer(优化器)
Code Generator(代码生成器)
Executor(执行器)
Plan Cache(执行计划缓存模块)
pom依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
<type>jar</type>
</dependency>
1.安装 yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo yum install -y ob-deploy yum install -y obclient 2.自己手动上传配置文件(位置无所谓),根据自己集群模式选择对应的配置文件 配置文件地址:https://gitee.com/oceanbase/obdeploy/tree/master/example 3.启动oceanbase //启动之前注意: 3.1:先检查句柄限制,修改/etc/security/limits.conf配置,不修改会报错 * soft nofile 655360 * hard nofile 655360 * soft nproc 655360 * hard nproc 655360 * soft core unlimited * hard core unlimited * soft stack unlimited * hard stack unlimited 3.2:检查可用内存是否大于8G(即使在上一步自己上传的配置文件将启动可用内存修改小于8G也不行),实际可用内存必须大于8G,否则绝对报错,而且错误信息根本无从排查,以下是错误信息,曾卡了我一天 Check before start observer ok [WARN] (127.0.0.1) clog and data use the same disk (/) Start observer ok observer program health check x [WARN] failed to start 127.0.0.1 observer [ERROR] oceanbase-ce start failed 注意:如果配置文件中的ip由127.0.0.1改为自己的ip,那么也要将配置文件中的devname属性改为自己的网卡名!! 3.3:安装集群( /opt/oceanbase/mini-local-example.yaml是我自己上传的配置文件的路径) obd cluster deploy oceanTest -c /opt/oceanbase/mini-local-example.yaml -f mini-local-example.yaml是上传的配置文件, oceanTest是指定的集群名(不可重复,默认在/root/.obd/cluster/下,如果启动时发生错误,又不想改集群名,可手动删除系统创建的集群名文件夹,再用命令) -f:配置文件中有一个目录,不可有内容;-f表示覆盖,可用于启动错误后第二次启动(未手动删除之前的目录) 如果报错: [ERROR] (127.0.0.1) / not enough disk space for clog. Use `redo_dir` to set other disk for clog, or reduce the value of `datafile_size` 那么修改配置文件中的datafile_disk_percentage属性,改小一些 3.4启动 oceanTest:上一步启动时的集群名字 obd cluster start oceanTest obd cluster stop oceanTest //停止 3.5启动成功,查看状态 oceanTest:上一步启动时的集群名字 obd cluster display oceanTest 4.连接oceanBase 127.0.0.1:IP 2881:配置文件中配置的端口号,若配置文件中修改,这里也要修改,可根据3.5查看状态; obclient -h127.0.0.1 -P2881 -uroot 5.使用Navicat连接OceanBase(没记错的话,默认没密码)
这里附上一张使用Navicat连接OceanBase的截图:默认没密码
val conf = new SparkConf().setAppName("test").setMaster("local[4]") val spark = SparkSession.builder().config(conf).getOrCreate() //读数据 val df= spark.read.format("jdbc") .option("url", "jdbc:mysql://127.0.0.1/dbname") .option("driver", "com.mysql.jdbc.Driver") .option("dbtable", "tc_table") .option("user", "root") .option("password","password") .load() df.show() //写数据 val df = spark.createDataFrame(Seq( ("ming", 20, 15552211521L), ("hong", 19, 13287994007L), ("zhi", 21, 15552211523L) )).toDF("name", "age", "phone") val properties = new Properties() properties.put("user", "root") properties.put("password", "password") properties.put("driver","com.mysql.jdbc.Driver") properties.put("isolationLevel","NONE") //如果这里事务不设置NONE,会报错 //写入TiDB数据库的tc_table表中 df.write.mode(SaveMode.Append).jdbc("jdbc:mysql://127.0.0.1/dbname","tc_table",properties)``
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。