azkaban调度执行各种任务

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执行即可

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值