Moonbox(計(jì)算服務(wù)平臺)部署與使用

一赫蛇、說明

Moonbox(計(jì)算服務(wù)平臺),是一個(gè)DVtaaS(Data Virtualization as a Service)平臺解決方案赂鲤。Moonbox面向數(shù)據(jù)倉庫工程師/數(shù)據(jù)分析師/數(shù)據(jù)科學(xué)家等噪径, 基于數(shù)據(jù)虛擬化設(shè)計(jì)思想,致力于提供批量計(jì)算服務(wù)解決方案数初。Moonbox負(fù)責(zé)屏蔽底層數(shù)據(jù)源的物理和使用細(xì)節(jié)找爱,為用戶帶來虛擬數(shù)據(jù)庫般使用體驗(yàn),用戶只需通過統(tǒng)一SQL語言泡孩,即可透明實(shí)現(xiàn)跨異構(gòu)數(shù)據(jù)系統(tǒng)混算和寫出车摄。此外Moonbox還提供數(shù)據(jù)服務(wù)、數(shù)據(jù)管理仑鸥、數(shù)據(jù)工具吮播、數(shù)據(jù)開發(fā)等基礎(chǔ)支持,可支撐更加敏捷和靈活的數(shù)據(jù)應(yīng)用架構(gòu)和邏輯數(shù)倉實(shí)踐眼俊。

二意狠、架構(gòu)

上圖展示的是Moonbox的架構(gòu)圖〈郑可以看到Moonbox的計(jì)算引擎部分也是基于Spark引擎做的环戈,并沒有自研。Moonbox對Spark進(jìn)行擴(kuò)展和優(yōu)化澎灸,增加了很多企業(yè)級的數(shù)據(jù)庫能力院塞,比如用戶、租戶性昭、權(quán)限拦止、 類存儲過程等。從上圖看糜颠,Moonbox整個(gè)服務(wù)端是一個(gè)分布式的架構(gòu)汹族,所以它也是高可用的。

Moonbox總體上由四部分組成其兴,分別是客戶端鞠抑、接入層、Grid以及存儲計(jì)算層忌警。

客戶端

客戶端有如下幾種:

rest api

以restful api的方式提供batch作業(yè)提交、查詢作業(yè)執(zhí)行狀態(tài)、取消作業(yè)服務(wù)法绵。

jdbc

提供jdbc驅(qū)動(dòng)箕速,可以使用jdbc編程訪問, 使用戶擁有數(shù)據(jù)庫般的使用體驗(yàn)。

odbc

提供odbc支持朋譬,用戶可以使用sas連接moonbox進(jìn)行數(shù)據(jù)分析盐茎。

cli

命令行工具,基于jline實(shí)現(xiàn)徙赢。通過cli可以完成DDL(Data Definition Language)字柠、DML(Data Manipulation Language)、DCL(Data Control Language)以及Query操作狡赐。

zeppelin

提供zeppelin moonbox interpreter窑业,可以使用zeppelin快速進(jìn)行原型驗(yàn)證和SQL開發(fā)。

davinci

通過jdbc支持ABD Stack(敏捷大數(shù)據(jù)技術(shù)棧)中數(shù)據(jù)可視化平臺davinci的接入枕屉,進(jìn)行數(shù)據(jù)查詢并展示常柄。

接入層

接入層包括http server、tcp server和thrift server搀擂,實(shí)現(xiàn)客戶端接入西潘,并進(jìn)行用戶登錄認(rèn)證。

分布式服務(wù)層

Grid是Moonbox分布式服務(wù)層哨颂。Grid使用master-slave集群工作模式喷市,支持master主備切換。Grid有Master威恼、Worker品姓、App三種角色:

Master負(fù)責(zé)接收所有的用戶請求,根據(jù)請求模式(adhoc/batch)將請求調(diào)度到合適的App上沃测。

Worker向Master注冊,負(fù)責(zé)該節(jié)點(diǎn)上App的啟動(dòng)和停止缭黔,每個(gè)Worker節(jié)點(diǎn)可以啟動(dòng)多個(gè)不同種類的App。

App也會向Master注冊,App是真正處理計(jì)算的角色,可以是一個(gè)Spark App, 也可以是其他自定義的App蒂破。

計(jì)算/存儲層

Moonbox默認(rèn)使用Spark作為計(jì)算引擎馏谨,將一個(gè)常駐的Spark作業(yè)稱之為一個(gè)App, 支持standalone和yarn運(yùn)行模式。Spark App處理用戶發(fā)過來的請求附迷,包括用戶體系管理操作惧互、權(quán)限管理操作、SQL解析喇伯、下推優(yōu)化喊儡、執(zhí)行引擎選擇等,并提交真正的計(jì)算任務(wù)稻据。當(dāng)計(jì)算邏輯可以完全下推到數(shù)據(jù)源計(jì)算時(shí)艾猜,Moonbox將計(jì)算任務(wù)直接mapping成數(shù)據(jù)源的查詢語言進(jìn)行下推計(jì)算,以減小啟動(dòng)分布式作業(yè)的開銷。數(shù)據(jù)源除了可以是hdfs這種純存儲系統(tǒng)匆赃,mysql淤毛、elasticsearch這種帶計(jì)算能力的存儲系統(tǒng),還可以是presto等計(jì)算引擎算柳,Moonbox將他們統(tǒng)一視為數(shù)據(jù)源低淡。

三、安裝說明

部署機(jī)器:

? ? 192.168.210.23

? ? 192.168.210.24

? ? 192.168.210.25

安裝目錄:

/opt/moonbox

環(huán)境準(zhǔn)備

已安裝Apache Spark 2.2.0

(此版本僅支持Apache Spark 2.2.0, 其他Spark 版本后續(xù)會兼容)

已安裝MySQL并啟動(dòng),且開啟遠(yuǎn)程訪問

各安裝節(jié)點(diǎn)已經(jīng)配置ssh免密登錄

下載

moonbox-0.3.0-beta下載

網(wǎng)址: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

將會看到如下內(nèi)容:

? localhost

請根據(jù)實(shí)際情況修改為需要部署worker節(jié)點(diǎn)的地址, 每行一個(gè)地址

step 2: 修改moonbox-env.sh

? mv moonbox-env.sh.example moonbox-env.sh

? chmod u+x moonbox-env.sh

? vim moonbox-env.sh

將會看到如下內(nèi)容:

? 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

請根據(jù)實(shí)際情況修改

step 3: 修改moonbox-defaults.conf

? mv moonbox-defaults.conf.example moonbox-defaults.conf

? vim moonbox-defaults.conf

將會看到以下內(nèi)容,其中:

catalog

配置元數(shù)據(jù)存儲位置, 必須修改, 請根據(jù)實(shí)際情況修改

rest

配置rest服務(wù), 按需修改

tcp

配置tcp(jdbc)服務(wù), 按需修改

local

配置Spark Local模式作業(yè), 值為數(shù)組, 有多少個(gè)元素表示每個(gè)Worker節(jié)點(diǎn)啟動(dòng)多少個(gè)Spark Local模式作業(yè)瞬项。如不需要可刪除蔗蹋。

cluster

配置Spark yarn模式作業(yè), 值為數(shù)組, 有多少個(gè)元素表示每個(gè)Worker節(jié)點(diǎn)啟動(dòng)多少個(gè)Spark Yarn模式作業(yè)。如不需要可刪除囱淋。

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元素中相關(guān)部分改為以下配置, 請根據(jù)實(shí)際情況修改胁孙。具體值可查閱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 = ""

分發(fā)安裝包

將MySQL Jdbc驅(qū)動(dòng)包放置到libs和runtime目錄下, 然后將整個(gè)moonbox安裝目錄拷貝到所有安裝節(jié)點(diǎn), 確保位置與主節(jié)點(diǎn)位置一致称鳞。

啟動(dòng)集群

在master節(jié)點(diǎn)執(zhí)行

?? sbin/start-all.sh

停止集群

在master節(jié)點(diǎn)執(zhí)行

?? sbin/stop-all.sh

檢查集群是否成功啟動(dòng)

在master節(jié)點(diǎn)執(zhí)行如下命令, 將會看到 MoonboxMaster 進(jìn)程

?? jps | grep Moonbox

在worker節(jié)點(diǎn)執(zhí)行如下命令, 將會看到 MoonboxWorker 進(jìn)程

?? jps | grep Moonbox

在worker節(jié)點(diǎn)執(zhí)行如下命令, 將會看到與配置文件對應(yīng)個(gè)數(shù)的 SparkSubmit 進(jìn)程

?? jps -m | grep Spark

使用moonbox-cluster命令查看集群信息

?? bin/moonbox-cluster workers

?? bin/moonbox-cluster apps

如果檢查通過, 則集群啟動(dòng)成功, 即可參閱examples部分開始體驗(yàn)啦涮较。 如果檢查失敗, 可通過查看master節(jié)點(diǎn)或者worker節(jié)點(diǎn)上logs目錄下的日志進(jìn)行問題排查。

四冈止、使用說明

應(yīng)用場景一:數(shù)據(jù)查詢

用戶使用

使用sally登錄

bin/moonbox-shell -u sally -p 123456 -r local

掛載數(shù)據(jù)源 (根據(jù)自己的實(shí)際數(shù)據(jù)庫更改)

mount database mb_mysql options(

? type 'mysql',

url 'jdbc:mysql://host:port/database',

? user 'user',

? password 'password',

? driver 'com.mysql.jdbc.Driver'

)

列出所有數(shù)據(jù)庫

show database

列出當(dāng)前庫下所有表

show tables

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狂票,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子熙暴,更是在濱河造成了極大的恐慌闺属,老刑警劉巖姥敛,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件团赁,死亡現(xiàn)場離奇詭異,居然都是意外死亡丢烘,警方通過查閱死者的電腦和手機(jī)俱箱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門国瓮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狞谱,你說我怎么就攤上這事乃摹。” “怎么了跟衅?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵孵睬,是天一觀的道長。 經(jīng)常有香客問我伶跷,道長掰读,這世上最難降的妖魔是什么秘狞? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蹈集,結(jié)果婚禮上谒撼,老公的妹妹穿的比我還像新娘。我一直安慰自己雾狈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布抵皱。 她就那樣靜靜地躺著善榛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呻畸。 梳的紋絲不亂的頭發(fā)上移盆,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音伤为,去河邊找鬼咒循。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绞愚,可吹牛的內(nèi)容都是我干的叙甸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼位衩,長吁一口氣:“原來是場噩夢啊……” “哼裆蒸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糖驴,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤僚祷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贮缕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辙谜,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年感昼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了装哆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抑诸,死狀恐怖烂琴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜕乡,我是刑警寧澤奸绷,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站层玲,受9級特大地震影響号醉,放射性物質(zhì)發(fā)生泄漏反症。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一畔派、第九天 我趴在偏房一處隱蔽的房頂上張望铅碍。 院中可真熱鬧,春花似錦线椰、人聲如沸胞谈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烦绳。三九已至,卻和暖如春配紫,著一層夾襖步出監(jiān)牢的瞬間径密,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工躺孝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留享扔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓植袍,卻偏偏與公主長得像惧眠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子奋单,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容