如何使用oozie将文件从本地移动到HDFS?

时间:2015-07-16 11:06:53

标签: hdfs oozie

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

将数据从本地文件系统移动或复制到HDFS

4 个答案:

答案 0 :(得分:6)

我找到了解决此问题的方法。 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}'作为参数。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:-2)

您可以通过将复制命令放在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 命令。