国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用java實現將ftp和http的文件直接傳送到hdfs

sixgo / 1967人閱讀

摘要:之前實現了使用流來講和的文件下載到本地,也實現了將本地文件上傳到上,那現在就可以做到將和的文件轉移到上了,而不用先將和的文件拷貝到本地再上傳到上了。

之前實現了使用流來講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行保存到本地,進行分析

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64285.html

相關文章

  • HADOOP集群文件上傳下載

    摘要:對上的文件進行上傳和下載是對集群的基本操作,在權威指南一書中,對文件的上傳和下載都有代碼的實例,但是對如何配置客戶端卻是沒有講得很清楚,經過長時間的搜索和調試,總結了一下,如何配置使用集群的方法,以及自己測試可用的對集群上的文件進行操作的程 對HDFS上的文件進行上傳和下載是對集群的基本操作,在《HADOOP權威指南》一書中,對文件的上傳和下載都有代碼的實例,但是對如何配置HADOOP...

    nevermind 評論0 收藏0
  • 什么是大數據

    一、什么是大數據進入本世紀以來,尤其是2010年之后,隨著互聯網特別是移動互聯網的發展,數據的增長呈爆炸趨勢,已經很難估計全世界的電子設備中存儲的數據到底有多少,描述數據系統的數據量的計量單位從MB(1MB大約等于一百萬字節)、GB(1024MB)、TB(1024GB),一直向上攀升,目前,PB(等于1024TB)級的數據系統已經很常見,隨著移動個人數據、社交網站、科學計算、證券交易、網站日志、傳...

    learn_shifeng 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<