azkaban调度器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tom_fans/article/details/88999149

1. azkaban源码编译

这个部分比较简单,根据官方文档的命令编译即可,大概需要20分钟编译时间。

# Build Azkaban
./gradlew build

# Clean the build
./gradlew clean

# Build and install distributions
./gradlew installDist

# Run tests
./gradlew test

# Build without running tests
./gradlew build -x test

编译完成之后会有如下目录:

az-core                            az-hadoop-jobtype-plugin  azkaban-exec-server             build.gradle       gradlew.bat       temp
az-crypto                          az-hdfs-viewer            azkaban-hadoop-security-plugin  CONTRIBUTING.md    LICENSE           test
az-examples                        az-intellij-style.xml     azkaban-solo-server             docs               NOTICE            tools
az-exec-util                       az-jobsummary             azkaban-spi                     gradle             README.md
az-flow-trigger-dependency-plugin  azkaban-common            azkaban-web-server              gradle.properties  requirements.txt
az-flow-trigger-dependency-type    azkaban-db                az-reportal                     gradlew            settings.gradle

2. azkaban安装模式

azkaban分2种运行模式,solo-server以及Multi Executor Server。  不论哪种模式,实际上都有2个组件构成 web及executor,只不过solo-server 同时包含这2个东西,而multi Executor server可以把web及executor 分开安装。

solo-server的包为:azkaban-solo-server,   multi executor server为 azkaban-web-server和azkaban-exec-server.

至于具体的安装不做介绍,这个官方文档有详细的介绍。只不过有一点,对于multi executor server来说,启动了executor之后需要再激活,而solo-server不需要。

curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo

azkaban数据库的executions表可以看到,默认状态是0,表示未激活,1表示激活。

3. multi executor server介绍

这种模式可以有多个executor, 前端web会根据参数对后端的executor进行探测,从web的日志也可以看到相应信息。

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
azkaban.activeexecutor.refresh.milisecinterval=10000
azkaban.queueprocessing.enabled=true
azkaban.activeexecutor.refresh.flowinterval=10
azkaban.executorinfo.refresh.maxThreads=10

探测的意义是为了知道有哪些executor还活着,这样在分配任务的时候可以根据实际的executor进行分配。 

根据我实际测试,最新的3.7有很多BUG,稍后进行说明。

4.  任务调度用户

1)调度用户  默认创建的用户为azkaban,但是实际上你跑JOB的时候并不想使用这个用户,也许你连接HIVE,那么希望使用HIVE用户,那么需要根据文档设置execute-as-user.

参数为plugin目录下的common文件:

execute.as.user=true
azkaban.native.lib=/opt/azkaban/plugins/jobtypes

另外必须根据官方文档编译出execute-as-user文件:

scp ./azkaban-common/src/main/c/execute-as-user.c onto the Azkaban box
run: gcc execute-as-user.c -o execute-as-user
run: chown root execute-as-user (you might need root privilege)
run: chmod 6050 execute-as-user (you might need root privilege)

在编辑JOB的时候添加user.to.proxy

---
config:
  failure.emails: [email protected]
  user.to.proxy: hive

nodes:
  - name: jobA
    type: command
    config:
      command: touch /tmp/1.log

这3个步骤完成后,你提交的任务就是user.to.proxy的用户。

2)任务调度用户权限

这个是通过azkaban-users.xml 文件控制。

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

  <user username="xxx" password="wangjialong" groups="readonly" />
  <user username="xxxx" password="wangjialong" role="admin" />
  <group name="readonly" role="readonly"/>
  
  
  <role name="readonly" permissions="READ"/>
  <role name="admin" permissions="ADMIN"/>
  <role name="metrics" permissions="METRICS"/>
</azkaban-users>

整体分为用户,组,角色,  角色就是权限,可以给组,也可以给用户。  设置完这个文件之后,还需要项目管理通过WEB添加用户方可以使用。 我发现一个问题,权限设置出了XML设置好之后,在WEB里也可以修改,这个感觉很奇怪,既然如此要这个XML干鸟?

3)调度方式

我看大部分人使用azkaban调度都是通过shell来调,比如我想跑一个HIVE的脚本,也是使用hive -e 或者hive -f , 这种方式也没问题,主要是JOB还要打个包,真是有病。

另外,既然你要跑HIVE, 跑SPARK,很显然这些组件必须也安装一个客户端在azkaban里,否者你执行的时候命令也没有。

4. azkaban的几个问题

1)根据实际测试,多executor模式下,如果你关闭了某台executor, 前端WEB根本探测不到,我认为这是一个极大的BUG,除非你重启WEB。

2)如果你机器资源不足,你提交JOB的时候会发现JOB一直preparing, 根本不执行。按照网上的说法,好像是剩余内存必须大于6G还是8G

 Successfully refreshed executor: 10.40.2.175:33785 (id: 7), active=true with executor info : ExecutorInfo{remainingMemoryPercent=36.99734851425452, remainingMemoryInMB=5901, remainingFlowCapacity=30, numberOfAssignedFlows=0, lastDispatchedTime=0, cpuUsage=0.0}

这完全不可思议,为什么是8G或者6G? 4G就不能执行吗? 真是莫名其妙

3)用户权限开始提过,XML设置好权限之后,通过WEB竟然还可以修改,那请问要XML干鸟?

4) 大部分人使用command来作为调度,太不合理,HIVE, SPARK等等很多都有thrift server,凭什么要用command ? 

5) azkaban的文档机器糟糕,一坨屎一样。

有人拿azkaban和oozie比,我认为,差距太大,不要侮辱了oozie.

猜你喜欢

转载自blog.csdn.net/tom_fans/article/details/88999149