我正在使用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>
文档还提到:
(工具)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
来定义我的作业,则会传播该属性。我遇到了类加载器的其他问题......
所以我的问题是,工具 - tasklet是否支持用户定义的属性?如果没有,我的选择是什么? 属性的值是在运行时动态定义的,因此属性文件不起作用..
提前谢谢你,
mihai