azkaban编写翻译安装配备文档

azkaban编写翻译安装配置文书档案

参照官方文书档案: http://azkaban.github.io/azkaban/docs/latest/
azkaban的陈设文件注解:http://azkaban.github.io/azkaban/docs/latest/#configuration
本文挡首要参考azkaban的法定文书档案。

在azkaban3.0 今后的本子,提供了3中设置情势。单 solo-server mode, two
server mode和multiple-executor mode。那二种格局的不一样如下:

  • solo-server mode : 单机格局,
    轻量;使用内置的h2数据库, web server 和 executor
    server在同三个历程里,适合用来尝试和掌握azkaban的效益。
  • two server mode:双机形式
    更严刻,更重形式,适合生成环境;使用基本的mysql做存款和储蓄,web server 和
    executor server在不一致的进度中,跟新和升级换代时对用户的影响较小。
  • multiple-executor mode:多个执行器形式
    该情势是最凶残的生产条件。使用基本的mysql做存款和储蓄;理想状态下,Web服务器(web
    server)和执行器(executor
    server)服务器在不相同的主机上运维,以便升级和保证不应影响用户。
    这一个多主机设置为Azkaban带来了有力而可扩充的功用。

spark on yarn格局下陈设spark-sql访问hive元数据

目标:在spark on
yarn形式下,执行spark-sql访问hive的元数据。并对照一下spark-sql
和hive的效用。
软件条件:

  • hadoop2.7.3
  • apache-hive-2.1.1-bin
  • spark-2.1.0-bin-hadoop2.7
  • jd1.8

hadoop是伪分布式安装的,一个节点,2core,4G内部存款和储蓄器。
hive是长途格局。

  1. spark的下载地址:
    http://spark.apache.org/downloads.html
    解压安装spark
    tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz.tar
    cd spark-2.1.0-bin-hadoop2.7/conf
    cp spark-env.sh.template spark-env.sh
    cp slaves.template slaves
    cp log4j.properties.template log4j.properties
    cp spark-defaults.conf.template spark-defaults.conf

  2. 修改spark的布置文件
    cd $SPARK_HOME/conf
    vi spark-env.sh

    export JAVA_HOME=/usr/local/jdk
    export HADOOP_HOME=/home/fuxin.zhao/soft/hadoop-2.7.3
    export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
    export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
    

    vi spark-defaults.conf

    spark.master                     spark://ubuntuServer01:7077
    spark.eventLog.enabled           true
    spark.eventLog.dir               hdfs://ubuntuServer01:9000/tmp/spark
    spark.serializer                 org.apache.spark.serializer.KryoSerializer
    spark.driver.memory              512m
    spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
    #spark.yarn.jars                  hdfs://ubuntuServer01:9000/tmp/spark/lib_jars/*.jar
    

    vi slaves

    ubuntuServer01
    
  3. ** 配置spark-sql读取hive的元数据**

    ##将hive-site.xml 软连接到spark的conf配置目录中:
    cd $SPARK_HOME/conf
    ln -s /home/fuxin.zhao/soft/apache-hive-2.1.1-bin/conf/hive-site.xml hive-site.xml
    ##将连接 mysql-connector-java-5.1.35-bin.jar拷贝到spark的jars目录下
    cp $HIVE_HOME/lib/mysql-connector-java-5.1.35-bin.jar  $SPARK_HOME/jars
    
  4. 测试spark-sql:
    先采用hive创造多少个数据库和数据表,测试spark-sql是不是足以访问
    我向 temp.s4_order表导入了6万行,9M高低的数额。

    #先使用hive创建一下数据库和数据表,测试spark-sql是否可以访问
    hive -e "
    create database temp;
    create database test;
    use temp;
    CREATE EXTERNAL TABLE t_source(
      `sid` string, 
      `uid` string 
    );
    
    load data local inpath '/home/fuxin.zhao/t_data'  into table t_source;
    CREATE EXTERNAL TABLE s4_order(
      `orderid` int , 
      `retailercode` string , 
      `orderstatus` int, 
      `paystatus` int, 
      `payid` string, 
      `paytime` timestamp, 
      `payendtime` timestamp, 
      `salesamount` int, 
      `description` string, 
      `usertoken` string, 
      `username` string, 
      `mobile` string, 
      `createtime` timestamp, 
      `refundstatus` int, 
      `subordercount` int, 
      `subordersuccesscount` int, 
      `subordercreatesuccesscount` int, 
      `businesstype` int, 
      `deductedamount` int, 
      `refundorderstatus` int, 
      `platform` string, 
      `subplatform` string, 
      `refundnumber` string, 
      `refundpaytime` timestamp, 
      `refundordertime` timestamp, 
      `primarysubordercount` int, 
      `primarysubordersuccesscount` int, 
      `suborderprocesscount` int, 
      `isshoworder` int, 
      `updateshowordertime` timestamp, 
      `devicetoken` string, 
      `lastmodifytime` timestamp, 
      `refundreasontype` int )
    PARTITIONED BY ( 
      `dt` string);
     load data local inpath '/home/fuxin.zhao/20170214003514'  OVERWRITE into table s4_order partition(dt='2017-02-13');
    load data local inpath '/home/fuxin.zhao/20170215000514'  OVERWRITE into table s4_order partition(dt='2017-02-14');
    "
    

输入spark-sql命令,在终端中实践如下一些sql命令:
启动spark-sql客户端:
spark-sql –master yarn
在起步的命令行中执行如下sql:

    show database;
    use  temp;
    show tables;
    select *  from s4_order limit 100;
    select count(*) ,dt from s4_order group dt; 
    select count(*)  from s4_order ; 
        insert overwrite table t_source select orderid,createtime from s4_order;

图片 1

图片 2

select count() ,dt from s4_order group dt; // spark-sql耗费时间 11s;
hive执行耗费时间30秒
select count(
) from s4_order ; // spark-sql耗费时间2s;hive执行耗费时间25秒。

直观的感受是spark-sql 的成效大约是hive的
3到10倍,由于自个儿的测试是当地的虚拟机单机环境,hadoop也是伪分布式环境,能源较紧张,在生养环境中趁机集群规模,数据量,执行逻辑的转变,执行作用应该不是其一比重。

一 、 solo 方式的装置配备

能够依照如下步骤安装azkaban的solo形式.

  1. 下载克隆azkaban的git源码
    git clone https://github.com/azkaban/azkaban.git
  2. 编写翻译当前风靡版本的azkaban源码

    cd azkaban; 
    ./gradlew build installDist -x test  #跳过测试
    
  3. 启动solo模式的azkaban服务

    cd azkaban-solo-server/build/install/azkaban-solo-server; 
    nohup sh bin/azkaban-solo-start.sh > ./azkaban-solo-start.log 2>&1 &
    

    4.停止azkaban服务
    bin/azkaban-solo-shutdown.sh

vi conf/azkaban-users.xml
查看azkaban暗中认可的报到用户为: azkaban / azkaban

二 、 azkaban 的 multiple-executor 情势安装

  1. 编译azkaban源码
    作者们先从GitHub上克隆源码,营造master分支下的代码,即最近最新的版本。

    git clone https://github.com/azkaban/azkaban.git
    cd ./azkaban
    ./gradlew clean
    ./gradlew build installDist -x test  #跳过测试
    
  2. azkaban数据库起始化

  • 在mysql上创办 azkaban的数据库

     mysql> CREATE DATABASE azkaban;
     mysql> CREATE USER 'azkaban' IDENTIFIED BY 'azkaban!#@';
     mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban' WITH GRANT OPTION;
    
  • 创建azkaban的数据库的早先化表:

     ./azkaban-db/build/sql/create-all-sql-3.32.2.sql
    
  1. 安装 azkaba的Web Server
    编写翻译后web server安装包目录地点 :
    azkaban-web-server/build/distributions/azkaban-web-server-3.32.2.tar.gz,编写翻译后的安装包,解压后,唯有bin,lib,web八个公文夹。
    azkaban-web-server 应涵盖如下目录:
Folder Description
bin 启动Azkaban jetty server 的脚本
conf Azkaban的配置文件,
lib Azkaban依赖的jar文件
extlib 添加到extlib的其他jar将被添加到Azkaban的类路径中
plugins 安装插件的目录
web The web (css, javascript, image) files for Azkaban web server.

conf 目录下应该有如下文件:

  • azkaban.properties –
    azkaban运维时参数,是安装Azkaban所需的机要布置文件。
  • global.properties – 作为共享属性传递给各种工作流和作业的全局静态属性
  • azkaban-users.xml – 用于添加用户和角色实行身份验证。
    借使XmLUserManager未设置为使用该文件,则不应用该公文。

还索要创立conf,extlib,plugins文件;以及conf目录下的azkaban.properties,global.properties,azkaban-users.xml
贰个布局文件。

tar -zxvf azkaban-web-server-3.29.0.tar.gz
cd azkaban-web-server-3.32.2
mkdir conf
mkdir extlib
mkdir plugins
mkdir logs
touch conf/azkaban.properties
touch conf/global.properties
touch conf/azkaban-users.xml
touch conf/azkaban.private.properties
touch conf/log4j.properties
cp  mysql-connector-java-5.1.42-bin.jar ./extlib/
  • 获得 KeyStore for SSL:Azkaban 能够用 SSL 互联网连接

    ##使用如下命令创建一个SSL密钥
    keytool -keystore keystore -alias jetty -genkey -keyalg RSA
    

    图片 3

变迁的 keystore
SSL密钥文件放在azkaban-web-server-3.32.2目录下即可。一旦keystore
SSL密钥文件创设,必要在azkaban.properties中配置ssl相关的布局。

  • 上面一份azkaban-web-server的azkaban.propertiesp完整配置示范
    能够参照solo方式的布局文件azkaban-solo-server/build/distributions/azkaban-solo-server-3.32.2/conf/azkaban.properties作为模板

# Azkaban Personalization Settings
azkaban.name=mtime
azkaban.label=mtime bigdata scheduler system online
azkaban.color=#FF3601
#azkaban.color=#22DD6D
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai

# UserManager config
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml

# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
#jetty.use.ssl=false
jetty.use.ssl=true
jetty.ssl.port=8993
jetty.maxThreads=25
jetty.port=8081

# Azkaban Executor settings
executor.host=mtime-bigdata01
executor.port=12321

# mail settings
mail.sender=monitor@mtime.com
mail.host=mail.mtime.com
mail.user=monitor@mtime.com
mail.password=111112232
mail.tls=true
job.failure.email=fuxin.zhao@mtime.com
job.success.email=fuxin.zhao@mtime.com

lockdown.create.projects=false
cache.directory=cache

# JMX stats
jetty.connector.stats=true
executor.connector.stats=true

# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes

#  KeyStore for SSL
jetty.keystore=keystore
jetty.password=mtimebigdata
jetty.keypassword=mtimebigdata
jetty.truststore=keystore
jetty.trustpassword=mtimebigdata

# Setting up the DB
database.type=mysql
mysql.port=3306
mysql.host=192.168.51.121
mysql.database=dmp
mysql.user=dmpuser
mysql.password=dmpuser123456
mysql.numconnections=100

#Multiple Executor Mode
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

vi log4j.properties

#OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL
#log4j.rootLogger=info,console,dailyLog
log4j.rootLogger=info,console

#---------------------------------------------------------------
####\u8f93\u51fa\u65e5\u5fd7\u5230\u63a7\u5236\u53f0
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold.console=info
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

#--------------------------------------------------------------------------------

log4j.logger.test=debug
log4j.logger.org.apache.spark.scheduler=ERROR

vi azkaban-users.xml

<azkaban-users>
  <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
  <user password="metrics" roles="metrics" username="metrics"/>

  <user groups="bi" username="zhaofuxin"  password="123456" roles="read,write,execute,schedule,createprojects"/>
  <user groups="test" username="test"  password="123456" roles="read"/>
  <user groups="test" username="test1"  password="123456" roles="read,write,execute"/>
  <user groups="test" username="test2"  password="123456" roles="read,write,execute,schedule"/>

  <role name="metrics" permissions="METRICS"/>
  <role name="admin" permissions="ADMIN"/>
  <role name="read" permissions="READ"/>
  <role name="write" permissions="WRITE"/>
  <role name="execute" permissions="EXECUTE"/>
  <role name="schedule" permissions="SCHEDULE"/>
  <role name="createprojects" permissions="CREATEPROJECTS"/>
</azkaban-users>

4. 安装 azkaba的Executor Server

编写翻译后web
server安装包目录地方:azkaban-exec-server/build/distributions/azkaban-exec-server-3.32.2.tar.gz,
编写翻译后的安装包,解压后,唯有bin,lib多个文件夹。
azkaban-exec-server 应涵盖如下目录:

Folder Description
bin 启动Azkaban jetty server 的脚本
lib Azkaban依赖的jar文件
conf Azkaban的配置文件,
extlib 添加到extlib的其他jar将被添加到Azkaban的类路径中
plugins 安装插件的目录
logs 日志目录,系统自动创建
executions 执行日志目录,系统自动创建
projects 项目目录,系统自动创建

还亟需创立conf,extlib,plugins文件;以及conf目录下的azkaban.properties
配置文件。

  • 成立Executor Server下紧缺的目录和文书

cd ~/azkaban/azkaban-exec-server-3.29.0
mkdir conf
mkdir extlib
mkdir plugins
mkdir logs
mkdir plugins/jobtypes
touch conf/global.properties
touch conf/azkaban.properties
touch conf/log4j.properties
touch plugins/jobtypes/commonprivate.properties
cp  mysql-connector-java-5.1.42-bin.jar ./extlib/
  • 配置Executor Server的配备音讯
    vi conf/azkaban.properties

# Azkaban Personalization Settings
default.timezone.id=Asia/Shanghai

# Loader for projects
executor.global.properties=conf/global.properties

azkaban.project.dir=projects

# JMX stats
jetty.connector.stats=true
executor.connector.stats=true

# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes

# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30

#Azkaban Executor port
executor.port=12321

# Setting up the DB
database.type=mysql
mysql.port=3306
mysql.host=192.168.51.121
mysql.database=dmp
mysql.user=dmpuser
mysql.password=dmpuser123456
mysql.numconnections=100

vi plugins/jobtypes/commonprivate.properties

# set execute-as-user
execute.as.user=false
#execute.as.user=true
#azkaban.native.lib=/home/hadoop/soft/azkaban/azkaban-web-server-3.29.0/bin

vi log4j.properties

#OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL
#log4j.rootLogger=info,console,dailyLog
log4j.rootLogger=info,console

#---------------------------------------------------------------
####\u8f93\u51fa\u65e5\u5fd7\u5230\u63a7\u5236\u53f0
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold.console=info
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

#--------------------------------------------------------------------------------
log4j.logger.test=debug
log4j.logger.org.apache.spark.scheduler=ERROR
  • 只要要利用Multiple Executor 形式,必要在 webserver
    的conf/azkaban.properties中安插如下音信:

    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
    

    配备修改后须要在重启后才能奏效。

  • 在数据库中安顿Multiple Executor 情势

    insert into executors(host,port,active) values('192.168.17.50','12321','1');
    insert into executors(host,port,active) values('192.168.17.51','12321','1');
    insert into executors(host,port,active) values('192.168.17.52','12321','1');
    

5. 启动azkaban
先执行executor,再实践web,幸免Web Server会因为找不到执行器运营失利。

  • 启动executor
    个别到多少个excuter节点的劳动上运转executor服务

cd azkaban-exec-server
sh bin/start-exec.sh
查看logs下的日志文件是否有错误
  • 启动Web Server

bin/start-web.sh

没有启动了ssl,访问如下地址:
http://192.168.17.50:8081

启动了ssl,访问如下地址:访问协议使用https,端口使用conf/azkaban.properties配置的jetty.ssl.port端口
https://192.168.17.50:8993

三、附录-异常

  • 关于azkaban.native.lib的异常:

    15-06-2017 19:05:03 CST hello1 ERROR - Job run failed!
    azkaban.utils.UndefinedPropertyException: Missing required property 'azkaban.native.lib'
    at azkaban.utils.Props.getString(Props.java:426)
    at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:209)
    at azkaban.execapp.JobRunner.runJob(JobRunner.java:755)
    at azkaban.execapp.JobRunner.doRun(JobRunner.java:597)
    at azkaban.execapp.JobRunner.run(JobRunner.java:558)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    15-06-2017 19:05:03 CST hello1 ERROR - Missing required property 'azkaban.native.lib' cause: null
    15-06-2017 19:05:03 CST hello1 INFO - Finishing job hello1 attempt: 0 at 1497524703532 with status FAILED
    

scp ./azkaban-common/src/main/c/execute-as-user.c  to  ${azkaban.native.lib}
gcc execute-as-user.c -o execute-as-user
chown root execute-as-user
chmod 6050 execute-as-user

vi azkaban-exec-server-3.29.0/plugins/jobtypes/commonprivate.properties

execute.as.user=true
azkaban.native.lib=/home/zhaofuxin/soft/azkaban/azkaban-web-server-3.29.0/bin
  • 邮件配置错误
    azkaban
    职分履行时邮件发送不成事。首假设安插原因,邮件发送战败的特别音信会在web
    server 的log 文件
    webServerLog_20170621-130947.out的日志中打字与印刷,在此之前一直在excuter
    的log和在job的运维日志中查难点,所以看不到相当。
    原因是邮件的tls没有打开,在 web server的
    conf/azkaban.properties加入如下配置:

    mail.tls=true
    
  • global.properties
    没有开创,不过azkaban.properties中布局了,会发生更加:

2017-09-25 16:13:00 [azkaban.utils.StdOutErrRedirect]-[ERROR] Exception in thread "main" 
2017-09-25 16:13:00 [azkaban.utils.StdOutErrRedirect]-[ERROR] com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.io.FileNotFoundException: conf/global.properties (No such file or directory)
  at azkaban.execapp.FlowRunnerManager.<init>(FlowRunnerManager.java:155)
  at azkaban.execapp.AzkabanExecServerModule.configure(AzkabanExecServerModule.java:38)
  while locating azkaban.execapp.FlowRunnerManager
    for the 3rd parameter of azkaban.execapp.AzkabanExecutorServer.<init>(AzkabanExecutorServer.java:103)
  at azkaban.execapp.AzkabanExecServerModule.configure(AzkabanExecServerModule.java:36)
  while locating azkaban.execapp.AzkabanExecutorServer
  • bin/star-exec.sh 出现如下至极:

hadoop/apache-hadoop/hadoop/*
Starting AzkabanExecutorServer on port 12321
12321 ...
Error: Could not find or load main class 12321

缘由是 conf/azkaban.properties 中 “executor.port=12321”
配置2回,去掉三个即可。

  • log4j.properties 没有安排出现如下卓殊:添加log4j配置后恢复生机平常

Starting AzkabanExecutorServer on port 12321 ...
Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"

发表评论

电子邮件地址不会被公开。 必填项已用*标注