将文件从远程位置(某些远程计算机中的本地文件系统)拉入Hadoop HDFS

时间:2015-02-02 09:40:22

标签: hadoop hdfs

我在机器中有文件(比如说A),它不是Hadoop(OR HDFS)数据中心的一部分。因此,机器A位于远离HDFS数据中心的位置。

是否有可以在连接到Hadoop(数据中心的一部分)的机器上运行的脚本OR命令OR程序或工具,并直接将文件从机器A拉入HDFS?如果是,那么最好和最快的方法是什么?

我知道有很多方法,比如WebHDFS,Talend但它们需要从机器A运行,并且要求是避免这种情况并在数据中心的机器中运行它。

2 个答案:

答案 0 :(得分:1)

有两种方法可以实现这一目标:

  1. 您可以使用scp提取数据并将其存储在临时位置,然后将其复制到hdfs,并删除临时存储的数据。

  2. 如果您不希望将其保留为两步过程,则可以编写一个程序,该程序将从远程计算机读取文件,并直接将其写入HDFS。

    This question以及评论和答案在阅读文件时会派上用场,您可以使用下面的代码片段写入HDFS。

    outFile = <Path to the the file including name of the new file> //e.g. hdfs://localhost:<port>/foo/bar/baz.txt
    
    FileSystem hdfs =FileSystem.get(new URI("hdfs://<NameNode Host>:<port>"), new Configuration());
    Path newFilePath=new Path(outFile);
    FSDataOutputStream out = hdfs.create(outFile);
    
    // put in a while loop here which would read until EOF and write to the file using below statement
    out.write(buffer);
    

    让缓冲区= 50 * 1024,如果你有足够的IO容量取决于处理器,或者你可以使用更低的值,如10 * 1024或其他东西

答案 1 :(得分:1)

如果我的问题正确,请告诉我。 1 - 您想要在远程位置复制文件。 2-客户端计算机不是Hadoop集群的一部分。 3-它可能不包含Hadoop所需的库。

最好的方法是webHDFS即Rest API