azkaban安装

    xiaoxiao2023-10-12  166

    首先将我们的安装包下载下来,总共是4个,一个是web,一个是executor,一个是solo,一个是sql

    然后解压到我们的linux机器上

    安装第一步:首先配置mysql

    1. 为Azkaban创建一个数据库:

    mysql> CREATE DATABASE azkaban;

    2. 为Azkaban创建一个数据库用户:

    mysql> CREATE USER '<username>'@'%' IDENTIFIED BY '<password>';

    出现上述原因:

    错误是由于你曾经升级过数据库,升级完后没有使用

    mysql_upgrade升级数据结构造成的。

    解决办法:

    使用mysql_upgrade命令 root@localhost ~]# mysql_upgrade -u root -p 13456

    3. 为用户赋予Azkaban数据库的增删查改的权限:

    mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON <database>.* to '<username>'@'%' WITH GRANT OPTION; mysql>grant all privileges on *.* to 'haha'@'%' identified by 'password' with grant option;

    4. 将azkaban sql表结构导入mysql

    该文件位于解压后的 azkaban-db 目录下。(一定是带all的sql文件)

    mysql> use azkaban; mysql> source /opt/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sq

    第二步:配置keystore

    在azkaban-web-server目录下执行这条命令,在执行完这条命令之后,会生成一个文件:keystore 并将该生成的文件复制到azkaban-web-server的bin目录下

    [root@hadoop1 azkaban-web-server-0.1.0-SNAPSHOT]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: firstName What is the name of your organizational unit? [Unknown]: companyName What is the name of your organization? [Unknown]: groupName What is the name of your City or Locality? [Unknown]: shanghai What is the name of your State or Province? [Unknown]: shanghai What is the two-letter country code for this unit? [Unknown]: CN Is CN=firstName, OU=companyName, O=groupName, L=shanghai, ST=shanghai, C=CN correct? [no]: Y Enter key password for <jetty> (RETURN if same as keystore password): Re-enter new password: [root@hadoop1 azkaban-web-server-0.1.0-SNAPSHOT]#

    keystore 并将该生成的文件复制到azkaban-web-server的bin目录下

    [root@hadoop1 azkaban-web-server-0.1.0-SNAPSHOT]# cp keystore bin/

    以上配置完成之后会在当前目录生成一个keystore文件。以下配置会用到。

    第三步:配置web的azkaban.properties

    # Azkaban Personalization Settings azkaban.name=THE_BIGDATA azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/opt/azkaban3.65/azkaban-web-server/web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/opt/azkaban3.65/azkaban-web-server/conf/azkaban-users.xml # Loader for projects executor.global.properties=/opt/azkaban3.65/azkaban-web-server/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. #jetty.use.ssl=false #jetty.maxThreads=25 #jetty.port=8081 jetty.maxThreads=25 jetty.ssl.port=8443 jetty.port=8081 jetty.keystore=keystore jetty.password=azkaban jetty.keypassword=azkaban jetty.truststore=keystore jetty.trustpassword=azkaban # Azkaban Executor settings # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=localhost mysql.database=azkaban mysql.user=azkaban mysql.password=azkaban mysql.numconnections=100

    # Azkaban Executor settings executor.port=12321

    #Multiple Executor azkaban.use.multiple.executors=true azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1 azkaban.executorselector.comparator.Memory=1 azkaban.executorselector.comparator.LastDispatched=1 azkaban.executorselector.comparator.CpuUsage=1注意: 配置的默认时区是:default.timezone.id=America/Los_Angeles 修改为:default.timezone.id=Asia/Shanghai

    相对路径改为绝对路径 user.manager.xml.file=conf/azkaban-users.xml executor.global.properties=conf/global.properties azkaban.jobtype.plugin.dir=/opt/azkaban/azkaban-web-server-0.1.0-SNAPSHOT/plugins/jobtypes

    修改start-web.sh 将我们的log输出文件改成logs/下

     

    第四步:用户设置

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

    第五步:Azkaban executor Server 端的配置

    修改azkaban.properties配置文件和web相同

    第六步:启动执行服务器(这里也会出现web启动出现的问题,相同处理):

    在这种模式下,先要启动exec-server,再启动web-server

    如果显示没有executor那么就需要手动将数据库中executors的active改为1

    这里注意在配置azkaban.properties得时候 需要加azkaban.jobtype.plugin.dir=plugins/jobtypes这一项一定要配置,并且创建文件夹,不然会报错,

    总结几个坑

    1.第一坑

    web.resource.dir项的值要使用绝对路径,否则web页面会没有美丽的界面。user.manager.xml.file项的值要使用绝对路径,否则启动的时候会报找不到文件的错误

    2.第二坑:邮箱预警的坑

    mail.sender、mail.host、mail.user、mail.password这四项每一项配置都不能少,端口可以不配置,而且mail.sender和mail.user的值是一样的,少一项或者配错一项都会报出错误,错误信息如下:

    2018/12/28 15:56:01.187 +0800 ERROR [EmailMessage] [Azkaban] Connecting to SMTP server failed, attempt: 0 javax.mail.AuthenticationFailedException: 500 Error: bad syntax at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:823) at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:756) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:673) at javax.mail.Service.connect(Service.java:295) at azkaban.utils.JavaxMailSender.connect(JavaxMailSender.java:34) at azkaban.utils.EmailMessage.connectToSMTPServer(EmailMessage.java:220) at azkaban.utils.EmailMessage.retryConnectToSMTPServer(EmailMessage.java:230) at azkaban.utils.EmailMessage.sendEmail(EmailMessage.java:213) at azkaban.utils.Emailer.sendEmail(Emailer.java:220) at azkaban.utils.Emailer.alertOnSuccess(Emailer.java:153) at azkaban.executor.selector.ExecutionControllerUtils.alertUser(ExecutionControllerUtils.java:123) at azkaban.executor.ExecutionFinalizer.finalizeFlow(ExecutionFinalizer.java:98) at azkaban.executor.RunningExecutionsUpdater.updateExecutions(RunningExecutionsUpdater.java:131) at azkaban.executor.RunningExecutionsUpdaterThread.run(RunningExecutionsUpdaterThread.java:54)

    在网上看到一个说这个错误信息解决方法的,要改源码,其实是配置信息写错了。

    3.第三坑

    azkaban.jobtype.plugin.dir=plugins/jobtypes这一项一定要配置,并且创建文件夹,不然会报错,错误信息如下:

    2018/12/28 15:50:30.898 +0800 ERROR [FlowTriggerScheduler] [Azkaban] unable to get scheduled flow triggers java.lang.NullPointerException at azkaban.flowtrigger.quartz.FlowTriggerScheduler.getScheduledFlowTriggerJobs(FlowTriggerScheduler.java:132) at azkaban.webapp.servlet.FlowTriggerServlet.handlePage(FlowTriggerServlet.java:140) at azkaban.webapp.servlet.FlowTriggerServlet.handleGet(FlowTriggerServlet.java:55) at azkaban.webapp.servlet.LoginAbstractAzkabanServlet.doGet(LoginAbstractAzkabanServlet.java:123) at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:713) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.j

    或者报native executor not 存在

    4.第四坑

    Multiple Executor的几项必须配置,不然的话会报出以下错误:

    2018/12/28 15:43:28.406 +0800 ERROR [StdOutErrRedirect] [Azkaban] Exception in thread "main" 2018/12/28 15:43:28.406 +0800 ERROR [StdOutErrRedirect] [Azkaban] java.lang.IllegalArgumentException: azkaban.use.multiple.executors must be true. Single executor mode is not supported any more. 2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban] at azkaban.executor.ExecutorManager.checkMultiExecutorMode(ExecutorManager.java:240) 2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban] at azkaban.executor.ExecutorManager.setupExecutors(ExecutorManager.java:229) 2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban] at azkaban.executor.ExecutorManager.initialize(ExecutorManager.java:155) 2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban] at azkaban.executor.ExecutorManager.start(ExecutorManager.java:168) 2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban] at azkaban.webapp.AzkabanWebServer.launch(AzkabanWebServer.java:235) 2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban] at azkaban.webapp.AzkabanWebServer.main(AzkabanWebServer.java:226)

     5.第五坑

    如果web启动报错,没有活跃得executor,那么需要去数据库中手动修改native状态为1

     

    第七步:配置报警

    1.需要在azkaban.properties中加入以下配置

    # mail settings mail.sender=xxxx@163.com mail.host=smtp.163.com mail.user=xxxx@163.com mail.password=XXXX

    这里需要注意的是可能新申请的邮箱不可以设置成为sender邮箱

    设置邮箱必须开启客户端授权密码,这里passwork就是授权密码

    在发送邮件的时候会出现

      •554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件;

    错误,这个时候我们只需要将我们的发送邮件人加上自己就可以了

     

    2.配置邮件接收者:

    在任务流Flow的最后一个.job中文件中添加如下内容#任务执行失败发送邮件,多个接收邮件人之间用“,”分隔 failure.emails=xxxx@126.com,xxxx@163.com #任务执行成功发送邮件 success.emails=xxxx@126.com #任务执行完成,无论成功还是失败发送邮件 notify.emails=xxxxx@126.com  

    azkaban加入重试

    在.job文件中,添加如下命令:

    retries=12 retry.backoff=300000 #代表重试间隔时间

     

    azkaban中加入依赖

    在job中加入dependencies=

     

    azkaban设置多少个任务执行

    在Azkaban executor的conf/azkaban.properties中配置:

    **executor.flow.threads 当前可以运行的flow的数量。默认为30  flow.num.job.threads 每个flow中并发运行的job数。默认为10**

     

    azkaban选择默认的执行executor的一个原则

    在选择调度一个WorkFlow到Azkaban集群中的某个Executor Server时,需要比较Executor Server的如下4个指标:

    能够运行WorkFlow的剩余容量,数值越大越优先剩余内存用量,数值越大越优先最近分配Flow的时间,数值越大越优先CPU使用用量,数值越小越优先
    最新回复(0)