任务是每天定时执行一个shell文件做增量,shell中是sqoop任务,其中的部份内容用参数配置,例如数据库信息之类的。如下
我的想法是把参数配在job.properties中,便于维护修改
Job.properties如下:
coordinator.xml如下
前提是,公司要求手写,不能用拖拽(麻人)
目前报错信息是:Missing argument for option:connect
我怀疑是参数配置的问题,没有读取到我job.properties中的IP等参数,希望可以帮我看一下,有哪些问题需要修改,感谢!
Oozie Shell Action(Oozie 使用shell) 配置及遇到的问题总结
可以参考下
参考这个正确引用
Oozie 工作流定义文件的示例,其中定义了一个参数 inputDir
<workflow-app xmlns="uri:oozie:workflow:0.5" name="my-workflow">
<start to="step-1"/>
<action name="step-1">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>inputDir</name>
<value>${inputDir}</value>
</property>
</configuration>
<main-class>com.example.Step1</main-class>
</java>
<ok to="step-2"/>
<error to="fail"/>
</action>
<action name="step-2">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>inputDir</name>
<value>${inputDir}</value>
</property>
</configuration>
<main-class>com.example.Step2</main-class>
</java>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Workflow failed</message>
</kill>
<end name="end"/>
</workflow-app>
<workflow-app xmlns="uri:oozie:workflow:0.5" name="MyWorkflow">
<start to="shell-node" />
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.4">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>test.sh</exec>
<file>test.sh</file>
<argument>${full}</argument>
<argument>${startTime}</argument>
<capture-output />
</shell>
<ok to="end" />
<error to="fail" />
</action>
<kill name="fail">
<message>Shell action failed</message>
</kill>
<end name="end" />
</workflow-app>
在配置参数时,指定-config参数设置正确的job.properties文件路径,例如,将-config job.properties修改为-config /path/to/job.properties,确保指定的路径是正确的
结合GPT给出回答如下请题主参考
在 Oozie 中,可以通过使用 job.properties 文件来指定任务所需的参数。您可以在 job.properties 文件中指定 sqoop 任务所需的参数,例如数据库信息、用户名、密码等。
在 job.properties 文件中,可以定义键值对,如下所示:
# 数据库信息
db.url=jdbc:mysql://localhost:3306/database_name
db.username=username
db.password=password
# Sqoop 参数
sqoop.args=--hive-import --create-hive-table --hive-table table_name \
--connect ${db.url} --username ${db.username} --password ${db.password} \
--table table_name --incremental lastmodified --check-column last_modified \
--last-value 0
在 shell 脚本中,可以通过使用 $符号来引用这些参数。例如,在执行 sqoop 任务时,可以使用以下命令:
sqoop ${sqoop.args}
这将读取 job.properties 文件中定义的 sqoop.args 参数并将其传递给 sqoop 命令。
您还可以使用其他的参数,在 job.properties 文件中配置并在 shell 脚本中引用它们。例如,您可以指定任务的名称、调度时间等。
在coordinator.xml中,需要指定job.properties文件的路径。这可以通过在标签中使用标签并设置name属性为oozie.coord.job.properties来实现。在workflow.xml中,需要正确地引用job.properties中的参数。可以使用${}语法来引用参数。
确保job.properties文件中的参数值是正确的。
确认Oozie工作目录结构以及文件命名规则是否符合要求
检查 job.properties 文件路径,确保 job.properties 文件路径是正确的,并且在 Oozie 的工作目录中可见,在 workflow.xml 文件中,确保正确地引用了 job.properties 文件中的参数
【以下回答由 GPT 生成】
首先,根据提供的配置文件,我注意到以下几个问题:
job.properties
文件中定义了 nameNode
参数,但是在 workflow.xml
文件中并没有使用该参数。job.properties
文件中没有定义 jobTracker
参数,而 workflow.xml
文件中使用了该参数。workflow.xml
文件中使用了 ${full}
和 ${startTime}
参数,但是这些参数在 coordinator.xml
和 job.properties
中都没有定义。为了解决上述问题,你可以按照以下步骤进行修改:
job.properties
文件中添加 jobTracker
参数,并根据实际情况进行配置。例如:jobTracker=mapred.job.tracker
在 workflow.xml
文件中使用 ${nameNode}
参数来替代 hdfs://localhost:8020
,例如将 <name-node>${nameNode}</name-node>
改为 <name-node>${nameNode}</name-node>
。
根据你的需求,在 job.properties
中添加自定义参数。例如,你可以添加 full
和 startTime
参数,并配置相应的值:
full=true
startTime=2023-08-24T00:00Z
coordinator.xml
中的参数 ${start}
和 ${end}
替换为实际的值,并确保该值与 job.properties
文件中的 startTime
和 endTime
参数匹配。修改后的 job.properties
文件内容:
# job.properties
nameNode=hdfs://localhost:8020
jobTracker=mapred.job.tracker
oozie.use.system.libpath=true
oozie.wf.rerun.failnodes=true
full=true
startTime=2023-08-24T00:00Z
修改后的 workflow.xml
文件内容:
<workflow-app xmlns="uri:oozie:workflow:0.5" name="MyWorkflow">
<start to="shell-node" />
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.4">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>test.sh</exec>
<file>test.sh</file>
<argument>${full}</argument>
<argument>${startTime}</argument>
<capture-output />
</shell>
<ok to="end" />
<error to="fail" />
</action>
<kill name="fail">
<message>Shell action failed</message>
</kill>
<end name="end" />
</workflow-app>
通过以上修改,你应该能够成功传递参数并解决 "Missing argument for option:connect" 的错误。如果还有其他问题,请随时向我提问。