目录
前言
使用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失败,报错如下: