Hadoop3.0 Java API使用指南

0.開發(fā)環(huán)境概述

客戶端環(huán)境

Windows 7 64位
Oracle JDK8 64位
Eclipse4.7

服務(wù)器偽分布式安裝部署Hadoop3


1.Windows平臺(tái)下Hadoop客戶端運(yùn)行環(huán)境搭建

-下載winutils
-解壓縮到任意文件夾下
-新建環(huán)境變量HADOOP_HOME
-在環(huán)境變量PATH中添加%HADOOP_HOME%\bin

2.建立客戶端工程

-新建Maven項(xiàng)目,POM文件如下:
<dependencies>
        <dependency>
            <groupId>jdk.tools</groupId>
            <artifactId>jdk.tools</artifactId>
            <version>1.8</version>
            <scope>system</scope>
            <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs-client</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
-拷貝服務(wù)器端上的core-site.xmlhdfs-site.xml到maven工程的src文件夾下,開始碼代碼;

-建立與服務(wù)器端Hadoop的連接

    private static Configuration conf = new Configuration();
    private FileSystem hdfs;
    private final static String HDFSUri = "hdfs://192.168.1.111:9001";
    public FileSystem initHDFS() throws URISyntaxException {
        URI uri = new URI(HDFSUri);
        conf.addResource("hdfs-site.xml");
        conf.addResource("core-site.xml");
        try {
            hdfs = FileSystem.get(uri,conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return hdfs;
    }

-檢查文件是否存在

    /**
     * 檢查文件是否存在
     * @throws IllegalArgumentException
     * @throws IOException
     */
    @Test
    public void testCheckFile() throws IllegalArgumentException, IOException {
        Path path = new Path("hdfs://192.168.1.111:9001/user/root/test.txt");
        boolean result = hdfsDao.exists(path);
        System.out.println(result?"文件存在":"文件不存在");
    }

-在HDFS上新建文件夾

    /**
     * 新建文件夾
     * @throws IOException
     */
    @Test
    public void testMkdir() throws IOException {
        Path folderPath = new Path("hdfs://192.168.1.133:9000/user/root/tiffData");
        boolean result = hdfsDao.mkdirs(folderPath);
        System.out.println(result?"添加文件夾成功":"添加文件夾失敗");
    }

-刪除文件夾/文件

    /**
     * 刪除文件夾/文件
     * @throws IOException
     */
    @Test
    public void testDeldir() throws IOException {
        Path folderPath = new Path("hdfs://192.168.1.133:9000/user/root/tiffData");
        boolean result = hdfsDao.delete(folderPath, false);
        System.out.println(result?"刪除文件夾成功":"刪除文件夾失敗");
    }

-獲取指定目錄下所有文件(忽略目錄)

/**
     * 獲取指定目錄下所有文件(忽略目錄)
     * @throws FileNotFoundException
     * @throws IllegalArgumentException
     * @throws IOException
     */
    @Test
    public void testGetAllFile() throws FileNotFoundException, IllegalArgumentException, IOException {
        RemoteIterator<LocatedFileStatus> listFiles = hdfsDao.listFiles(new Path("/"), true);
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        while (listFiles.hasNext()) {
            LocatedFileStatus fileStatus = (LocatedFileStatus) listFiles.next();
            //權(quán)限
            FsPermission permission = fileStatus.getPermission();
            //擁有者
            String owner = fileStatus.getOwner();
            //組
            String group = fileStatus.getGroup();
            //文件大小byte
            long len = fileStatus.getLen();
            long modificationTime = fileStatus.getModificationTime();
            Path path = fileStatus.getPath();
            System.out.println("-------------------------------");
            System.out.println("permission:"+permission);
            System.out.println("owner:"+owner);
            System.out.println("group:"+group);
            System.out.println("len:"+len);
            System.out.println("modificationTime:"+sdf.format(new Date(modificationTime)));
            System.out.println("path:"+path);
        }
    }

-從HDFS上拷貝文件到本地

    /**
     * 從HDFS上拷貝文件到本地
     */
    @Test
    public void testDownLoadFile() {
        Path src = new Path("hdfs://192.168.1.133:9000/user/root/test.txt");
        Path des = new Path("D:\\workData\\test.txt");
        try {
            hdfsDao.copyToLocalFile(src, des);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

-本地文件上傳

    @Test
    public void testFileUpload() {
        Path src = new Path("D:\\workData\\test1.txt");
        Path des = new Path("hdfs://192.168.1.133:9000/user/root/test1.txt");
        try {
            hdfsDao.copyFromLocalFile(src, des);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先,我們?cè)谑褂们跋瓤纯碒DFS是什麼?這將有助于我們是以后的運(yùn)維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,472評(píng)論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,654評(píng)論 19 139
  • 1. Zookeeper介紹: 1.基本介紹: Zookeeper: 為分布式應(yīng)用提供分布式協(xié)作(協(xié)調(diào))服務(wù)。使用...
    奉先閱讀 4,723評(píng)論 0 10
  • hadoop是什么?HDFS與MapReduceHive:數(shù)據(jù)倉庫,在HDFS之上,后臺(tái)執(zhí)行,幫你執(zhí)行。faceb...
    Babus閱讀 2,666評(píng)論 0 5
  • 歡迎Follow我的GitHub, 關(guān)注我的簡(jiǎn)書. 其余參考Android目錄. 本文的合集已經(jīng)編著成書,高級(jí)An...
    SpikeKing閱讀 11,694評(píng)論 2 6

友情鏈接更多精彩內(nèi)容