欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)將ftp和http的文件直接傳送到hdfs

 更新時(shí)間:2015年03月25日 15:49:10   投稿:hebedich  
前面幾篇文章,我們已經(jīng)做了很好的鋪墊了,幾個(gè)要用到的工具我們都做了出來(lái),本文就是將他們集合起來(lái),說(shuō)下具體的用法,小伙伴們可以參考下。

之前實(shí)現(xiàn)了使用流來(lái)講http和ftp的文件下載到本地,也實(shí)現(xiàn)了將本地文件上傳到hdfs上,那現(xiàn)在就可以做到將
ftp和http的文件轉(zhuǎn)移到hdfs上了,而不用先將ftp和http的文件拷貝到本地再上傳到hdfs上了。其實(shí)這個(gè)東西的原理
很簡(jiǎn)單,就是使用流,將ftp或http的文件讀入到流中,然后將流中的內(nèi)容傳送到hdfs上,這樣子就不用讓數(shù)據(jù)存到
本地的硬盤(pán)上了,只是讓內(nèi)存來(lái)完成這個(gè)轉(zhuǎn)移的過(guò)程,希望這個(gè)工具,能夠幫到有這樣需求的同學(xué)~
這里先附上之前的幾個(gè)工具的鏈接:

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];         //遠(yuǎn)端服務(wù)器類(lèi)型,http還是ftp
      hostname = args[1];       //遠(yuǎn)端服務(wù)器hostname
      filepath = args[2];       //遠(yuǎn)端文件路徑
      hdfsnode = args[3];       //hdfs的機(jī)器名,不帶hdfs開(kāi)頭
      hdfsfilepath = args[4];     //hdfs的文件路徑
      localpath = args[5];       //如果需要在本地保存一份的話(huà),輸入本地的路徑,不保存,傳入空格或者samplelines傳入0
      samplelines = Integer.parseInt(args[6]); //保存在本地的話(huà),保存前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!");
  }

}

編譯有問(wèn)題的話(huà),在hadoop工具的那篇文章中有提到,可以參考
注:最好將其他三個(gè)工具的文件放在同一個(gè)目錄下,如果不放在一起,那么請(qǐng)自行引用

這個(gè)工具既可以將ftp或者h(yuǎn)ttp轉(zhuǎn)移到hdfs,也能將前N行保存到本地,進(jìn)行分析

以上就是本文所述的全部?jī)?nèi)容了,希望能夠?qū)Υ蠹覍W(xué)習(xí)java有所幫助。

請(qǐng)您花一點(diǎn)時(shí)間將文章分享給您的朋友或者留下評(píng)論。我們將會(huì)由衷感謝您的支持!

相關(guān)文章

最新評(píng)論