azkaban调度执行各种任务
脚本可以说是万能的,他可以执行任何命令,只要你能写出来的脚本都会帮你执行
例如你是个hdfs程序,你就写hdfs dfs
例如你写个java程序(mr程序),你就写个java -jar
例如你是个spark程序,你就写个spark -submit
例如你是个hive程序,你就写个hive -e
示例调度执行hdfs任务
1.编写hdfs.sh脚本
编写hdfs.sh脚本,在hdfs根目录下创建一个aaa文件夹
hadoop/bin/hdfs dfs -mkdir -p /aaa/
将hdfs中所有的.txt文件拷贝到/aaa文件夹中
hadoop/bin/hdfs dfs -cp /*.txt /aaa/
2.编写一个job文件来调度执行这个脚本
type=command
command=sh hdfs.sh
3.将两个文件一起打成一个zip文件提交azkaban执行即可
另外把两个文件写成一个文件也是可以的
type=command
command=hadoop/bin/hdfs dfs -mkdir -p /aaa/
command=hadoop/bin/hdfs dfs -cp /*.txt /aaa/
将这一个文件打成zip包提交azkaban执行也是可以的
示例调度执行mapreduce程序
在这个路径hadoop-2.8.5/share/hadoop/mapreduce下有官方写好的jar包,有wordcount,圆周率,海量排序等程序,我们拿过来调度一下
将linux中的文件下载到windows中,快捷键Alt+p进入,文件模式
lcd d:/(下载到D盘根目录下),get /路径/文件 回车即可!
需要准备三个文件 运行wordcount的jar包,运行jar包的命令,运行jar包命令的job调度命令
注意输入路径必须有,输出路径必须没有,才能保证承诺程序正常运行
mr程序中.sh文件:的书写顺序
(HADOOP_HOME路径/bin/hadoop) 2.jar(命令运行jar包) 3.(方法名例如wordcount)4.(方法中的参数,例如input,output)
1.整理jar包
2.写mr.sh程序
HADOOP_HOME=/usr/apps/hadoop-2.8.5/
${HADOOP_HOME}/bin/hadoop jar mymr.jar wordcount /wordcount/input /wordcount/output
3.写job程序
type=command
command=sh mr.sh
4.打包提交azkaban调度运行即可
示例调度执行spark程序
首先要修改azkaban文件上传大小的限制其实也是mysql的最大上传容量
(当然即使你修改了报错的可能性依然很大!!!最稳妥的办法就是将大文件jar包放在装azkaban的机器中,在脚本中调用!!)
查看当前设置的大小 show VARIABLES like '%max_allowed_packet%';
修改当前机器mysql的上传文件的最大限制 set global max_allowed_packet = 209715200
需求:我们将真实数据的第二天的idmp跑出来
也是需要 三个东西,jar包,脚本,job文件(jar包如果特别大的话放到机器中,用脚本去调用它)
需要修改脚本中jar包的位置,如果上传azkaban可以直接写jar包的名字
在job文件中传参数, azkaban的页面传的参数,我们在job脚本中用一个变量去接收他
我们先执行将第二天的idmp的生成,需要第一天的idmp,和第二天的日志数据,具体操作请参考:<idmp计算任务shell脚本创建路径全过程>
其中脚本文件就是我们之前写好的文件
idmp.sh
#!/bin/bash
############################################
#
# author: hunter.d
# date : 2020-02-01
# desc : idmp计算任务执行脚本
#
############################################
# 判断脚本是否传入了指定的数据日期
if [ $# -gt 1 ]
then
DATA_DAY=$1
OLD_IDMP_DAY=$2
else
# 获取当前时间的前一天日期作为数据处理日期
DATA_DAY=`date -d'-1 day' +'%Y-%m-%d'`
# 获取当前时间的前2天日期作为输入idmp的目录日期
OLD_IDMP_DAY=`date -d'-2 day' +'%Y-%m-%d'`
fi
export SPARK_HOME=/usr/apps/spark-2.3.3-bin-hadoop2.7
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--num-executors 3 \
--executor-memory 1g \
--executor-cores 1 \
--class cn.doitedu.dw.idmp.LogDataIdmpV2 \
/root/dw-2.0.jar /doit12/logdata/applog/${DATA_DAY} /doit12/logdata/weblog/${DATA_DAY} /doit12/logdata/wxlog/${DATA_DAY} /doit12/dicts/idmp/${OLD_IDMP_DAY}/ /doit12/dicts/idmp/${DATA_DAY}/ yarn
if [ $? -ne 0 ]
then
echo '不好了.....出了点莫名其妙的问题.....'
else
echo 'idmping计算successfully completed!'
fi
idmp.job文件
# idmp.job
day1=${dt_day}
day2=${old_day}
type=command
command=sh idmp.sh ${day1} ${day2}
这次跟往次不一样,我们要传参数在执行之前左边有个Flow Parameters(工作流的参数)=>AddRow(添加job里面的参数k,v形式)
dt_day 2020-02-02
old_day 2020-02-01
在运行过程中实际上是在yum上执行任务,点击任务,再点击 Tracking URL(最终连接)可以查看文件的进度和日志
示例调度执行hive程序
1.创建sql.sh
#!/bin/bash
export HIVE_HOME=/usr/apps/hive-2.3.1
SQL="
CREATE TABLE doit12.azkaban_test(id int,name string);
INSERT INTO TABLE doit12.azkaban_test VALUES(1,'曹操');
INSERT INTO TABLE doit12.azkaban_test VALUES(2,'刘备');
INSERT INTO TABLE doit12.azkaban_test VALUES(3,'孙权');
INSERT INTO TABLE doit12.azkaban_test VALUES(4,'关羽');
CREATE TABLE doit12.azkaban_test2
AS
SELECT id,name FROM doit12.azkaban_test WHERE id>2;
"
${HIVE_HOME}/bin/hive -e "${SQL}"
2.创建hive.job
# sql.job
type=command
command=sh sql.sh
3.将两个文件上传azkaban执行即可