Java程序操作HDFS


1.新建項目
2.導包

解壓hadoop-2.7.3.tar.gz
E:\工具\大數據\大數據提升資料\01-軟件資料\06-Hadoop\安裝包\Java1.8環境
下編譯\hadoop-2.7.3\hadoop-2.7.3\share\hadoop\common
E:\工具\大數據\大數據提升資料\01-軟件資料\06-Hadoop\安裝包\Java1.8環境
下編譯\hadoop-2.7.3\hadoop-2.7.3\share\hadoop\common\lib
E:\工具\大數據\大數據提升資料\01-軟件資料\06-Hadoop\安裝包\Java1.8環境
下編譯\hadoop-2.7.3\hadoop-2.7.3\share\hadoop\hdfs

JUNIT  單元測試
  /**
   * 單元測試
   * 1.修飾符必須是public
   * 2.不能有參數
   * 3.不能有返回值
   *
   * 運行:選中方法名來運行
   *       run as  --junit test
   */
  @Test
  public  void m1(){
    System.out.println("hello");
  }

package com.zy.hdfs;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Iterator;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;

public class test {
    public static void main(String[] args) throws Exception {
        //上傳
        
        //1實例化configuration
        Configuration configuration = new Configuration();
        //-------------------
        //設置一些屬性
        configuration.set("dfs.replication", "2");//2個副本
        configuration.set("dfs.blocksize", "80m");//按照80m切分
        //----------------------
        //2.獲取操作文件系統的客戶端實例
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.64.111:9000/"), configuration, "root");
        //3.執行上傳操作  (src 本地資源 ,dst 上傳目的地)
        fs.copyFromLocalFile(new Path("C:\\Users\\Administrator\\Desktop\\wc.txt"), new Path("/"));//兩次上傳一樣的會被覆蓋
        //4.關閉鏈接
        fs.close();
    }
    
    

    @Test
    public void download() throws Exception{
        //下載
        
        Configuration configuration = new Configuration();
        
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.64.111:9000"), configuration, "root");
        
        fs.copyToLocalFile(false, new Path("/jdk-8u141-linux-x64.tar.gz"), new Path("E://jdk-8u141-linux-x64.tar.gz"), true);
        
        fs.close();    
        
    }
    //----------------
    FileSystem fs=null;
    @Before//在每次運行junit時先執行
    public void before() throws Exception{
        System.out.println("11111");
        Configuration configuration = new Configuration();    
        fs = FileSystem.get(new URI("hdfs://192.168.64.111:9000/"), configuration, "root");        
    }
    //---------------
    @Test
    public void delete() throws Exception{//刪除
        fs.delete(new Path("/彈性表達式.doc"), true);//為true刪除文件夾及里面的內容,false只能刪除空的文件夾
        fs.close();
        
    }
    @Test
    public void mkdir() throws Exception{//創建目錄
        fs.mkdirs(new Path("/a/b/c"));
        fs.close();
        
    }
    
    @Test
    public void list() throws Exception{
        FileStatus[] listStatus = fs.listStatus(new Path("/"));//不會遞歸進去
        for (FileStatus fileStatus : listStatus) {
            if(fileStatus.isFile()){
                System.out.println("文件名:"+fileStatus.getPath().toString());
                
            }else{
                System.out.println("目錄:"+fileStatus.getPath().toString());
                
            }
            
        }
        fs.close();
        
    }
    @Test
    public void list2() throws Exception{//遞歸遍歷出所有文件
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);//為true,遞歸遍歷
        while(listFiles.hasNext()){
            LocatedFileStatus next = listFiles.next();
            System.out.println(next.toString());
            System.out.println("文件塊尺寸"+next.getBlockSize());
         
        }

    }
 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM