azkaban的部署过程中遇到的一些坑(部署篇)
2019独角兽企业重金招聘Python工程师标准>>>
1.azkaban源码下载
maven下载地址3.0.0版本:https://gitee.com/wenhaijin_830_8756/MyAzkaban
maven地址下载3.35.0版本:https://gitee.com/wenhaijin_830_8756/azkaban.git
官网下载地址:https://azkaban.github.io/downloads.html
2.azkaban的安装部署
下载完成MyAzkaban项目后,里面有一份部署文档“MyAzkaban-3.0.0使用文档.doc”,参照着该文档进行操作
安装完成后输入一下网址进行访问:https://ip:8443
3.部署过程中可能会遇到的一些坑
在进行项目部署的时候,遇到了一些坑,花了很长时间才解决,这边分享给大家,希望大家在部署的时候能够少走一些弯路
3.1官网项目非maven项目
官方提供的源码并不是maven项目,不支持maven编译及打包构建,如果想采用maven进行构建,则通过上面的第一个源码链接进行下载
3.2 安装完进行启动时候的坑
安装完成之后,一定要在bin文件的上一层目录进行启动
./bin/start-web.sh
而不能cd到bin目录里面进行启动,因为该启动脚本中引用到了当前位置目录信息
3.3 启动脚本可执行权限设置
启动脚本上传至服务器中默认是不具备可执行权限的,所以需要授予可执行权限
sudo chmod 755 xxx.sh
3.4 window和linux操作系统空格问题处理
对于shell脚本中的空格,window和linux操作系统是不兼容的,所以需要进行一个转化操作,具体转化过程可以参照以下文章:https://my.oschina.net/u/2988360/blog/868775
3.5 Multiple Executor Mode模式配置配置对executor主机内存限制
azkaban.use.multiple.executors=true
//execute主机过滤器配置
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
其中MinimumFreeMemory过滤器会检查executor主机空余内存是否会大于6G,如果不足6G,则web-server不会将任务交由该主机执行,具体源码如下:
private static final int MINIMUM_FREE_MEMORY = 6 * 1024;/**<pre>* function to register the static Minimum Reserved Memory filter.* NOTE : this is a static filter which means the filter will be filtering based on the system standard which is not* Coming for the passed flow.* This filter will filter out any executors that has the remaining memory below 6G*</pre>* */private static FactorFilter<Executor, ExecutableFlow> getMinimumReservedMemoryFilter(){return FactorFilter.create(MINIMUMFREEMEMORY_FILTER_NAME, new FactorFilter.Filter<Executor, ExecutableFlow>() {private static final int MINIMUM_FREE_MEMORY = 6 * 1024;public boolean filterTarget(Executor filteringTarget, ExecutableFlow referencingObject) {if (null == filteringTarget){logger.debug(String.format("%s : filtering out the target as it is null.", MINIMUMFREEMEMORY_FILTER_NAME));return false;}ExecutorInfo stats = filteringTarget.getExecutorInfo();if (null == stats) {logger.debug(String.format("%s : filtering out %s as it's stats is unavailable.",MINIMUMFREEMEMORY_FILTER_NAME,filteringTarget.toString()));return false;}return stats.getRemainingMemoryInMB() > MINIMUM_FREE_MEMORY ;}});}
CpuStatus过滤器会判断执行主机的cpu占用率是否达到95%,若达到95%,web-server也不会将任务交给该主机执行
/*** <pre>* function to register the static Minimum Reserved Memory filter.* NOTE : this is a static filter which means the filter will be filtering based on the system standard which* is not Coming for the passed flow.* This filter will filter out any executors that the current CPU usage exceed 95%* </pre>* */private static FactorFilter<Executor, ExecutableFlow> getCpuStatusFilter(){return FactorFilter.create(CPUSTATUS_FILTER_NAME, new FactorFilter.Filter<Executor, ExecutableFlow>() {private static final int MAX_CPU_CURRENT_USAGE = 95;public boolean filterTarget(Executor filteringTarget, ExecutableFlow referencingObject) {if (null == filteringTarget){logger.debug(String.format("%s : filtering out the target as it is null.", CPUSTATUS_FILTER_NAME));return false;}ExecutorInfo stats = filteringTarget.getExecutorInfo();if (null == stats) {logger.debug(String.format("%s : filtering out %s as it's stats is unavailable.",MINIMUMFREEMEMORY_FILTER_NAME,filteringTarget.toString()));return false;}return stats.getCpuUsage() < MAX_CPU_CURRENT_USAGE ;}});}
3.6 任务执行申请不到内存
如果任务执行失败,报错信息如下
14-09-2017 13:50:01 CST A INFO - Starting job A at 1505368201283
14-09-2017 13:50:01 CST A INFO - azkaban.webserver.url property was not set
14-09-2017 13:50:01 CST A INFO - job JVM args: -Dazkaban.flowid=C -Dazkaban.execid=184 -Dazkaban.jobid=A
14-09-2017 13:50:01 CST A INFO - Building command job executor.
14-09-2017 13:50:01 CST A ERROR - pluginLoadProps is null
14-09-2017 13:50:01 CST A ERROR - Job run failed!
java.lang.Exception: Cannot request memory (Xms 0 kb, Xmx 0 kb) from system for job Aat azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:86)at azkaban.execapp.JobRunner.runJob(JobRunner.java:590)at azkaban.execapp.JobRunner.run(JobRunner.java:443)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)
14-09-2017 13:50:01 CST A ERROR - Cannot request memory (Xms 0 kb, Xmx 0 kb) from system for job A cause: null
14-09-2017 13:50:01 CST A INFO - Finishing job A attempt: 0 at 1505368201336 with status FAILED
多半是因为所有执行主机内存不足引起,azkaban源码要求执行主机可用内存必须大于3G才能满足执行任务的条件
azkaban对应的源代码如下:
private static final long LOW_MEM_THRESHOLD = 3L*1024L*1024L; //3 GB/*** @param xms* @param xmx* @return System can satisfy the memory request or not* * Given Xms/Xmx values (in kb) used by java process, determine if system can* satisfy the memory request*/public synchronized static boolean canSystemGrantMemory(long xms, long xmx, long freeMemDecrAmt) {if (!memCheckEnabled) {return true;}//too small amount of memory left, rejectif (freeMemAmount < LOW_MEM_THRESHOLD) {logger.info(String.format("Free memory amount (%d kb) is less than low mem threshold (%d kb), memory request declined.",freeMemAmount, LOW_MEM_THRESHOLD));return false;}//let's get newest mem infoif (freeMemAmount >= LOW_MEM_THRESHOLD && freeMemAmount < 2 * LOW_MEM_THRESHOLD) {logger.info(String.format("Free memory amount (%d kb) is less than 2x low mem threshold (%d kb), re-read /proc/meminfo",freeMemAmount, LOW_MEM_THRESHOLD));readMemoryInfoFile();}//too small amount of memory left, rejectif (freeMemAmount < LOW_MEM_THRESHOLD) {logger.info(String.format("Free memory amount (%d kb) is less than low mem threshold (%d kb), memory request declined.",freeMemAmount, LOW_MEM_THRESHOLD));return false;}if (freeMemAmount - xmx < LOW_MEM_THRESHOLD) {logger.info(String.format("Free memory amount minus xmx (%d - %d kb) is less than low mem threshold (%d kb), memory request declined.",freeMemAmount, xmx, LOW_MEM_THRESHOLD));return false;}if (freeMemDecrAmt > 0) {freeMemAmount -= freeMemDecrAmt;logger.info(String.format("Memory (%d kb) granted. Current free memory amount is %d kb", freeMemDecrAmt, freeMemAmount));} else {freeMemAmount -= xms;logger.info(String.format("Memory (%d kb) granted. Current free memory amount is %d kb", xms, freeMemAmount));}return true;}
3.7 Multiple Executor Mode模式部署目前还不支持主机及端口对应关系配置
Multiple Executor Mode模式部署目前还不支持主机及端口对应关系配置,所以需要手动执行sql往数据库表中插入数据
insert into executors(host,port) values("EXECUTOR_PORT",EXECUTOR_PORT);
4.源码包在windos中直接编译(本地需要安装git客户端)
1.window命令行切换到目标目录
2.git clone https://github.com/azkaban/azkaban
3.下载完成后 执行gradlew build -x test命令构建(跳过测试)
4.构建成功后找到server以及executor的buit目录的distributions目录下
5.azkaban3.35版本信息中报错问题解决
5.1 Missing required property 'azkaban.native.lib'报错解决
报错信息如下:
16-09-2017 19:48:28 CST A INFO - Starting job A at 1505562508575
16-09-2017 19:48:28 CST A INFO - azkaban.webserver.url property was not set
16-09-2017 19:48:28 CST A INFO - job JVM args: -Dazkaban.flowid=C -Dazkaban.execid=1 -Dazkaban.jobid=A
16-09-2017 19:48:28 CST A INFO - Building command job executor.
16-09-2017 19:48:28 CST A INFO - Memory granted for job A
16-09-2017 19:48:28 CST A INFO - 2 commands to execute.
16-09-2017 19:48:28 CST A INFO - cwd=/app/azkaban/source_buit/azkaban-exec-server-3.35.0/executions/1
16-09-2017 19:48:28 CST A INFO - effective user is: azkaban
16-09-2017 19:48:28 CST A ERROR - Job run failed!
azkaban.utils.UndefinedPropertyException: Missing required property 'azkaban.native.lib'at azkaban.utils.Props.getString(Props.java:420)at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:234)at azkaban.execapp.JobRunner.runJob(JobRunner.java:748)at azkaban.execapp.JobRunner.doRun(JobRunner.java:591)at azkaban.execapp.JobRunner.run(JobRunner.java:552)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)
16-09-2017 19:48:28 CST A ERROR - Missing required property 'azkaban.native.lib' cause: null
16-09-2017 19:48:28 CST A INFO - Finishing job A at 1505562508845 with status FAILED
解决方案:
配置commonprivate.properties
5.2 界面样式问题处理
切换完最新源码(3.35.0)进行打包后,部署出来的界面存在样式问题
出现的原因,服务器中web-server目录下面的web文件夹我拷贝的是下面的目录
该目录下面并没有azkaban.css样式文件
所以出现了样式问题
解决办法:
使用编译后install目录下的web文件上传至服务器
配置完成后重新启动,界面展示正常:
说明:
Azkaban中的每个job都是一个进程,在Azkaban中判断job成功与否是根据这个进程是否成功执行完成,但是在MR 或者Spark Job执行的过程中,如果代码出错,运行在集群上的任务会停止,并不会有内容写入目标文件中,此时返回给Azkaban的进程是执行成功的,也就是job节点执行成功。这与任务执行的结果相悖。
例如:
在执行某个jar包的过程中时,出现了NullPointException,此时MR作业停止,但是最终Process 显示的为执行成功。并且节点最终执行的结果也为成功:
所以为了防止依赖的节点出现错误,其以下节点仍可运行的情况。需要换一个校验job是否正确执行的维度进行评判,比如检测MR 或者 Spark 任务的log文件是否正确执行等,或者检测集群中的任务是否执行成功。
总结:在执行结束后可以返回hdfs中查询是否有对应的文件生成,如果有则表示成功,没有则表示失败
转载于:https://my.oschina.net/u/2988360/blog/1537561
azkaban的部署过程中遇到的一些坑(部署篇)相关推荐
- 【阿里云 Linux 服务器】购买 Linux 到项目部署过程中遇到的问题,部署 SpringBoot 项目到服务器上,在手机上安装 Android 程序进行测试
文章目录 一.购买好服务器之后要重置密码 二.利用 putty 程序登录访问你的服务器 三.配置安全组开放端口 四.部署项目前期准备工作 4.1 安装 Java 4.2 安装 mysql 4.3 安装 ...
- SonarQube的安装部署过程中踩过的坑
在安装和是用sonarqube踩过如下坑,记录一下: 1.java版本不正确 java版本的问题,主要体现在两个方面, 第一个:是需要安装对应电脑版本的jdk, 具体报如下错误: Unable to ...
- [项目过程中所遇到的各种问题记录]部署篇——项目部署过程中那些纠结的问题-SQLServer...
前一篇文章说了些有关IIS的,这篇则是说SQLServer的,相比IIS来说,SQLServer的配置过程中问题就少了许多,而且都比较有针对性,下面开始记录: 注:由于实际项目的开发都是基于SQL20 ...
- 将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法
将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法 参考文章: (1)将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法 (2) ...
- 在使用ambari进行安装部署过程中遇到的glibc问题
在使用ambari进行安装部署过程中遇到的glibc问题 使用 yum check rpm -e rpm -q 处理问题 报错信息如下: stderr: Traceback (most recent ...
- cas 部署过程中遇到的一些问题(持续更新)
cas 部署过程中遇到的一些问题(持续更新) 1.CertificateException 有时候客户端和服务端都部署好了之后,回调回来会报异常 javax.net.ssl.SSLHandshakeE ...
- mysql mmm坑_MySql之MMM部署过程中各种问题解决方法
MySql之MMM部署过程中各种问题解决方法 发布时间:2020-05-06 11:47:56 来源:亿速云 阅读:155 作者:三月 下文主要给大家带来MySql之MMM部署过程中各种问题解决方法, ...
- 使用ATX-server部署过程中遇到的问题-遇到就更,作为记录
最近开始做自动化测试相关工作,部署atx-server 安卓集群管理,记录下部署过程中遇到的问题 一:atxserver不显示设备,使用命令:python main.py --server local ...
- Rancher 2.0部署过程中常见问题分析与解决
本文是Rancher 2.0部署与使用过程中常见的问题及其解决方法,多数问题整理收集自Rancher官方技术交流群内用户的提问与反馈.欢迎扫描文末二维码,添加Rancher小助手为好友,加群获得更多技 ...
最新文章
- 技术贴 | MetaboAnalyst 4.0,代谢组学研究利器的升级
- MongoDB的介绍和使用场景
- java自动获取ip_java自动获取电脑ip和MAC地址
- virtualbox linux通用网卡,详解VirtualBox + CentOS 虚拟机网卡配置
- Spring Cloud 架构 五大神兽的功能
- 优先升级鸿蒙系统的华为(含荣耀)手机,优先升级鸿蒙系统的华为(含荣耀)手机:是这48款!有你的吗?...
- c语言crc编码函数,C语言:CRC校验
- 使用Data studio开发opengauss数据库
- 【科普】有趣“小学”数学题,做出一道即可成名(持续补充)
- SSD1306(OLED驱动芯片介绍)
- 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.6
- 使用DevOps强化敏捷(上)
- 如何使用Nero软件来光盘刻录系统详细教程(图)
- 百度网盘里的html怎么用,百度网盘怎么用?
- 【Linux】scp命令基本使用
- 骨传导耳机工作原理,骨传导耳机优缺点
- 【矩阵乘法】行为方案
- 关于毕业设计的一些小总结
- Axure 9做原型只能显示为黑白灰色,设置彩色不生效
- php正则表达式 域名,PHP正则表达式从url中取得域名
热门文章
- 哑弹 图像处理检测_火箭军第三代哑弹处置系统排爆效率提升30%
- jquery设置表单元素只读_jquery设置元素readonly和disabled(checkbox只读)
- 怎么样采集声音的波形和频率_示波器采集模式
- mysql 时间小于_删库不必跑路,自己动手MySQL数据恢复,真香~~
- 计算机系统库的管理及应用,计算机软件及应用嵌入式软件基础数据库管理系统.pptx...
- mysql下载是port报错_mysql group replication添加复制节点报错
- 信号回勾产生的原因_为什么照片放大会有噪点?产生噪点的4个因素,来了解一下...
- java 反射静态内部类_android-反射的使用(反射静态内部类、非静态内部类、匿名内部类等)...
- vue element container 子路由
- pytorch 卷积