Azkaban报错以及解决
说明:使用Azkaban调度执行脚本时遇到的错误以及解决办法
问题一:
FAILED: ParseException line 16:36 cannot recognize input near 'else' 'type' 'end' in expression specification
该原因是由于执行的脚本中运行的是hive操作,在hive -e “ ”语句中使用了双引号引起,导致hive语句解析失败
解决办法:将hive语句中使用到的双引号改为单引号
问题二:
java.lang.RuntimeException: java.io.IOException: Cannot run program "/home/apps/hdfs/azkaban/sqoop.sh" (in directory "/home/apps/usr/webserver/azkaban-exec-server/executions/110/azkaban"): error=2, 没有那个文件或目录
Caused by: java.io.IOException: error=2, 没有那个文件或目录
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 10 more
该原因是由于编写的job使用的是绝对路径执行任务脚本,目前Azkaban会在2台机器中随机执行,但是任务脚本只放到了一台机器上,所以执行时找不到文件
解决办法:将任务脚本部署到两台服务器上,此方法有点笨重,应该有其它方法,但是目前还没有没找到更合 适的
问题三:
INFO - /home/apps/scripts/data/bin/task.sh:行3: /tool/set.sh: 没有那个文件或目录
java.lang.RuntimeException: azkaban.jobExecutor.utils.process.ProcessFailureException: Process exited with code 1
at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:305)
at azkaban.execapp.JobRunner.runJob(JobRunner.java:813)
at azkaban.execapp.JobRunner.doRun(JobRunner.java:602)
at azkaban.execapp.JobRunner.run(JobRunner.java:563)
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)
Caused by: azkaban.jobExecutor.utils.process.ProcessFailureException: Process exited with code 1
at azkaban.jobExecutor.utils.process.AzkabanProcess.run(AzkabanProcess.java:125)
at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:297)
... 8 more
该原因是由于工程中初始化环境时会自定义环境变量,但是使用Azkaban调度执行时不会加载环境变量导致目录失效,所以执行时找不到文件
解决办法:加载环境变量
问题四:
当使用source ~/.bash_profile加载环境环境量时出现以下错误
INFO - /home/apps/data/source_bash.sh:行1: /root/.bash_profile: 权限不够
java.lang.RuntimeException: azkaban.jobExecutor.utils.process.ProcessFailureException: Process exited with code 1
at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:305)
该原因是由于yarn的资源隔离,设定了角色目录,目前使用的是角色账号执行的脚本,所以执行/root/.bash_profile时报错
解决办法:source /该角色对应的目录下/.bash_profile
问题五:
INFO - /home/apps/data/source_bash.sh:行1: /tool/set.sh: 权限不够
java.lang.RuntimeException: azkaban.jobExecutor.utils.process.ProcessFailureException: Process exited with code 1
at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:305)
该原因是因为脚本没有赋予执行权限
解决办法:到对应的脚本目录下 chmod -R 755 *