zoukankan      html  css  js  c++  java
  • 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重启,再手动执行,竟然执行成功了。

  • 相关阅读:
    Mongodb $in $or 性能比较
    c# mongo 数组里对象更新
    C# mongodb $set或$addToSet批量更新很慢原因
    docker 使用
    Ubuntu 下更简单的防火墙 Uncomplicated Firewall
    Docker 介绍及安装
    linux 内核分析工具 Dtrace、SystemTap、火焰图、crash等
    golang 中处理大规模tcp socket网络连接的方法,相当于c语言的 poll 或 epoll
    golang 对struct进行Serialize的方法,即将存取二进制文件到struct的方法
    golang 中创建daemon的方法
  • 原文地址:https://www.cnblogs.com/ngy0217/p/10681977.html
Copyright © 2011-2022 走看看