亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java結合HADOOP集群文件上傳下載

2019-11-26 15:15:12
字體:
來源:轉載
供稿:網友

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

復制代碼 代碼如下:

hadoop_HOME="/home/work/tools/java/hadoop-client/hadoop"
for f in $hadoop_HOME/hadoop-*.jar; do
        hadoop_CLASSPATH=${hadoop_CLASSPATH}:$f
done
for f in $hadoop_HOME/lib/*.jar; do
        hadoop_CLASSPATH=${hadoop_CLASSPATH}:$f
done
hadoopvfs_HOME="/home/work/tools/java/hadoop-client/hadoop-vfs"
for f in $hadoopvfs_HOME/lib/*.jar; do
        hadoop_CLASSPATH=${hadoop_CLASSPATH}:$f
done
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/work/tools/java/hadoop-client/hadoop/lib/native/Linux-amd64-64/

其中LD_LIBRARY_PATH是在調用時需要用到的庫的路徑,hadoop_CLASSPATH則是我們hadoop客戶端里各種jar包
有一點需要注意的是最好不要使用HADOOP_HOME這個變量,這個是一個系統使用的環境變量,最好不要和它沖突
編譯類的方法:

復制代碼 代碼如下:

javac -classpath $CLASSPATH:$hadoop_CLASSPATH HDFSUtil.java

運行的方法:

復制代碼 代碼如下:

java -classpath $CLASSPATH:$hadoop_CLASSPATH HDFSUtil

但是在實際的使用過程中,會報No Permission之類的錯誤,或者你能保證代碼沒有問題的情況下,在運行的時候也會報一些奇奇怪怪的錯誤
那么問題來了,這是什么鬼?
答案:這是因為沒有配置對應集群的配置文件
因為在《HADOOP權威指南》一書中,弱化了配置的東西,所以在具體使用集群的時候就會出現問題,如何解決呢,這樣子:

復制代碼 代碼如下:

this.conf = new Configuration(false);
conf.addResource("./hadoop-site.xml");
conf.addResource("./hadoop-default.xml");
conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());

為什么會這樣,書上只是很簡單的:

this.conf = new Configuration();
那是因為默認你的集群在本地,所以不需要做配置,但是在實際使用的過程中,各個集群的配置是不同的,所以我們要引入集群的配置
這是非常重要的一點,因為實際使用的過程中我們都是使用的HADOOP的客戶端,而且是已經搭好環境的集群,所以我們需要做好本地的配置
hadoop-site.xml和hadoop-default.xml這兩個文件在所使用的客戶端的conf目錄下,在addResource的時候指定好目錄就行了

將以上所提到的配置,全部配完之后,這個程序才能真正運行起來,所以配置是非常重要的一環。

以下是對應的工具的代碼,有興趣的看一下吧,使用的是文件流的方式來搞的,這樣子也可以打通FTP和HDFS之間文件的互傳:

import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URI;import java.net.URL;import java.io.*;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IOUtils;import org.apache.hadoop.util.Progressable;public class HDFSUtil {  private String hdfs_node = "";  private String hdfs_path = "";  private String file_path = "";  private String hadoop_site = "";  private String hadoop_default = "";  private Configuration conf = null;  public HDFSUtil(String hdfs_node) {    this.hdfs_node = hdfs_node;  }  public String getHdfsNode() {    return this.hdfs_node;  }  public void setHdfsPath(String hdfs_path){    this.hdfs_path = hdfs_path;  }  public String getHdfsPath(){    return this.hdfs_path;  }  public void setFilePath(String file_path){    this.file_path = file_path;  }  public String getFilePath(){    return this.file_path;  }  public void setHadoopSite(String hadoop_site){    this.hadoop_site = hadoop_site;  }  public String getHadoopSite(){    return this.hadoop_site;  }  public void setHadoopDefault(String hadoop_default){    this.hadoop_default = hadoop_default;  }  public String getHadoopDefault(){    return this.hadoop_default;  }  public int setConfigure(boolean flag) {    if (flag == false){      if (this.getHadoopSite() == "" || this.getHadoopDefault() == ""){        return -1;      }      else {        this.conf = new Configuration(false);        conf.addResource(this.getHadoopDefault());        conf.addResource(this.getHadoopSite());        conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());        conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());        return 0;      }    }    this.conf = new Configuration();    return 0;  }  public Configuration getConfigure() {    return this.conf;  }  public int upLoad(String localName, String remoteName) throws FileNotFoundException, IOException {    InputStream inStream = null;    FileSystem fs = null;    try{      inStream = new BufferedInputStream(new FileInputStream(localName));      fs = FileSystem.get(URI.create(this.hdfs_node), this.conf);      OutputStream outStream = fs.create(new Path(remoteName) ,new Progressable() {        public void progress(){          System.out.print('.');        }      });      IOUtils.copyBytes(inStream, outStream, 4096, true);      inStream.close();      return 0;    } catch (IOException e){      inStream.close();      e.printStackTrace();      return -1;    }  }  public int upLoad(InputStream inStream, String remoteName) throws FileNotFoundException, IOException {    FileSystem fs = null;    try{      fs = FileSystem.get(URI.create(this.hdfs_node), this.conf);      OutputStream outStream = fs.create(new Path(remoteName) ,new Progressable() {        public void progress(){          System.out.print('.');        }      });      IOUtils.copyBytes(inStream, outStream, 4096, true);      inStream.close();      return 0;    } catch (IOException e){      inStream.close();      e.printStackTrace();      return -1;    }  }  public int donwLoad(String remoteName, String localName, int lines) throws FileNotFoundException, IOException {    FileOutputStream fos = null;    InputStreamReader isr = null;    BufferedReader br = null;    String str = null;    OutputStreamWriter osw = null;    BufferedWriter buffw = null;    PrintWriter pw = null;    FileSystem fs = null;    InputStream inStream = null;    try {      fs = FileSystem.get(URI.create(this.hdfs_node + remoteName), this.conf);      inStream = fs.open(new Path(this.hdfs_node + remoteName));      fos = new FileOutputStream(localName);      osw = new OutputStreamWriter(fos, "UTF-8");      buffw = new BufferedWriter(osw);      pw = new PrintWriter(buffw);      isr = new InputStreamReader(inStream, "UTF-8");      br = new BufferedReader(isr);      while((str = br.readLine()) != null && lines > 0){        lines--;        pw.println(str);      }    } catch (IOException e){      throw new IOException("Couldn't write.", e);    } finally {      pw.close();      buffw.close();      osw.close();      fos.close();      inStream.close()    }    return 0;  }  //main to test  public static void main(String[] args){    String hdfspath = null;    String localname = null;    String hdfsnode = null;    int lines = 0;    if (args.length == 4){      hdfsnode = args[0];      hdfspath = args[1];      localname = args[2];      lines = Integer.parseInt(args[3]);    }    else{      hdfsnode = "hdfs://nj01-nanling-hdfs.dmop.baidu.com:54310";      hdfspath = "/app/ps/spider/wdmqa/wangweilong/test/HDFSUtil.java";      localname = "/home/work/workspace/project/dhc2-0/dhc/base/ftp/papapa";      lines = 5;    }    HDFSUtil hdfsutil = new HDFSUtil(hdfsnode);    hdfsutil.setFilePath(hdfsutil.getHdfsNode()+hdfspath);    hdfsutil.setHadoopSite("./hadoop-site.xml");    hdfsutil.setHadoopDefault("./hadoop-default.xml");    hdfsutil.setConfigure(false);    try {      hdfsutil.donwLoad(hdfspath, localname, lines);    } catch (IOException e){      e.printStackTrace();    }  }

如果想要了解FTP上文件的下載,請參考這篇文章:

ftp下載工具

如果想要打通FTP和HDFS文件互傳,只要創建一個類,調用這兩篇文章中的工具的接口就可以搞定,自己寫的代碼,實測有效。

以上就是本文的全部內容了,希望能夠對大家熟練掌握java有所幫助。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品69久久久久| 伊人久久大香线蕉av一区二区| 丝袜亚洲欧美日韩综合| 亚洲精品视频免费在线观看| 久久黄色av网站| 久久久久久久网站| 国产综合在线看| 亚洲第一综合天堂另类专| 91理论片午午论夜理片久久| 91九色蝌蚪国产| 日韩在线不卡视频| 亚洲最新在线视频| 国产精品永久免费观看| 国产精品久久久久久av福利| 国产日韩欧美视频在线| 成人黄色免费看| 亚洲成人教育av| 亚洲精品黄网在线观看| 久久久久国色av免费观看性色| 国产精品亚洲美女av网站| 欧美性猛交xxxx乱大交| 中文字幕久热精品在线视频| 欧美激情2020午夜免费观看| 国产久一一精品| 98视频在线噜噜噜国产| 亚洲美女av网站| 日韩av观看网址| 亚洲天堂免费观看| 欧美成人免费网| 成人精品久久一区二区三区| 欧美激情一级二级| 色视频www在线播放国产成人| 国产日韩欧美在线播放| 日韩精品久久久久久福利| 欧美激情久久久| 久久激情五月丁香伊人| 日韩免费看的电影电视剧大全| 亚洲一区二区三区成人在线视频精品| 国产精品久久久久久av福利软件| 国产精品中文字幕在线| 亚洲福利影片在线| 国产+人+亚洲| 日韩中文综合网| 欧美疯狂性受xxxxx另类| www.日韩免费| 亚洲精品国产电影| 热99精品里视频精品| 久久香蕉精品香蕉| 亚洲综合在线播放| 国产精品1区2区在线观看| 欧美午夜精品久久久久久久| 亚洲精品久久7777777| 91国产美女在线观看| 欧美一级视频在线观看| 日韩av资源在线播放| 国产精品电影观看| 欧美国产第一页| 欧美视频在线观看 亚洲欧| 国产精品一区久久久| 一本一本久久a久久精品综合小说| 国自产精品手机在线观看视频| 久久综合久久八八| 亚洲国产婷婷香蕉久久久久久| 久久久精品免费视频| 亚洲成在人线av| 亚洲视频精品在线| 日韩电影网在线| 亚洲国产精品资源| 精品视频在线导航| 日韩精品视频免费| 欧美国产日韩一区二区在线观看| 在线观看成人黄色| 国产成人av在线播放| 欧美激情一区二区三区久久久| 国产欧美日韩免费看aⅴ视频| 日韩精品小视频| 一个色综合导航| 亚洲片av在线| 欧美疯狂性受xxxxx另类| 亚洲精品动漫久久久久| 日本午夜人人精品| 97色在线视频观看| 亚洲免费高清视频| 国产精品视频最多的网站| 欧美大片在线免费观看| www.亚洲成人| 欧美限制级电影在线观看| 欧洲精品在线视频| 欧美激情免费在线| 久久精品视频中文字幕| 爱福利视频一区| 日韩av电影手机在线观看| 亚洲伊人成综合成人网| 亚洲激情久久久| 亚洲色图五月天| 亚洲最大福利视频网| 亚洲a区在线视频| 久热精品视频在线观看一区| 色婷婷亚洲mv天堂mv在影片| 色偷偷噜噜噜亚洲男人| 亚洲男人天堂九九视频| 中文字幕亚洲精品| 性欧美暴力猛交69hd| 亚洲一区二区三区在线视频| 欧美性猛交xxxx黑人猛交| 日韩欧美成人网| 97视频国产在线| 亚洲偷熟乱区亚洲香蕉av| 国产精品免费看久久久香蕉| 欧美成人午夜激情| 亚洲欧美制服综合另类| 操人视频在线观看欧美| 国产精品久久久久99| 亚洲国产成人av在线| 久久躁日日躁aaaaxxxx| 岛国av一区二区| 国产精品自在线| 亚洲综合大片69999| 欧美日韩成人精品| 欧美性xxxxhd| 精品露脸国产偷人在视频| 亚洲成人性视频| 国产精品久久9| 日本久久久久久久| 国产91精品最新在线播放| 狠狠爱在线视频一区| 久久露脸国产精品| 欧美在线视频免费| 国产精品中文字幕久久久| xxxxx91麻豆| 久久人人爽人人爽人人片av高请| 国产视频999| 国产精品免费网站| 国产视频丨精品|在线观看| 欧美激情a在线| 国产97在线|日韩| 日韩av影视在线| 中文字幕久久久av一区| 九九热精品视频| 色香阁99久久精品久久久| 精品毛片网大全| 国产成人精品视频在线| 欧美高清第一页| 国产精品视频白浆免费视频| 97国产成人精品视频| 国产精品视频在线播放| 91av免费观看91av精品在线| 在线成人激情视频| 亚洲国产欧美日韩精品| 欧美性黄网官网| 日韩中文字幕久久| 亚洲欧美日本精品| 久久九九有精品国产23| 欧美激情二区三区| 成人欧美一区二区三区黑人孕妇| 日韩免费在线电影| 亚洲美女又黄又爽在线观看| 欧美日本亚洲视频| 国产成人精品优优av| 97婷婷大伊香蕉精品视频| 亚洲天堂免费观看| 亚洲情综合五月天| 欧美专区日韩视频| 俺去了亚洲欧美日韩|