zeus部署
1.下载zeus
阿里在github上已经不维护zeus了,在网上找到一个别人贡献的
https://github.com/michael8335/zeus2
下载下来
通过shell
rz命令上传到服务器
解压:> unzip zeus2-master.zip
将解压的文件夹移动到自己设定的目录:
> mv zeus2-master /zeus
2.配置zeus
1)切换到zeus目录,创建日志目录
>cd /zeus
>mkdir logs
>mkdir hdfs-upload-dir
>mdir run_job_dir
2)修改配置文件antx.properties
目录:
/zeus/web/src/main/filter/antx.properties
#环境配置,用来标记环境,可以配合Environment使用 zeus.env=test-env zeus.loggingRoot=/zeus/logs zeus.loggingLevel=warn #任务执行文件夹,每次任务都会在此文件夹下新建一个临时文件夹 zeus.localdata.dir=/zeus/run_job_dir #此处必须是hdfs路径,所有的上传附件都会存放在下面路径上 zeus.hdfsLibPath=/zeus/hdfs-upload-dir #环境配置,如果是在一个集群中,需要配置城同一个名称 zeus.schedule.group=test-env #Scheduler 与 Worker 通信的端口 zeus.connect.port=9887 #hadoop jobtracker地址,填写ip+port 或者 domain+port zeus.jobtracker=192.168.1.166:50030 #zk配置非必选,可以为空,此处的zk是用来通知任务的成功失败事件的 zeus.zookeeper.host=
3)将配置文件antx.properties 拷贝到用户主目录
> cp antx.properties ~
4)配置highcharts的位置,修改/zeus/web/pom.xml文件
>cd /zeus/web/
>vi pom.xml
将local.highcharts修改如下:
<local.highcharts>/zeus/web/libs/highcharts-1.4.0.jar</local.highcharts>
5)配置zeus数据库连接信息:persistence.xml
>cd /zeus/web/src/main/resources
>vi persistence.xml
数据库ip地址、数据库名、用户名、密码改成自己的
6)创建dos2unix命令
> yum install dos2unix.x86_64 -y
7)下载maven。安装,配置环境变量
8)进入zeus目录
> cd /zeus
>mvn clean:clean 成功
>mvn package -Dmaven.test.skip=true 成功
把/zeus/web/target/zeus-web.war 拷贝到/apache-tomcat/webapps/下
>cd /apache-tomcat/bin
>startup.sh 启动tomcat
报错:
Hive Schema version 0.12.0 does not match metastore's schema version 2.3.0 Metastore is not upgraded or corrupt
zeus源码里引入的
hive-metastor,hive-exec,hive-common包都是0.12.0版本
想着自己安装的hive是2.3.4版本
找了maven仓库没有2.3.4版本,就把0.12.0改成2.3.0
再重新打包,启动
报错:
java.lang.NoClassDefFoundError: org/datanucleus/PersistenceNucleusContext,找不到这个类,就在maven仓库上找datanucleus的3.2.1版本,jar包下载下来,看了下,确实没有这个类,看5.0.3还是5.0.1版本有这个类,就在zeus上把版本改了,重新编译打包,tomcat部署启动,
又报错
org.datanucleus.util.Localiser.getInstance(Ljava/lang/String;Ljava/lang/Clas
意思是Localiser.getInstance没有这个带string的构造方法,去刚下载的5.0.1的包看了确实没有,又去maven 仓库看了3.x的版本有这个,但却没PersistenceNucleusContext类,真是矛盾,好像行不通啊
先放下linux这边
直接在window本地调试下,eclipse中导入zeus源码,直接在server中加入zeus-web,启动,不报错,但在浏览器访问,不行,访问不了
看了web.xml配置
<welcome-file-list> <welcome-file>platform.html</welcome-file> </welcome-file-list>
首页是 platform.html
但源码中没有找到
先在cmd中进入zeus源码目录,clean,package
将zeus2-master/web/target/zeus-web.war
放到tomcat8/webapps下
启动tomcat
访问成功
那为什么本地可能,一样的代码放到linux上编译打包部署各种错呢?
还是把这个代码关于logs ,run_job_dir,hdfs-upload-dir相关目录从windows修改成linux上路径
继续放到linux上去编译打包,都没问题
tomcat中运行,又报错
Hive Schema version 0.12.0 does not match metastore's schema version 2.3.0 Metastore is not upgraded or corrupt
还是一样的问题
这次在网上搜了下,说是把hive的mysql库version表中版本由2.3.0改成我引入包的版本0.12.0
SCHEMA_VERSION由原来的2.3.0改成0.12.0
重启tomcat,不报刚才的错了,又出现新的错:
Could not instantiate bean class [com.taobao.zeus.store.CliTableManager]: Constructor threw exception; nested exception is java.lang.NumberFormatException: For input string: "0s"
解决:找到/hive/conf/hdfs-site.xml文件,把里面配置的参数带s的,都把s去掉。
继续重启tomcat,不报错了,浏览器访问也OK了
搭建好了,怎么调度任务呢?
如下图,在调度中心中创建一些任务分组,分组创建好了,我新建了一个从mysql到hive抽取数据的任务,抽取data_user表,名字就叫data_user,
定时表达式:每天3点执行。
脚本:ssh -p 22 root@master sh /dump 1
解释:通过ssh远程连接执行sh命令
ssh -p 端口 用户@ip sh 你要执行的命令
我因为zeus和datax,hive,hadoop装在一台机器上,直接用机器名master,而且做了免密登录。
dump是一个shell脚本,去调用datax命令的,并且传递参数1表示任务号是1,任务放在/datax/job下 ,1.json任务
#!bash . /etc/profile export DATAX_HOME=/datax if [ $# == 2 ]; then today=$2 else today=`date -d -1days '+%Y-%m-%d'` fi if test $? -ne 0 then exit 11 fi cd $DATAX_HOME/bin python datax.py ../job/$1.json
点击手动执行任务,结果报错(日志在当初安装部署zeus时创建的日志目录里,我放在/zeus/logs下,zeus部署在/tomcat/webapps下)
打日志调试,发现写channel里写不了,报错,代码跟踪下来,发现从context里获取的channel为空,所以channel.write(sm)报错了。
但是context.setServerChannel(future.getChannel());这里明明是有值的,不为空。
断续查找,发现配置了端口9887
而且分布式锁通信,用到了这个端口
于是在服务器上,查看下这个端口
>lsof -i:9887 发现9887这个端口好多,会不会占用太多了卡住了,一口气全kill
把日志什么的删除掉,tomcat重启,再手动执行,竟然执行成功了。