hdp:tool-tasklet不传播属性

时间:2015-08-13 16:33:30

标签: hadoop spring-xd spring-io

我正在使用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

0 个答案:

没有答案