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

6jygbczu  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(358)

我在一台机器(比如a)中有文件,它不是hadoop(或hdfs)数据中心的一部分。所以机器a位于hdfs数据中心的远程位置。
是否有脚本、命令、程序或工具可以在连接到hadoop(数据中心的一部分)的机器上运行,并将文件从机器a直接拉入hdfs?如果是的话,什么是最好最快的方法?
我知道有很多方法,比如webhdfs,talend,但它们需要从机器上运行,而要求是避免这种情况,并在数据中心的机器上运行。

zbq4xfa0

zbq4xfa01#

请告诉我你的问题是否正确。1-您要将文件复制到远程位置。2-客户端计算机不是hadoop集群的一部分。3-它可能不包含hadoop所需的库。
最好的方法是webhdfs,即restapi

cl25kdpy

cl25kdpy2#

有两种方法可以实现这一点:
您可以使用scp提取数据并将其存储在临时位置,然后将其复制到hdfs并删除临时存储的数据。
如果您不想将其保持为两步过程,可以编写一个程序,从远程机器读取文件,并将其直接写入hdfs。
这个问题以及注解和答案在阅读文件时非常方便,而您可以使用下面的代码段来编写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);

假设buffer=501024,如果您有足够的io容量(取决于处理器),或者您可以使用101024之类的低得多的值

相关问题