java实现将ftp和http的文件直接传送到hdfs

网友投稿 327 2023-08-03


java实现将ftp和http的文件直接传送到hdfs

之前实现了使用流来讲http和ftp的文件下载到本地,也实现了将本地文件上传到hdfs上,那现在就可以做到将

ftp和http的文件转移到hdfs上了,而不用先将ftp和http的文件拷贝到本地再上传到hdfs上了。其实这个东西的原理

很简单,就是使用流,将ftp或http的文件读入到流中,然后将流中的内容传送到hdfs上,这样子就不用让数据存到

本地的硬盘上了,只是让内存来完成这个转移的过程,希望这个工具,能够帮到有这样需求的同学~

这里先附上之前的几个工具的链接:

http工具

ftp工具

链接描述

代码如下:

import java.io.InputStream;

import java.io.OutputStream;

import java.io.IOException;

public class FileTrans {

private String head = "";

private String hostname = "";

private String FilePath = "";

private String hdfsFilePath = "";

private HDFSUtil hdfsutil = null;

private FtpClient ftp;

private HttpUtil http;

public void setFilePath(String FilePath){

this.FilePath = FilePath;

}

public String getFilePath(String FilePath){

return this.FilePath;

}

public void sethdfsFilePath(String hdfsFilePath){

this.hdfsFilePath = hdfsFilePath;

}

public String gethdfsFilePath(String hdfsFilePath){

return this.hdfsFilePath;

}

public void setHostName(String hostname){

this.hostname = hostname;

}

public String getHostName(){

return this.hostname;

}

public void setHead(String head){

this.head = head;

}

public String getHead(){

return this.head;

}

public FileTrans(String head, String hostname, String filepath, String hdfsnode,String hdfsFilepath){

this.head = head;

this.hostname = hostname;

this.FilePath = filepath;

this.hdfsFilePath = hdfsFilepath;

if (head.equals("ftp") && hostname != ""){

this.ftp = new FtpClient(this.hostname);

}

if ((head.equals("http") || head .equals("https")) && hostname != ""){

String httpurl = head + "://" + hostname + "/" + filepath;

this.http = new HttpUtil(httpurl);

}

if (hdfsnode != ""){

this.hdfsutil = new HDFSUtil(hdfsnode);

}

this.hdfsutil.setHVtpWpTydfsPath(this.hdfsFilePath);

this.hdfsutil.setFilePath(hdfsutil.getHdfsNode()+hdfsutil.getHdfsPath());

this.hdfsutil.setHadoopSite("./hadoop-site.xml");

this.hdfsutil.setHadoopDefault("./hadoop-default.xml");

this.hdfsutil.setConfigure(false);

}

public static void main(String[] args) throws IOException{

String head = "";

String hostname = "";

String filepath = "";

String hdfsfilepath = "";

String hdfsnode = "";

String localpath = "";

InputStream inStream = null;

int samplelines = 0;

try{

head = args[0]; //远端服务器类型,http还是ftp

hostname = args[1]; //远端服务器hostname

filepath = args[2]; //远端文件路径

hdfsnode = args[3]; //hdfs的机器名,不带hdfs开头

hdfsfilepath = args[4]; //hdfs的文件路径

localpath = args[5]; //如果需要在本地保存一份的话,输入本地的路径,不保存,传入空格或者samplelines传入0

samplelines = Integer.parseInt(args[6]); //保存在本地的话,保存前N行,如果不保存,填0

}catch (Exception e){

System.out.println("[FileTrans]:input args error!");

e.printStackTrace();

}

FileTrans filetrans = new FileTrans(head, hostname, filepath, hdfsnode,hdfsfilepath);

if (filetrans == null){

System.out.println("filetrans null");

return;

}

if (filetrans.ftp == null && head.equals("ftp")){

System.out.println("filetrans ftp null");

return;

}

if (filetrans.http == null && (head.equals("http") || head.equals("https"))){

System.out.println("filetrans ftp null");

return;

}

try{

if (head.equals("ftp")){

inStream = filetrans.ftp.getStream(filepath);

if (samplelines > 0){

filetrans.ftp.writeStream(inStream, localpath, samplelines);

}

}

else{

inStream = filetrans.http.getStream(head + "://" + hostname + "/" + filepath);

if (samplelines > 0){

filetrans.http.downLoad(head + "://" + hostname + "/" + filepath, localpath, samplelines);

}

}

filetrans.hdfsutil.upLoad(inStream, filetrans.hdfsutil.getFilePath());

if (head == "ftp"){

filetrans.ftp.disconnect();

}

}catch (IOException e){

System.out.println("[FileTrans]: file trans failed!");

e.printStackTrace();

}

System.out.println("[FileTrans]: file trans success!");

}

}

编译有问题的话,在hadoop工具的那篇文章中有提到,可以参考

注:最好将其他三个工具的文件放在同一个目录下,如果不放在一起,那么请自行引用

这个工具既可以将ftp或者http转移到hdfs,也能将前N行保存到本地,进行分析

以上就是本文所述的全部内容了,希望能够对大家学习java有所帮助。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现获取前、后N天日期的函数分享
下一篇:API管理解决方案:优化互联网时代的接口管理系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~