HDFS 檔案操作 01

1 篇文章 / 0 new
author
HDFS 檔案操作 01
public class NDFSQuery {
    private static FileSystem hdfs;
    private final static String hdfsURI = "hdfs://192.168.0.160:9000/";
    private static Configuration conf = new Configuration();
 
    public static void main(String[] args) throws Exception {
        // 連線 hdfs, 注意 因 FileSystem.get()取回得的FileSystem是屬於全域變數
        // 故有任何地方進行 close後, 要使用時就須再 get()一次
 
        //conf.addResource(new Path("c:/core-site.xml"));//加入配置參數
        hdfs = FileSystem.get(conf);//使用預載參數檔內URI
        //hdfs = FileSystem.get(URI.create(hdfsURI), conf);//自行指定URI
        System.out.println("遠端使用者工作目錄:" + hdfs.getWorkingDirectory());
        //
        //viewData("/lc/hadoop");// 瀏覽
        uploadData();//上傳
        createData();//建立遠端檔案
 
        //更改檔名
        boolean result = false;
        result = hdfs.rename(new Path("/lc/test.txt"), new Path("/lc/new_test.txt"));
        System.out.println("更改檔名:"+result);
 
        //若指定為目錄時 參數(true 不論目錄內是否有檔案一律刪除, false=若目錄內有檔案則拋出異常)
        result = hdfs.delete(new Path("/sample.txt"), false);//刪除檔案或目錄
        System.out.println("刪除檔案:"+result);
 
        result = hdfs.deleteOnExit(new Path("/lc/samplt.txt"));
        System.out.println("程序結束後刪除檔案:"+result);
        //
        hdfs.close();
        System.out.println("end");
    }
    // 顯示 Configuration 參數資料
    private static void listConfiguration() {
        for(Entry<String, String> entry:conf) {
            System.out.printf("%s=%s\n",entry.getKey(),entry.getValue());
        }
    }
    // 直接建立遠端資料
    private static void createData() throws Exception {
        String root = "/lc";
        // 使用HDFS stream 寫入資料,建立目錄,檔案
        FSDataOutputStream out = hdfs.create(new Path(root+"/in/myfirst.txt"));
        out.writeUTF("哈囉\n");//UTF-8
        out.write(((new Date()).toString()+" 哈囉, 我的 Hadoop!").getBytes("UTF-8"));
        out.flush();
        out.close();
        //
        viewData(root);
    }
    // 上傳資料
    private static void uploadData() throws Exception {
        // 取得本地檔案
        Path src = new Path("j:/test.txt");
        // 指定檔案 hdfs儲存位置
        String root = "/lc";
        Path dst = new Path(hdfsURI + root);
        // 上傳
        hdfs.copyFromLocalFile(src, dst);
        System.out.println("檔案上傳成功至:" + conf.get("fs.default.name"));
        // 6.取得指定路徑下的檔案/目錄清單
        FileStatus[] fs = hdfs.listStatus(dst);
        //
        if (fs == null) {
            System.out.println("root error");
        } else if (fs.length > 0) {
            for (FileStatus f : fs) {
                showDir(f, root);
            }
        }
    }
    // 瀏覽資料
    private static void viewData(String root) throws Exception {
        // 取得指定路徑下的檔案/目錄清單
        FileStatus[] fs = hdfs.listStatus(new Path(root));
        //
        if (fs == null) {
            System.out.println("[viewData] root error");
        } else if (fs.length > 0) {
            for (FileStatus f : fs) {
                showDir(f, root);
            }
        }
    }
    //列出 指定路徑下資料
    private static void showDir(FileStatus fs, String root) throws Exception {
        Path path = fs.getPath();
        // 資料修改時間
        long time = fs.getModificationTime();
        String dTime = (new Date(time)).toString();
        if (fs.isDir()) {// 目錄
            root += "/" + path.getName();
            System.out.println(String.format("目錄[%s] %s", dTime, root));
            System.out.println(">> "+path);
            FileStatus[] f = hdfs.listStatus(path);
            if (f.length > 0) {
                for (FileStatus file : f) {
                    showDir(file, root);
                }
            }
        } else {// 檔案
            System.out.println(String.format("檔案[%s] %s/%s", dTime, root, path.getName()));
            showData(root + "/" + path.getName());
        }
    }
    //顯示檔案資訊
    private static void showData(String tarFile) {
        try {
            Path path = new Path(tarFile);
            FSDataInputStream is = hdfs.open(path);
            FileStatus stat = hdfs.getFileStatus(path);
            byte[] buffer = new byte[Integer.parseInt(String.valueOf(stat.getLen()))];
            is.readFully(0, buffer);
            is.close();
            System.out.println(new String(buffer));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
}
import
import java.io.IOException;
import java.net.URI;
import java.util.Date;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.Path;
關鍵字: 
Free Web Hosting