Hadoop對文件的基本操作方式(shell命令、JAVA API)

Hadoop對文件的基本操作方式:shell命令、JAVA API
 
一、Shell中操作HDFS時常用命令
 
  1. 創建目錄命令
   hdfs dfs -mkdir /user        在根目錄下創建user目錄
        
        2. 上傳文件到HDFS
        hdfs dfs -put hadoop-native-64-2.5.0.tar /user/hadoop-native-64-2.5.0.tar
        
        3.  查看HDFS下某個文件的內容
        hdfs dfs -cat install.log
        4.  把HDFS文件系統中的某個文件複製到本地系統中
        hdfs dfs -get 文件名 新文件名
        注意:-get命令和-put命令既可以操作目錄,也可以操件文件
        5. 刪除文件
        hdfs dfs -rm -r /user/install.log
        
        6. 格式化HDFS
        hdfs namenode -format
        7. 啓動HDFS
        start-dfs.sh
        8. 退出HDFS
        stop-dfs.sh
 
 
二、基於Java API操作
 
    HDFS中對於文件操作主要涉及的幾個類
    Configuration類:
    這個類主要封裝了客戶端或者服務器的配置
    FileSystem類:
    這個類的對象是一個文件系統對象,可以使用這個對象的方法對文件進行一些操作
FileSystem fs = FileSystem.get(conf);    //通過FileSystem的靜態方法get來獲得對象
    FSDataInputStream/FSDataOutputStream類:
    這兩個類是HDFS中的輸入/輸出流,分別是通過FileSystem對象的open方法和create方法獲得
 
    使用java程序來進行文件的創建:
    準備工作:
        JAVA需要的jar包
            在hadoop壓縮包中進行解壓
  1. 必要的jar包
         \share\hadoop\hdfs 下的jar
         \share\hadoop\hdfs\lib 下的jar
     2. 通用jar包
          \share\hadoop\common下的jar
          \share\hadoop\common\lib下的jar
     NameNode需要退出安全模式:
           hdfs dfsadmin -safemode leave
    對於hadoop中的core-site.xml進行配置
        
    對HDFS有寫入的權限
        hadoop fs -chmod 777 /
 
JAVA測試代碼:
 
        
創建文件:
public class HdfsTest {
    //定義一個配置文件
    public static Configuration conf = new Configuration();
    public static void main(String[] args) {
        createFolder();
    }


    /**
     * 創建一個文件
     */
    public static void createFolder(){
        conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");
        try {
            //通過配置信息得到文件系統的對象
            FileSystem fs = FileSystem.get(conf);
            //在指定的路徑下創建文件夾
            Path path = new Path("/test01");
            fs.mkdirs(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

     

遞歸顯示文件
 
public static void listFile(Path path){
    conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");
    try {
        FileSystem fs = FileSystem.get(conf);
        //把文件元數據封裝到fileStatuses數組當中
        FileStatus[] fileStatuses = fs.listStatus(path);
        //遍歷這個數組
        for (FileStatus fstatus:fileStatuses) {
            //如果當前文件是一個文件夾則進行遞歸
            if(fstatus.isDirectory()){
                System.out.println("當前路徑是:" + fstatus.getPath());
                listFile(fstatus.getPath());
            } else {
                System.out.println("當前路徑是:" + fstatus.getPath());
            }
        }
    }catch (IOException e){
        e.printStackTrace();
    }
}

         

上傳文件:
public static void uploadFile(){
    conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");
    try {
        FileSystem fs = FileSystem.get(conf);
        //定義待上傳本地文件及服務器的路徑
        Path src = new Path(new File("xiesheng.txt").getAbsolutePath());
        Path dest = new Path("/test01/hello.txt");
        //從本地上傳文件
        fs.copyFromLocalFile(src,dest);
    } catch (IOException e){
        e.printStackTrace();
    }
}

 

下載文件:
public static void downloadFile(){
    conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");
    try{
        FileSystem fs = FileSystem.get(conf);
        //定義服務器要下載文件的路徑和本地存儲路徑
        Path src = new Path("/test01/hello.txt");
        Path dst = new Path("D://download//hello.txt");
        //從服務器下載文件到本地
        //fs.copyToLocalFile(src,dest); 使用這個會報一個空指針,需要使用下面這個方法
        fs.copyToLocalFile(false,src,dst,true);
    } catch (IOException e){
        e.printStackTrace();
    }
}

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章