一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java實現將ftp和http的文件直接傳送到hdfs

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

2019-12-13 10:51hebedich JAVA教程

前面幾篇文章,我們已經做了很好的鋪墊了,幾個要用到的工具我們都做了出來,本文就是將他們集合起來,說下具體的用法,小伙伴們可以參考下。

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

http工具
ftp工具
鏈接描述

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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有所幫助。

請您花一點時間將文章分享給您的朋友或者留下評論。我們將會由衷感謝您的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产90后美女露脸在线观看 | ange venus与黑人 | 亚洲国产精品久久无套麻豆 | 亚洲人的天堂男人爽爽爽 | 小向美奈子av | 波多野结衣中文字幕乱七八糟 | 99视频免费在线 | 99精品免费观看 | 风间由美在线 | 日韩欧美亚洲天堂 | 国产剧情一区 | 失禁尿丝袜vk | chinese高中生gay男同 | 亚洲国产无线码在线观看 | www.国产一区二区三区 | 纲手被强喷水羞羞漫画 | 亚洲www美色 | 99精品99| 喜马拉雅听书免费版 | 天天摸天天碰色综合网 | 护士让我吃奶我扒她奶 | 麻豆视频免费在线播放 | 精品国产乱码久久久人妻 | 草莓视频旧版 | 色菇凉天天综合网 | 操岳母娘 | 亚洲国产在线综合018 | jzjzjz日本在线观看 | 四虎影视e456fcom四虎影视 | 国产欧美久久一区二区 | 久久夜色噜噜噜亚洲AV0000 | 欧美精品超清在线播放 | 99国内精品久久久久久久黑人 | 久久午夜夜伦痒痒想咳嗽P 久久无码AV亚洲精品色午夜麻豆 | 日本久本草精品 | 日本护士撒尿xxxxhd | 免费国产一级观看完整版 | 欧美zoosex| 丰满的闺蜜2中文字幕 | 美女免费观看一区二区三区 | 男人操美女视频 |