作为oozie作业运行时,Sqoop导入操作给出错误。
我正在使用一个伪分布式的hadoop集群。 我已按照以下步骤操作。
1。启动oozie服务器
2.edited job.properties和workflow.xml文件
3。将workflow.xml复制到hdfs中
4.oozie工作
我的job.properties文件
nameNode = hdfs:// localhost:8020
jobTracker =本地主机:8021
queueName =默认
examplesRoot =示例
oozie.use.system.libpath = true
oozie.wf.application.path = $ {nameNode} / user / hduser / $ {examplesRoot} / apps / sqoop
workflow.xml文件
<action name="sqoop-node">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}/user/hduser/${examplesRoot}/output-data/sqoop"/>
<!--<mkdir path="${nameNode}/user/hduser/${examplesRoot}/output-data"/>-->
</prepare>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<command>import --connect "jdbc:mysql://localhost/db" --username user --password pass --table "table" --where "Conditions" --driver com.mysql.jdbc.Driver --target-dir ${nameNode}/user/hduser/${examplesRoot}/output-data/sqoop -m 1</command>
<!--<file>db.hsqldb.properties#db.hsqldb.properties</file>
<file>db.hsqldb.script#db.hsqldb.script</file>-->
</sqoop>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
我期望该作业将运行而不会出现任何错误。但是工作被杀死了,并且出现了以下错误。
UnsupportedOperationException:不允许访问本地文件系统。
我不明白我在哪里错了,为什么它不允许完成这项工作? 谁能帮助我解决问题。
答案 0 :(得分:1)
Oozie sharelib(具有Sqoop操作的依赖项)存储在HDFS上,服务器需要知道如何与Hadoop集群通信。不允许访问存储在本地文件系统上的sharelib,请参见CVE-2017-15712。
请检查conf/hadoop-conf/core-site.xml
,并确保它不使用本地文件系统。例如,如果您的HDFS名称节点侦听localhost上的端口9000,则相应地配置fs.defaultFS
。
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
...
</configuration>
或者,您可以删除RawLocalFileSystem类(虚拟实现)并重新启动服务器,但是不建议这样做(即服务器容易受到CVE-2017-15712的攻击)。
希望这会有所帮助。另请参见this answer。