当前位置: 首页 > 知识库问答 >
问题:

Azkaban:将参数传递给基础职务代码

吕岳
2023-03-14

是否可以将选项从azkaban工作流传递到基础职务代码?

我有这样的东西,它有点适用于硬编码/预先知道的日期,但我希望有一个选项来指定执行流时的日期:

from azkaban import Job, Project
import datetime
import os
from datetime import datetime, timezone, timedelta




options = {
            'start.date' : today.strftime('%Y-%m-%d'), # Can we pass this as an argument to the underlying code?
            'day.offset' : 1
            }

project = Project('my_project',root=__file__)
project.add_file('my_shell_script.sh', 'my_shell_script.sh')
project.add_job('my_job', Job(options, {'type' : 'command' : 'bash my_shell_script <pass date here?>'}))
project.add_job('my_job', Job(options, {'type' : 'command' : 'java -jar test.jar <pass date here?>'}))

谢了,沙拉特

共有1个答案

汤博
2023-03-14

在Azkaban流中不相邻的作业之间传递参数的一种方法是在需要参数之前对JOB_OUTPUT_PROP_FILE进行操作。有必要使用shell脚本执行此操作,因为JOB_OUTPUT_PROP_FILE变量不能直接用于给定的作业。这种方法将相关信息写入文件,并在需要之前使用helper脚本读取。参数可以通过在每个步骤写入JOB_OUTPUT_PROP_FILE传递给相邻的作业。

  1. 将包含要传递的信息的文件写入磁盘
  2. 创建一个helper/preparation shell脚本,该脚本在需要参数的作业之前运行
  3. 在作业中使用该参数

在流中第一个作业运行的日期需要由后一个作业使用的情况下,首先将相关数据写入文件。在本例中,YYYY-MM-DD格式的当前日期被写入一个名为rundate.text的本地文件。

#step_1.job
type=command
dependencies=initialize_jobs
command=whoami
command.1=/bin/sh -c "date '+%Y-%m-%d' > rundate.text"

然后,就在需要参数之前,运行一个prep脚本以使参数可用。

#step_4_preparation.job
type=command
dependencies=step_3
command=whoami
command.1=/bin/bash rd.sh

步骤4准备执行以下shell脚本(rd.sh)

#!/bin/sh
# this script takes the run_date value from the text file and passes it to Azkaban
# Now, the variable can be used in the next step of the job

RD=$(cat rundate.text)

echo "Now setting Job Output Property File with RD (run date) variable"
echo $RD


#This is the point where the parameter is written in JSON format
#to the JOB_OUTPUT_PROP_FILE, which allows it to be used in the next step
echo '{"RD" : "'"$RD"'"}' > "${JOB_OUTPUT_PROP_FILE}"

然后,在下面的步骤中,可以使用参数,在本例中为${RD}。

# step_4.job
type=command
dependencies=step_4_preparation
command=whoami
command.1=bash -c "echo ${RD} is the run date"
 类似资料:
  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 问题内容: 在我的RCP应用程序中,左侧有一个用于导航的视图,右侧有一个用于视图的文件夹。透视图看起来像这样: 我想根据用户在导航树中选择的内容打开不同的视图。认为这并不难。我的导航树视图: 这似乎很好。仅有一个小问题:我需要以某种方式将对象(例如,selectedItem)传递给我的视图,以使用户与其内容进行交互。我怎么做? 我看到了一些示例,其中一些同事编写了自己的视图,并将其放置在右侧。然后

  • 问题内容: 我正在尝试为我的程序制作验证类。我已经建立了与MySQL数据库的连接,并且已经在表中插入了行。该表由,和领域。现在,我想通过构造函数的参数在数据库中选择特定的行。 但这似乎没有用。 问题答案: 您应该使用方法设置。这既可以确保语句的格式正确,又可以防止: Java教程中有一个很好的教程,说明如何正确使用。

  • 问题内容: 我正在寻找一种将变量或字符串或任何东西传递给JButton的匿名actionlistener(或显式actionlistener)的方法。这是我所拥有的: 现在,我只是声明是一个全局变量,但是我讨厌这种工作方式。有更好的选择吗? 问题答案: 创建一个实现该接口的类。 提供具有参数的构造函数。 问题?

  • 我有一些JMH基准测试,我正在尝试分析。我想启用 GC 日志记录以查看生成了多少垃圾,但我不知道如何传递 JVM 参数。我知道JMH在分叉的JVM中运行基准测试,所以对我来说如何做到这一点并不是很明显。我正在使用断续器。