关闭

自动化定时调度之Azkaban部署及使用

标签: azkaban定时调度
3529人阅读 评论(0) 收藏 举报
分类:
 azkaban的部署使用及如何结合项目的使用思考
1  部署azkaban
1.1 准备工作,下载相关安装包,这里我使用的是2.5版本的
还需要一个jdbc的连接jar包:
链接:http://pan.baidu.com/s/1dFe8avJ 密码:0pjh
我参考了这两篇文章进行部署:
1.2 设置数据库相关配置:
  • 安装Mysql 具体安装过程可参考相关资料,比如http://ifalone.me/305.html ,http://dev.mysql.com/doc/index.html
  • 为Azkaban创建数据库,其中数据库名字不一定是azkaban
    mysql> CREATE DATABASE azkaban;
  • 创建Azkaban数据库的用户,其中用户名字不一定是azkaban
    mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY '123456';
  • 增加azkaban用户对azkaban数据库的增删改查权限 
    mysql> GRANT ALL  ON  azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
  • 配置完重启MYSQL
  • 创建Azkaba需要的数据库表,将azkaban-sql-script-2.5.tar.gz解压,执行create-all-sql脚本即可
  • 获取JDBC连接器mysql-connector-java-5.1.25.tar.gz, mysql-connector-java-5.1.25.tar.gz需要在webserver和excutorserver安装完后,分别拷入 Azkaban-web/extlib和azkaban-excutorserver/extlib    
 上面我配置了一个数据库azkaban,配置了这个数据库的操作用户
  azkaban 密码 123456 下面继续安装
1.3 安装 web server

将azkaban-web-server-2.5.tar.gz解压到合适目录,如azkaban-web
解压完应该有如下文件目录
Folder    Description
bin       运行 Azkaban jetty server的脚本
conf      Azkaban web server的配置文件
lib       Azkaban依赖的jar包
extlib    放入到这个目录的jar包会被添加Azkaban的classpath
plugins   插件安装在此目录
web       Azkaban web server的相关css,html等文件
我的截图



进入到 azkban-web目录:

获取SSL需要的keystore。此处尤其注意要用java的keytool工具
执行:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA





得到keystore即可:
这里我的密码都是输入的password(系统默认密码就是这个,省的修改了)

修改conf下的 azkaban.properties 配置文件:

a. 修改时区和首页名称:

# Azkaban Personalization Settings
azkaban.name=Solr Task
azkaban.label=By Sage
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai

b. 修改 MySql 数据库配置

database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=123456
mysql.numconnections=100

c. 修改 Jetty 服务器属性,包括 keystore 的相关配置

# Azkaban Jetty server properties.
jetty.hostname=0.0.0.0
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8443
jetty.keystore=keystore
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password

d. 修改邮件设置(可选)

# mail settings
mail.sender=admin@javachen.com
mail.host=javachen.com
mail.user=admin
mail.password=admin





进入 azkaban web 服务器 conf 目录,修改 azkaban-users.xml ,增加管理员用户:

<azkaban-users>
        <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
        <user username="metrics" password="metrics" roles="metrics"/>
        <user username="admin" password="admin" roles="admin,metrics" />
        <role name="admin" permissions="ADMIN" />
        <role name="metrics" permissions="METRICS"/>
</azkaban-users>
 
到这里 azkaban-web的服务已经配置完毕了
1.4 安装  azkaban-executor-server

进入 azkaban-executor 的conf目录下,配置文件azkaban.properties,包括:

a. 修改时区为:default.timezone.id=Asia/Shanghai

b. 修改 MySql 数据库配置

database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

最后将数据库驱动放入两个服务的extlib下:
cp mysql-connector-java-5.1.25.jar azkaban-web/extlib/
cp mysql-connector-java-5.1.25.jar azkaban-executor/extlib/
配置完成:
1.5 启动服务,访问服务和终止服务
启动服务:
进入 azkaban-web目录
bin/azkaban-web-start.sh
进入 azkaban-executor目录
bin/azkaban-executor-start.sh
启动后 访问地址:
界面如下:


关闭服务:
进入 azkaban-web目录
bin/azkaban-web-shutdown.sh
进入 azkaban-executor目录
bin/azkaban-executor-shutdown.sh
1.6  执行简单的定时任务脚本
先创建一个工程:



上传 要执行的定时任务脚本(有格式要求):
链接:http://pan.baidu.com/s/1cqj1CU 密码:yqx5


1.7  azkaban结合项目中索引的全量导入功能

思考:azkaban目前是单节点(3.0还没发布,有集群) 可能处在故障问题
原有的项目自带的定时导入功能要保留,留作备用方案,当azkaban定时调度服务器宕机时
启用项目自身的定时导入索引任务,当机器恢复服务时,关闭系统自身的定时任务.

代码:
package cn.com.mx.gome.suggest.schedule.socket;

import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

import javax.mail.Address;

import org.apache.log4j.net.SocketAppender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.com.mx.gome.search.core.util.prop.PropUtils;
import cn.com.mx.gome.suggest.constant.Const;

/**
 * 判断azkaban服务是否存活着
 * @author songqinghu
 *
 */
public class TimerSocketUtils {

    private static Logger logger  = LoggerFactory.getLogger(TimerSocketUtils.class);

    private static String ADDRESS = null;//地址

    private static Integer PORT = null;//端口

    public static boolean reload = true;//是否重新加载  动态加载使用


    private static boolean isContinue = true;


    private static void init(){
        if(reload){

            ADDRESS = PropUtils.getInstance().getString(Const.SOLR_AZKABAN_ADDRESS,"false");
            PORT = PropUtils.getInstance().getInt(Const.SOLR_AZKABAN_PORT, 0);
            if("false".equals(ADDRESS) || 0 == PORT){
                ADDRESS =null;
                PORT =null;
                isContinue = false;
            }
            reload = false;
        }
    }

    //判断azkaban服务的存活状况
    public static boolean  isLive(){
        init();
        if(isContinue){
            Socket socket;
           try {
               socket = new Socket();
               InetSocketAddress socketAddress = new InetSocketAddress(ADDRESS, PORT);
               socket.connect(socketAddress, 1000);
               boolean result = socket.isConnected();
               logger.info("the socket connection result is :  {} ", result);
               socket.close();
               return result;
           } catch (Exception e) {
               logger.error(" the socket connection occur error is {} , use project own timer task ",e);
               socket =null;
           } 
        }
        return false;
    }


}

脚本:
type=command
command.1= echo "suggest full index import start"
command.2= echo "suggest full index import end"
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:183742次
    • 积分:3236
    • 等级:
    • 排名:第10496名
    • 原创:149篇
    • 转载:2篇
    • 译文:0篇
    • 评论:39条
    博客专栏
    最新评论