目錄
前言
使用CDH6.0.0搭建的集羣環境,雖然默認選擇的spark2.2,但是依然是無法直接使用moonbox,此spark2.2非apache原生2.2,是經過CDH重構過得,所以在對接moonbox的時候,總是有問題,後來使用了暫緩方案,通過替換jar的方式實現了moonbox的鏈接(參考這裏),但是spark-shell不能使用,而且zeppline也不能正常使用。對於前期的技術調研和學習,使用這種方式可以湊合,但是如果真是到生產或者正式使用的時候,這樣做肯定不妥。爲了完美兼容moonbox,經過調研,最終選擇使用Ambari進行集羣環境的安裝和管理,相關大數據組件選擇使用HDP進行安裝,HDP據說是使用的原生apache組件。
ps:開源未編譯的使用的原生apache組件,但是編譯好的hdp對應的相關組件並非是原生。
版本信息:
ambari-2.6.1.0/HDP-2.6.5.0
問題描述
按照預期設想,我們使用了HDP進行集羣環境的搭建,使用的是原生的Spark2.2版本,照理說應該可以無縫對接moonbox了,但事實沒有這麼順利,經過測試發現moonbox還是啓動失敗。經過和moonbox的研發人員進行溝通交流,確認可以自己單獨部署一個spark2.2的環境,和HDP的spark共存,但是yarn還是使用一套。相關配置參考如下。
moonbox的配置項說明
moonbox-evn.sh配置
#JDK安裝目錄
export JAVA_HOME=/usr/java/jdk1.8.0_221
#spark的安裝目錄
export SPARK_HOME=/home/app/moonbox/spark/spark-2.2.0-bin-hadoop2.7
#yarn的conf目錄(chd的可以在spark目錄下找到,hdp的再hadoop-yarn目錄下)
export YARN_CONF_DIR=/usr/hdp/2.6.4.0-91/hadoop-yarn/etc/hadoop
export MOONBOX_SSH_OPTS="-p 22"
#moonbox的安裝目錄
export MOONBOX_HOME=/home/app/moonbox
#master的主機名
export MOONBOX_MASTER_HOST=master
#master的對應moonbox通訊的端口
export MOONBOX_MASTER_PORT=2551
moonbox-defaults.conf配置
moonbox {
deploy {
catalog {
implementation = "mysql"
url = "jdbc:mysql://192.168.1.123:3306/moonbox?createDatabaseIfNotExist=true"
user = "root"
password = "tydic0815"
driver = "com.mysql.jdbc.Driver"
}
rest {
enable = true
port = 9191
request.timeout = "600s"
idle.timeout= "600s"
}
tcp {
enable = true
port = 10010
}
timer {
enable = true
}
}
mixcal {
pushdown.enable = true
column.permission.enable = true
spark.sql.cbo.enabled = true
spark.sql.constraintPropagation.enabled = false
spark.sql.catalogImplementation = "in-memory"
cluster = [{
#yarn所在主節點的主機名
spark.hadoop.yarn.resourcemanager.hostname = "master"
#這個8050端口在yarn-site.xml文件的yarn.resourcemanager.address配置項找到
spark.hadoop.yarn.resourcemanager.address = "master:8050"
#這個8020端口在hdfs-site.xml文件的dfs.namenode.rpc-address配置項找到
spark.yarn.stagingDir = "hdfs://master:8020/tmp"
spark.yarn.access.namenodes = "hdfs://master:8020"
#下面兩行配置是使用hdp安裝的時候需要配置的項,指定hdp的版本,否則moonbox啓動失敗
spark.driver.extraJavaOptions = "-Dhdp.version=2.6.5.0-292"
spark.executor.extraJavaOptions = "-Dhdp.version=2.6.5.0-292"
spark.loglevel = "ERROR"
spark.cores.max = 2
spark.driver.memory = "512m"
spark.driver.cores = 1
spark.executor.instances = 2
spark.executor.cores = 1
spark.executor.memory = "2g"
}]
}
}
slaves配置項
master
slave1
以上配置好之後,拷貝整個安裝包到對應指定的目錄去就行了。
Spark2.2的安裝及部署
如上配置,單獨拷貝了一個spark2.2的安裝包放到moonbox的目錄中(非必須放置該位置),然後對spark2.2的相關參數進行配置和調整,如下:
(1)解壓壓縮包
(2)切換到conf目錄下,執行以下命令
cp spark-env.sh.template spark-env.sh
cp spark-defaults.conf.template spark-defaults.conf
cp slaves.template slaves
(3)對以上三個配置文件進行調整
spark-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_221
export SCALA_HOME=/usr/share/scala
export HADOOP_HOME=/usr/hdp/2.6.4.0-91/hadoop
export HADOOP_CONF_DIR=/usr/hdp/2.6.4.0-91/hadoop/etc/hadoop
spark-defaults.conf
#8020就是hadoop的dfs.namenode.rpc-address配置項,這一項不要配置,否則出錯。
#spark.yarn.jars=hdfs://master:8020/spark_jars/*
注意配置文件中註釋,這是重點。單獨列出這個配置項,是想說不要配置這個,不然會出現moonbox啓動成功後,等幾十秒就自動掛掉的情況。
slaves
master
slave1
slave2
遇到的問題
(1)啓動報錯,截圖如下:
解決辦法,拷貝這兩個jar包放到spark的jars目錄下。
(2)啓動成功,但是在yarn上建立application失敗,報錯如下: