之前实现了使用流来讲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.setHdfsPath(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有所帮助。
请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!
本文向大家介绍java实现将文件上传到ftp服务器的方法,包括了java实现将文件上传到ftp服务器的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现将文件上传到ftp服务器的方法。分享给大家供大家参考,具体如下: 工具类: 读取配置文件: 将文件上传ftp: 更多关于java相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教
问题内容: 关于此问题,有什么方法可以将[文件从ASP.NET应用程序直接上传到Amazon S3并具有进度条? -—编辑---- 两天后,仍然没有直接的运气。发现了一件看起来很有前途但又不是免费的东西:http : //www.flajaxian.com/ 使用Flash通过进度条直接上传到S3。 问题答案: 我也在寻找解决方案。也许这会有所帮助, 来自AWS Dev Commnity, 但在许
我正在使用FTP和JAVA传输文件。我正在使用Apache中的FTPClient和FTPServer。但在特定环境中,有时文件不会传输。在调用login方法之前,我从FTPClient调用enterLocalPassiveMode方法,但有时文件不会被传输。 store File方法返回“false”。 getReplyString方法返回“200命令类型可以”。 list方法返回“227”。 文
本文向大家介绍java实现ftp上传 如何创建文件夹,包括了java实现ftp上传 如何创建文件夹的使用技巧和注意事项,需要的朋友参考一下 java如何实现ftp上传?如何创建文件夹? 最佳答案: 准备条件:java实现ftp上传用到了commons-net-3.3.jar包 首先建立ftphost连接 然后再利用ftpclient的makeDirectory方法创建文件夹 断开host连接 最后
本文向大家介绍python实现ftp文件传输功能,包括了python实现ftp文件传输功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现ftp文件传输的具体代码,供大家参考,具体内容如下 主要步骤可以分为以下几步: 1.读取文件名 2.检测文件是否存在 3.打开文件 4.检测文件大小 5.发送文件大小和 md5值给客户端 6.等客户端确认 7.开始边读边发数据 服务
我正在使用lambda nodejs将文件上传到ftp服务器。 上传文件的源代码: index.js文件: 运行后的日志: 回应: 零 请求ID: “9c8e1701-ad54-42eb-8dc6-bbed77bc9b41” 函数日志: 开始请求id:9c8e 1701-ad54-42e b-8dc 6-bbed 77 BC 9 b 41版本:$最新 结束请求ID:9c8e1701-ad54-42