【发布时间】:2016-07-12 19:26:32
【问题描述】:
我是 hadoop 新手,现在我正在测试简单的工作流程,只需要一个 sqoop 操作。如果我使用普通值而不是全局属性,它就可以工作。
然而,我的目标是在全局部分的job-xml 标记中引用的文件中定义一些全局属性。
经过长时间的斗争并阅读了许多文章,我仍然无法使其工作。 我怀疑一些简单的事情是错误的,因为我发现有文章表明此功能可以正常工作。
希望你能给我一个提示。
简而言之:
- 我有属性,
dbserver、dbuser和dbpassword在/user/dm/conf/environment.xml中定义 - 我的
/user/dm/jobs/sqoop-test/workflow.xml中引用了这些属性 - 在运行时,我收到
EL_ERROR说无法解析dbserver变量
以下是详细信息:
我正在使用安装在单个节点上的 Cloudera 5.7.1 发行版。
environment.xml 文件已上传到 hdfs 到 /user/dm/conf 文件夹。
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>dbserver</name>
<value>someserver</value>
</property>
<property>
<name>dbuser</name>
<value>someuser</value>
</property>
<property>
<name>dbpassword</name>
<value>somepassword</value>
</property>
</configuration>
workflow.xml 文件已上传到/user/dm/jobs/sqoop-test-job。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.4" name="sqoop-test">
<global>
<job-xml>/user/dm/conf/env.xml</job-xml>
</global>
<start to="get-data"/>
<action name="get-data">
<sqoop xmlns="uri:oozie:sqoop-action:0.3">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${outputRootPath}"/>
</prepare>
<arg>import</arg>
<arg>--connect</arg>
<arg>jdbc:sqlserver://${dbserver};user=${dbuser};password=${dbpassword}</arg>
<arg>--query</arg>
<arg>select col1 from table where $CONDITIONS</arg>
<arg>--split-by</arg>
<arg>main_id</arg>
<arg>--target-dir</arg>
<arg>${outputRootPath}/table</arg>
<arg>-m</arg>
<arg>1</arg>
</sqoop>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Sqoop-test failed, error message[${wf:errorMessage()}]</message>
</kill>
<end name='end'/>
</workflow-app>
现在,我从命令行执行 oozie 工作流:
sudo -u dm oozie job --oozie http://host:11000/oozie -config job-config.xml -run
我的job-config.xml在哪里如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configuration>
<property>
<name>nameNode</name>
<value>namenode:8020</value>
</property>
<property>
<name>jobTracker</name>
<value>jobtracker:8021</value>
</property>
<property>
<name>oozie.wf.application.path</name>
<value>/user/dm/jobs/sqoop-test-job/workflow.xml</value>
</property>
<property>
<name>outputRootPath</name>
<value>/user/dm/data/sqoop-test</value>
</property>
</configuration>
【问题讨论】: