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

原创 2016年05月31日 19:32:22
 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"
版权声明:本文为博主原创文章,未经博主允许不得转载。

azkaban 的安装

1、安装模式 Azkaban有三种运行模式: 1) solo servermode:最简单的模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。 ...
  • u010469632
  • u010469632
  • 2017年02月06日 17:33
  • 3360

azkaban搭建

Azkaban azkaban:中文音译:阿兹卡班,是linkedin(音译:邻客音)公司(是全球最大的职业社交网站,先用户数量已达到2亿平均每秒有一个新会员的加入)推出的一款开源的调度工具,在lin...
  • u012492511
  • u012492511
  • 2014年02月11日 17:38
  • 3248

Azkaban 3.0 分布式安装部署文档

Azkaban 3.0 分布式安装部署文档 一.简介 Azkaban2.5支持两种运行模式: 1.solo server mode:web 和 executor在同一个进程中执行,适用于H2 D...
  • gaoqida
  • gaoqida
  • 2017年05月16日 15:33
  • 2221

工作流调度器Azkaban学习

1、Azkaban是什么      我们在工作中应该都遇到过这样的场景:有一个任务,这个任务可以划分成多个较小的任务完成,之所以进行划分是因为小任务之间可以并发的进行,例如是一个shell脚本执...
  • yu616568
  • yu616568
  • 2015年01月23日 17:57
  • 6641

hadoop学习之azkaban(5.1):azkaban的使用及示例

上一章我们已经安装好了azkaban的web-server和execute-server,下面我们来使用阿兹卡班进行任务调度。 一,最简单的例子:执行单个命令 1,首先按格式写好脚本(linux/wi...
  • qq_32166627
  • qq_32166627
  • 2016年12月12日 18:04
  • 2078

Azkaban-任务调度管理器

Azkaban据说是哈利波特系列故事中的一座监狱的名字,卧槽,搜索这个词多数也都是哈利波特相关的网页,真是恼火!能搜到的azkaban的项目主页在:http://azkaban.github.io/a...
  • tracymkgld
  • tracymkgld
  • 2013年12月31日 19:23
  • 2723

使用Azkaban调度Spark任务

Azkaban是一种类似于Oozie的工作流控制引擎,可以用来解决多个Hadoop(或Spark等)离线计算任务之间的依赖关系问题。 也可以用其代替cron来对周期性任务进行调度,并且更为直...
  • lsshlsw
  • lsshlsw
  • 2016年03月08日 22:26
  • 8119

Azkaban文档

这个文档假定你已经通过quit start部分了解Azkaban的基础的部分 Jobs和配置         Azkaban jobs是主要的代码加上配置的值。配置是按照的格式存储在属性文件当...
  • xiaolang85
  • xiaolang85
  • 2014年04月08日 11:16
  • 8726

Azkaban 的作业类型插件

首先说jobtype跟azkaban的webserver端无关,因为webserver节点只负责项目作业管理(上传和分发),并不关心你上传的是哪种类型的作业。负责具体执行的executor会解析job...
  • tracymkgld
  • tracymkgld
  • 2014年01月07日 19:21
  • 5573

使用Azkaban调度Spark任务

Azkaban是一种类似于Oozie的工作流控制引擎,可以用来解决多个Hadoop(或Spark等)离线计算任务之间的依赖关系问题。 也可以用其代替cron来对周期性任务进行调度,并且更为直...
  • lsshlsw
  • lsshlsw
  • 2016年03月08日 22:26
  • 8119
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hadoop入门之自动化定时调度之Azkaban部署及使用
举报原因:
原因补充:

(最多只允许输入30个字)