目录
1.moonbox启动后,spark on yarn 任务运行失败
前言
moonbox目前最新版本是0.3.0,官方的文档上在环境准备这一块明确指出仅支持Apache Spark2.2.0
已安装Apache Spark 2.2.0
(此版本仅支持Apache Spark 2.2.0, 其他Spark 版本后续会兼容)
- 已安装MySQL并启动,且开启远程访问
- 各安装节点已经配置ssh免密登录
首先是版本要求必须是2.2.0,其次要求是Apache的。我们最初在搭建大数据平台的时候,使用的cloudera公司CM安装的CDH6.0.0配套的Spark是2.2.0。想着版本都一样,想必不会有什么问题,就按照官方的步骤一步一步安装。但是,还是遇到了不少问题。这些问题大多数都是jar包缺失或者冲突,说到底主要是CDH6.0.0配套的Spark2.2.0和Apache的Spark2.2.0还有区别。下面一一记录和说明。
说明:
moonbox官方的百度网盘链接上有spark2.2.0的压缩包,down下来,主要用到jars文件夹中的jar。我把相关需要替换的jar放到集群中每台主机的/opt/ojars目录,如下:
1.moonbox启动后,spark on yarn 任务运行失败
主要是jackson相关包的版本不同造成,切到spark安装目录下的jars目录下
cd /opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/spark/jars
修改对应软链接:
ln -snf /opt/ojars/jackson-annotations-2.6.5.jar jackson-annotations-2.9.5.jar
ln -snf /opt/ojars/jackson-core-2.6.5.jar jackson-core-2.9.5.jar
ln -snf /opt/ojars/jackson-databind-2.6.5.jar jackson-databind-2.9.5.jar
ln -snf /opt/ojars/spark-network-common_2.11-2.2.0.jar spark-network-common_2.11-2.2.0-cdh6.0.0.jar
ln -snf /opt/ojars/jackson-module-scala_2.11-2.6.5.jar jackson-module-scala_2.11-2.9.5.jar
2.netty包冲突
ln -snf /opt/ojars/netty-all-4.0.43.Final.jar netty-all-4.1.17.Final.jar
同时删除掉目录下所有的netty相关的软连接
3.spark相关包
主要影响moonbox-shell方式挂在数据库后的操作,如果不调整,在mount数据源之后,使用use database时候会shell会卡住不动,任务日志有报错。
ln -snf /opt/ojars/spark-sql_2.11-2.2.0.jar spark-sql_2.11-2.2.0-cdh6.0.0.jar
ln -snf /opt/ojars/spark-streaming_2.11-2.2.0.jar spark-streaming_2.11-2.2.0-cdh6.0.0.jar
ln -snf /opt/ojars/spark-catalyst_2.11-2.2.0.jar spark-catalyst_2.11-2.2.0-cdh6.0.0.jar
ln -snf /opt/ojars/spark-core_2.11-2.2.0.jar spark-core_2.11-2.2.0-cdh6.0.0.jar
ln -snf /opt/ojars/spark-hive_2.11-2.2.0.jar spark-hive_2.11-2.2.0-cdh6.0.0.jar
ln -snf /opt/ojars/spark-yarn_2.11-2.2.0.jar spark-yarn_2.11-2.2.0-cdh6.0.0.jar
4.关于rest方式提交时候影响的jar
ln -snf /opt/ojars/spark-network-shuffle_2.11-2.2.0.jar spark-network-shuffle_2.11-2.2.0-cdh6.0.0.jar
不调整的话,rest方式提交任务会失败。
按照如上调整,目前可以正常使用moonbox,例如moonbox-shell的操作、rest提交、jdbc连接访问等等。
5.其他
moonbox的rest方式不支持dll操作,即不支持通过rest方式创建组织、创建sa用户等操作,仅仅支持insert的批量操作,但是即便是insert操作也有局限性,只能使用insert into table select xx from table2 这样的语句,且table表后不能给字段名。
但是jdbc方式支持dll操作,对于想封装自己的可视化操作界面的同学,这无疑是好消息。
经过测试和调研,目前诸如mybatis/hb/DbRecord/JPA这一类的持久层框架不支持连接moonbox,而且注入druid/c3p0这些连接池工具也不支持moonbox。