1

我正在使用hdp:tool-tasklet在 hadoop 上执行数据转换作业。从文档中阅读,似乎可以在调用实际实现时指定一个可用的属性 - 至少对于工具运行器而言:

<hdp:tool-runner id="someTool" tool-class="org.foo.SomeTool" run-at-startup="true">
   <hdp:arg value="data/in.txt"/>
   <hdp:arg value="data/out.txt"/>

   **property=value**
</hdp:tool-runner>

该文档还提到:

(tool) tasklet 元素支持与 #hadoop:tool-runner[tool-runner] 相同的配置选项,除了 run-at-startup (不适用于工作流)

我的 tasklet 是这样定义的:

 <hdp:tool-tasklet id="transformTask"
    jar="classpath:hadoop-artifacts/transform-job.jar"
    scope="step">
    <hdp:arg value="#{jobParameters['inputFile']}" />
    <hdp:arg value="${spring.hadoop.fsUri}/${transform.output.path}" />
    ingest.schemaXml=#{jobExecutionContext['schemaXml']}
</hdp:tool-tasklet>

我稍后尝试在 bean 定义中使用它(在 transform-job.jar 中):

<bean id="schemaDecoder" class="com.foo.bar.transform.beans.SchemaDecoder">
    <constructor-arg value="${ingest.schemaXml}"></constructor-arg>
</bean>

我得到一个例外:

无法解析字符串值“${ingest.schemaXml}”中的占位符“ingest.schemaXml”

但是,如果我使用hdp:jar-tasklet来定义我的工作,则该属性会被传播。不过,我遇到了类加载器的其他问题......

所以我的问题是,tool-tasklet 是否支持用户定义的属性?如果没有,我有什么选择?属性的值是在运行时动态定义的,所以属性文件不起作用。

先感谢您,

米海

4

0 回答 0