【问题标题】:How to move file from local to HDFS using oozie?如何使用 oozie 将文件从本地移动到 HDFS?
【发布时间】:2015-07-16 11:06:52
【问题描述】:

我正在尝试将数据从本地文件系统移动到 Hadoop 分布式文件系统,但我无法通过 oozie 移动它 我们可以使用 oozie 将数据从本地文件系统移动或复制到 HDFS 吗???

【问题讨论】:

    标签: hdfs oozie


    【解决方案1】:

    我找到了解决此问题的方法。 ssh 操作将始终从 Oozie 服务器执行。因此,如果您的文件位于 Oozie 服务器的本地文件系统上,您将能够将它们复制到 HDFS。 ssh 操作将始终由“oozie”用户执行。因此,您的 ssh 操作应如下所示:myUser@oozie-server-ip,其中 myUser 是对来自 Oozie 服务器的文件具有读取权限的用户。 接下来,您需要在 Oozie 服务器上的 oozie 用户和 myUser 之间设置无密码 ssh。为“oozie”用户生成一个公钥,并将生成的密钥复制到“myUser”的authorized_keys文件中。这是生成 rsa 密钥的命令:

    ssh-keygen -t rsa

    生成密钥时,需要使用oozie用户登录。通常在 Hadoop 集群上,该用户的主页位于 /var/lib/oozie,公钥将在 /var/lib/oozie/.ssh 的 id_rsa.pub 中生成 接下来将此密钥复制到“myUser”的authorized_keys 文件中。您可以在用户家中的 .ssh 文件夹中找到它。 现在您已经设置了无密码 ssh,是时候设置 ssh oozie 操作了。此操作将执行命令“hadoop”,并将具有参数“-copyFromLocal”、“${local_file_path}”和“${hdfs_file_path}”。

    【讨论】:

      【解决方案2】:

      不,Oozie 不知道本地文件系统,因为它在 Map-Reduce 集群节点中运行。您应该使用Apache Flume 将数据从本地文件系统移动到 HDFS。

      【讨论】:

      • 我正在使用 shell 操作。我的 shell 命令看起来像这样 hadoop fs -copyFromLocal /home/kingsly/oozie_data/GoldRatesDemo1.csv /user/kingsly/oozie_test
      • 您必须知道,启动 Oozie 实例的主机可能与运行脚本的主机不同(Map-Reduce 节点之一)。如果您在一台本地主机上拥有所有服务,它们是相同的,但对于多主机环境则不然。
      • 所以如果我在运行 oozie 服务器的节点上运行脚本,我可以将数据从本地 fs 移动到 HDFS 吗??
      • 是的,但只有在你有一个单节点的 map-reduce 集群时才有效
      【解决方案3】:

      Oozie 不支持从 Local 到 HDFS 的 Copy 操作,反之亦然,但你可以调用 java 程序来做同样的事情,Shell 操作也可以,但如果集群中有多个节点,那么所有节点应该具有可用的所述本地挂载点或以读/写访问权限挂载。

      【讨论】:

        【解决方案4】:

        您可以通过将复制命令放入 shell 脚本中来使用 Oozie shell 操作来执行此操作。

        https://oozie.apache.org/docs/3.3.0/DG_ShellActionExtension.html#Shell_Action

        例子:

        <workflow-app name="reputation" xmlns="uri:oozie:workflow:0.4">
        <start to="shell"/>
        <action name="shell">
            <shell xmlns="uri:oozie:shell-action:0.1">
                <job-tracker>${jobTracker}</job-tracker>
                <name-node>${nameNode}</name-node>
                <exec>run.sh</exec>
                <file>run.sh#run.sh</file>
                  <capture-output/>
            </shell>
            <ok to="end"/>
            <error to="kill"/>
        </action>
        <kill name="kill">
            <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
        </kill>
        <end name="end"/>
        

        在您的 run.sh 中,您可以使用:hadoop fs -copyFromLocal 命令。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-09
          • 1970-01-01
          • 2016-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多