一、说明
Moonbox(计算服务平台),是一个DVtaaS(Data Virtualization as a Service)平台解决方案。Moonbox面向数据仓库工程师/数据分析师/数据科学家等, 基于数据虚拟化设计思想,致力于提供批量计算服务解决方案。Moonbox负责屏蔽底层数据源的物理和使用细节,为用户带来虚拟数据库般使用体验,用户只需通过统一SQL语言,即可透明实现跨异构数据系统混算和写出。此外Moonbox还提供数据服务、数据管理、数据工具、数据开发等基础支持,可支撑更加敏捷和灵活的数据应用架构和逻辑数仓实践。
二、架构
上图展示的是Moonbox的架构图。可以看到Moonbox的计算引擎部分也是基于Spark引擎做的,并没有自研。Moonbox对Spark进行扩展和优化,增加了很多企业级的数据库能力,比如用户、租户、权限、 类存储过程等。从上图看,Moonbox整个服务端是一个分布式的架构,所以它也是高可用的。
Moonbox总体上由四部分组成,分别是客户端、接入层、Grid以及存储计算层。
客户端
客户端有如下几种:
rest api
以restful api的方式提供batch作业提交、查询作业执行状态、取消作业服务。
jdbc
提供jdbc驱动,可以使用jdbc编程访问, 使用户拥有数据库般的使用体验。
odbc
提供odbc支持,用户可以使用sas连接moonbox进行数据分析。
cli
命令行工具,基于jline实现。通过cli可以完成DDL(Data Definition Language)、DML(Data Manipulation Language)、DCL(Data Control Language)以及Query操作。
zeppelin
提供zeppelin moonbox interpreter,可以使用zeppelin快速进行原型验证和SQL开发。
davinci
通过jdbc支持ABD Stack(敏捷大数据技术栈)中数据可视化平台davinci的接入,进行数据查询并展示。
接入层
接入层包括http server、tcp server和thrift server,实现客户端接入,并进行用户登录认证。
分布式服务层
Grid是Moonbox分布式服务层。Grid使用master-slave集群工作模式,支持master主备切换。Grid有Master、Worker、App三种角色:
Master负责接收所有的用户请求,根据请求模式(adhoc/batch)将请求调度到合适的App上。
Worker向Master注册,负责该节点上App的启动和停止,每个Worker节点可以启动多个不同种类的App。
App也会向Master注册,App是真正处理计算的角色,可以是一个Spark App, 也可以是其他自定义的App。
计算/存储层
Moonbox默认使用Spark作为计算引擎,将一个常驻的Spark作业称之为一个App, 支持standalone和yarn运行模式。Spark App处理用户发过来的请求,包括用户体系管理操作、权限管理操作、SQL解析、下推优化、执行引擎选择等,并提交真正的计算任务。当计算逻辑可以完全下推到数据源计算时,Moonbox将计算任务直接mapping成数据源的查询语言进行下推计算,以减小启动分布式作业的开销。数据源除了可以是hdfs这种纯存储系统,mysql、elasticsearch这种带计算能力的存储系统,还可以是presto等计算引擎,Moonbox将他们统一视为数据源。
三、安装说明
部署机器:
192.168.210.23
192.168.210.24
192.168.210.25
安装目录:
/opt/moonbox
环境准备
已安装Apache Spark 2.2.0
(此版本仅支持Apache Spark 2.2.0, 其他Spark 版本后续会兼容)
已安装MySQL并启动,且开启远程访问
各安装节点已经配置ssh免密登录
下载
网址:https://github.com/edp963/moonbox/releases/tag/0.3.0-beta
解压
tar -zxvf moonbox-assembly_2.11-0.3.0-beta-dist.tar.gz
修改配置文件
配置文件位于conf目录下
step 1: 修改slaves
· mv slaves.example slaves
· vim slaves
将会看到如下内容:
localhost
请根据实际情况修改为需要部署worker节点的地址, 每行一个地址
step 2: 修改moonbox-env.sh
mv moonbox-env.sh.example moonbox-env.sh
chmod u+x moonbox-env.sh
vim moonbox-env.sh
将会看到如下内容:
export JAVA_HOME=path/to/installed/dir
export SPARK_HOME=path/to/installed/dir
export YARN_CONF_DIR=path/to/yarn/conf/dir
export MOONBOX_SSH_OPTS="-p 22"
export MOONBOX_HOME=path/to/installed/dir
# export MOONBOX_LOCAL_HOSTNAME=localhost
export MOONBOX_MASTER_HOST=localhost
export MOONBOX_MASTER_PORT=2551
请根据实际情况修改
step 3: 修改moonbox-defaults.conf
mv moonbox-defaults.conf.example moonbox-defaults.conf
vim moonbox-defaults.conf
将会看到以下内容,其中:
catalog
配置元数据存储位置, 必须修改, 请根据实际情况修改
rest
配置rest服务, 按需修改
tcp
配置tcp(jdbc)服务, 按需修改
local
配置Spark Local模式作业, 值为数组, 有多少个元素表示每个Worker节点启动多少个Spark Local模式作业。如不需要可删除。
cluster
配置Spark yarn模式作业, 值为数组, 有多少个元素表示每个Worker节点启动多少个Spark Yarn模式作业。如不需要可删除。
moonbox { deploy { catalog { implementation = "mysql" url = "jdbc:mysql://host:3306/moonbox?createDatabaseIfNotExist=true" user = "root" password = "123456" driver = "com.mysql.jdbc.Driver" } rest { enable = true port = 9099 request.timeout = "600s" idle.timeout= "600s" } tcp { enable = true port = 10010 } } mixcal { pushdown.enable = true column.permission.enable = true spark.sql.cbo.enabled = true spark.sql.constraintPropagation.enabled = false local = [{}] cluster = [{ spark.hadoop.yarn.resourcemanager.hostname = "master" spark.hadoop.yarn.resourcemanager.address = "master:8032" spark.yarn.stagingDir = "hdfs://master:8020/tmp" spark.yarn.access.namenodes = "hdfs://master:8020" spark.loglevel = "ERROR" spark.cores.max = 2spark.yarn.am.memory = "512m"spark.yarn.am.cores = 1 spark.executor.instances = 2 spark.executor.cores = 1 spark.executor.memory = "2g" }] } }
optional: 如果HDFS 配置了高可用(HA)、或者HDFS 配置了kerberos、或者YARN 配置了高可用(HA)、或者YARN 配置了kerberos
将cluster元素中相关部分改为以下配置, 请根据实际情况修改。具体值可查阅hdfs配置文件和yarn配置文件。
#### HDFS HA ####
spark.hadoop.fs.defaultFS="hdfs://service_name" spark.hadoop.dfs.nameservices="service_name" spark.hadoop.dfs.ha.namenodes.service_name="xxx1,xxx2" spark.hadoop.dfs.namenode.rpc-address.abdt.xxx1="xxx1_host:8020" spark.hadoop.dfs.namenode.rpc-address.abdt.xxx2="xxx2_host:8020" spark.hadoop.dfs.client.failover.proxy.provider.abdt="org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
spark.yarn.stagingDir = "hdfs://service_name/tmp"
#### HDFS kerberos ####
dfs.namenode.kerberos.principal = ""
dfs.namenode.kerberos.keytab = ""
#### YARN HA ####
spark.hadoop.yarn.resourcemanager.ha.enabled=true
spark.hadoop.yarn.resourcemanager.ha.rm-ids="yyy1,yyy2"
spark.hadoop.yarn.resourcemanager.hostname.rm1="yyy1_host"
spark.hadoop.yarn.resourcemanager.hostname.rm2="yyy2_host"
#### YARN kerberos ####
spark.yarn.principal = ""
spark.yarn.keytab = ""
分发安装包
将MySQL Jdbc驱动包放置到libs和runtime目录下, 然后将整个moonbox安装目录拷贝到所有安装节点, 确保位置与主节点位置一致。
启动集群
在master节点执行
sbin/start-all.sh
停止集群
在master节点执行
sbin/stop-all.sh
检查集群是否成功启动
在master节点执行如下命令, 将会看到 MoonboxMaster 进程
jps | grep Moonbox
在worker节点执行如下命令, 将会看到 MoonboxWorker 进程
jps | grep Moonbox
在worker节点执行如下命令, 将会看到与配置文件对应个数的 SparkSubmit 进程
jps -m | grep Spark
使用moonbox-cluster命令查看集群信息
bin/moonbox-cluster workers
bin/moonbox-cluster apps
如果检查通过, 则集群启动成功, 即可参阅examples部分开始体验啦。 如果检查失败, 可通过查看master节点或者worker节点上logs目录下的日志进行问题排查。
四、使用说明
应用场景一:数据查询
用户使用
使用sally登录
bin/moonbox-shell -u sally -p 123456 -r local
挂载数据源 (根据自己的实际数据库更改)
mount database mb_mysql options(
type 'mysql',
url 'jdbc:mysql://host:port/database',
user 'user',
password 'password',
driver 'com.mysql.jdbc.Driver'
)
列出所有数据库
show database
列出当前库下所有表
show tables
网友评论