摘要:之前實現(xiàn)了使用流來講和的文件下載到本地,也實現(xiàn)了將本地文件上傳到上,那現(xiàn)在就可以做到將和的文件轉(zhuǎn)移到上了,而不用先將和的文件拷貝到本地再上傳到上了。
之前實現(xiàn)了使用流來講http和ftp的文件下載到本地,也實現(xiàn)了將本地文件上傳到hdfs上,那現(xiàn)在就可以做到將
ftp和http的文件轉(zhuǎn)移到hdfs上了,而不用先將ftp和http的文件拷貝到本地再上傳到hdfs上了。其實這個東西的原理
很簡單,就是使用流,將ftp或http的文件讀入到流中,然后將流中的內(nèi)容傳送到hdfs上,這樣子就不用讓數(shù)據(jù)存到
本地的硬盤上了,只是讓內(nèi)存來完成這個轉(zhuǎn)移的過程,希望這個工具,能夠幫到有這樣需求的同學(xué)~
這里先附上之前的幾個工具的鏈接:
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]; //遠端服務(wù)器類型,http還是ftp hostname = args[1]; //遠端服務(wù)器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轉(zhuǎn)移到hdfs,也能將前N行保存到本地,進行分析
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64285.html
摘要:對上的文件進行上傳和下載是對集群的基本操作,在權(quán)威指南一書中,對文件的上傳和下載都有代碼的實例,但是對如何配置客戶端卻是沒有講得很清楚,經(jīng)過長時間的搜索和調(diào)試,總結(jié)了一下,如何配置使用集群的方法,以及自己測試可用的對集群上的文件進行操作的程 對HDFS上的文件進行上傳和下載是對集群的基本操作,在《HADOOP權(quán)威指南》一書中,對文件的上傳和下載都有代碼的實例,但是對如何配置HADOOP...
一、什么是大數(shù)據(jù)進入本世紀以來,尤其是2010年之后,隨著互聯(lián)網(wǎng)特別是移動互聯(lián)網(wǎng)的發(fā)展,數(shù)據(jù)的增長呈爆炸趨勢,已經(jīng)很難估計全世界的電子設(shè)備中存儲的數(shù)據(jù)到底有多少,描述數(shù)據(jù)系統(tǒng)的數(shù)據(jù)量的計量單位從MB(1MB大約等于一百萬字節(jié))、GB(1024MB)、TB(1024GB),一直向上攀升,目前,PB(等于1024TB)級的數(shù)據(jù)系統(tǒng)已經(jīng)很常見,隨著移動個人數(shù)據(jù)、社交網(wǎng)站、科學(xué)計算、證券交易、網(wǎng)站日志、傳...
閱讀 2193·2021-11-24 09:38
閱讀 3255·2021-11-08 13:27
閱讀 3095·2021-09-10 10:51
閱讀 3162·2019-08-29 12:20
閱讀 674·2019-08-28 18:28
閱讀 3470·2019-08-26 11:53
閱讀 2718·2019-08-26 11:46
閱讀 1527·2019-08-26 10:56