hadoop java操作hdfs
hfds 是一種文件系統(tǒng),用于存儲hadoop將要處理的數(shù)據(jù)。適用于大規(guī)模分布式數(shù)據(jù)處理,是一個可擴展行的文件分布式系統(tǒng);
優(yōu)點
1、如果出現(xiàn)節(jié)點宕機,hdfs,可以持續(xù)監(jiān)視,錯誤檢查,容錯處理,文檔恢復
2、存儲文件巨大,hdfs把文件按塊處理,規(guī)定每塊的大小(默認64M)
hdfs常用 命令
命令格式為: hadoop fs -cmd <args>
1、添加目錄
? ? hadoop fs -mkdir args
2、添加文件
? ? hadoop fs -put localfile hdfsfileurl
? ? 備注:put命令,在hdfs文件系統(tǒng)中放入文件,本地文件消失
3、取出文件
? ? hadoop fs -get locaUrl hdfsurl
? ? 備注:get,把hdfs中的文件取回本地。但是hdfs中的文件還存在,相當于copy
4、查看文件
? ? hadoop fs -cat url
? ? 備注:? hadoop fs -cat url|more可以分頁查看
5、刪除文件
? ? hadoop fs -rm url
6、日志方式查看
? ? hadoop fs -tail url
java 程序控制hdfs
在Hadoop中用作文件操作的主類位于org.apache.hadoop.fs軟件包中。包括常見的open、read、write、close。Hadoop文件的API起點是FileSystem類,這是一個與文件系統(tǒng)交互的抽象類,我們通過調(diào)用factory的方法FileSystem.get(Configuration conf)來取得所需的FileSystem實例,如下我們可以獲得與HDFS接口的FileSystem對象:
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);//獲得HDFS的FileSystem對象
如果我們要實現(xiàn)HDFS與本地文件系統(tǒng)的交互,我們還需要獲取本地文件系統(tǒng)的FileSystem對象
FileSystem local = FileSystem.getLocal(conf);//獲得本地文件系統(tǒng)的FileSystem對象
?| 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 | /** ?* ?*/ package org.jrs.wlh; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; /** ?* @PutMeger.java ?* created at 2013-8-7 上午12:04:08 by jrs521wlh ?* java操作hdfs 往 hdfs中上傳數(shù)據(jù) ?* @author jrs521wlh jiangrushe2010@126.com ?* @version $Revision$</br> ?* update: $Date$ ?*/ public class PutMeger { ????? ????public static void main(String[] args) throws IOException { ????????? ????????String[] str = new String[]{"E:\\hadoop\\UploadFileClient.java","hdfs://master:9000/user/hadoop/inccnt.java"}; ????????Configuration conf = new Configuration(); ????????FileSystem fileS= FileSystem.get(conf); ????????FileSystem localFile = FileSystem.getLocal(conf);? //得到一個本地的FileSystem對象 ????????? ????????Path input = new Path(str[0]); //設定文件輸入保存路徑 ????????Path out = new Path(str[1]);? //文件到hdfs輸出路徑 ????????? ????????try{ ????????????FileStatus[] inputFile = localFile.listStatus(input);? //listStatus得到輸入文件路徑的文件列表 ????????????FSDataOutputStream outStream = fileS.create(out);????? //創(chuàng)建輸出流??? ????????????for (int i = 0; i < inputFile.length; i++) { ????????????????System.out.println(inputFile[i].getPath().getName()); ????????????????FSDataInputStream in = localFile.open(inputFile[i].getPath()); ????????????????? ????????????????byte buffer[] = new byte[1024]; ????????????????int bytesRead = 0; ????????????????while((bytesRead = in.read(buffer))>0){? //按照字節(jié)讀取數(shù)據(jù) ????????????????????System.out.println(buffer); ????????????????????outStream.write(buffer,0,bytesRead); ????????????????} ????????????????? ????????????????in.close(); ????????????} ????????????? ????????}catch(Exception e){ ????????????e.printStackTrace(); ????????} ????} } |
總結(jié)
以上是生活随笔為你收集整理的hadoop java操作hdfs的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop的hdfs文件操作实现上传文
- 下一篇: Hadoop源码分析-Text