【问题标题】:oozie error: Accessing local file system is not allowedoozie 错误:不允许访问本地文件系统
【发布时间】:2019-05-29 10:35:47
【问题描述】:

Sqoop 导入操作在作为 oozie 作业运行时出错。

我正在使用伪分布式 hadoop 集群。 我已按照以下步骤操作。

1.启动oozie服务器

2.编辑job.properties和workflow.xml文件

3.将workflow.xml复制到hdfs中

4.运行 oozie 作业

我的 job.properties 文件

nameNode=hdfs://localhost:8020

jobTracker=localhost:8021

queueName=default

examplesRoot=examples

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: 不允许访问本地文件系统。

我不明白我错在哪里以及为什么不允许完成工作? 谁能帮我解决这个问题。

【问题讨论】:

    标签: hdfs sqoop oozie


    【解决方案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

    【讨论】:

    • 我的 core-site.xml 的值为 hdfs://localhost:8020 并且运行良好。在 hdfs 中创建的这个 sharelib 文件在哪里?我需要将其移动到本地吗?
    • 自 4.3/5.0+ 起不允许在本地 fs 上存储 sharelib。 Oozie 的配置目录中的 core-site.xml 有那个,对吧?安装 sharelib 时,它通常存储在 HDFS 上的 oozie 用户目录中。您可以通过运行hadoop fs -ls /user/oozie/share/lib 来验证它。要列出 sqoop 共享库,请运行 oozie admin -oozie http://localhost:11000/oozie -sharelib pig*(假设 Oozie 在 localhost:11000 上侦听)。要了解 Oozie sharlib 的工作原理,我推荐以下博客:blog.cloudera.com/blog/2014/05/…
    • 谢谢。我的工作正在运行。 Oozie 没有识别 hadoop。
    • 很高兴听到这个消息。因此,您必须修复 Oozie 目录中的 conf/hadoop-conf/core-site.xml 中的配置?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2016-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多