我正在使用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 是否支持用户定义的属性?如果没有,我有什么选择?属性的值是在运行时动态定义的,所以属性文件不起作用。
先感谢您,
米海