欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)對(duì)Hadoop的操作

 更新時(shí)間:2021年07月01日 11:33:51   作者:Even710  
這篇文章主要介紹了java實(shí)現(xiàn)對(duì)Hadoop的操作,通過非常完整詳細(xì)的代碼展示了如何去進(jìn)行一系列操作,包括基本操作,文件讀寫,需要的朋友可以參考下

基本操作

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

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

@RunWith(JUnit4.class)
@DisplayName("Test using junit4")
public class HadoopClientTest {

    private FileSystem fileSystem = null;

    @BeforeEach
    public void init() throws URISyntaxException, IOException, InterruptedException {
        Configuration configuration = new Configuration();

        configuration.set("dfs.replication", "1");
        configuration.set("dfs.blocksize", "64m");
        fileSystem = FileSystem.get(new URI("hdfs://hd-even-01:9000"), configuration, "root");
    }
    /**
     * 從本地復(fù)制文件到Hadoop
     *
     * @throws URISyntaxException
     * @throws IOException
     * @throws InterruptedException
     */
    @Test
    public void copyFileFromLocal() throws URISyntaxException, IOException, InterruptedException {
        // 上傳文件
        fileSystem.copyFromLocalFile(new Path("C:\\Users\\Administrator\\Desktop\\win10激活.txt"), new Path("/even1"));
        // 關(guān)閉流,報(bào)錯(cuò)winUtils,因?yàn)槭褂昧薼inux的tar包,如果windows要使用,則需要編譯好這個(gè)winUtils包才能使用
        fileSystem.close();
    }

    /**
     * 從Hadoop下載文件到本地,下載需要配置Hadoop環(huán)境,并添加winutils到bin目錄
     *
     * @throws URISyntaxException
     * @throws IOException
     * @throws InterruptedException
     */
    @Test
    public void copyFileToLocal() throws URISyntaxException, IOException, InterruptedException {
        // 下載文件
        fileSystem.copyToLocalFile(new Path("/win10激活.txt"), new Path("E:/"));
        // 關(guān)閉流,報(bào)錯(cuò)winUtils,因?yàn)槭褂昧薼inux的tar包,如果windows要使用,則需要編譯好這個(gè)winUtils包才能使用
        fileSystem.close();
    }


    /**
     * 創(chuàng)建文件夾
     *
     * @throws IOException
     */
    @Test
    public void hdfsMkdir() throws IOException {
        // 調(diào)用創(chuàng)建文件夾方法
        fileSystem.mkdirs(new Path("/even1"));
        // 關(guān)閉方法
        fileSystem.close();
    }

    /**
     * 移動(dòng)文件/修改文件名
     */
    public void hdfsRename() throws IOException {
        fileSystem.rename(new Path(""), new Path(""));
        fileSystem.close();
    }

    /**
     * 刪除文件/文件夾
     *
     * @throws IOException
     */
    @Test
    public void hdfsRm() throws IOException {
//        fileSystem.delete(new Path(""));
        // 第二個(gè)參數(shù)表示遞歸刪除
        fileSystem.delete(new Path(""), true);

        fileSystem.close();
    }

    /**
     * 查看hdfs指定目錄的信息
     *
     * @throws IOException
     */
    @Test
    public void hdfsLs() throws IOException {
        // 調(diào)用方法返回遠(yuǎn)程迭代器,第二個(gè)參數(shù)是把目錄文件夾內(nèi)的文件也列出來
        RemoteIterator<LocatedFileStatus> listFiles = fileSystem.listFiles(new Path("/"), true);
        while (listFiles.hasNext()) {
            LocatedFileStatus locatedFileStatus = listFiles.next();

            System.out.println("文件路徑:" + locatedFileStatus.getPath());
            System.out.println("塊大?。? + locatedFileStatus.getBlockSize());
            System.out.println("文件長(zhǎng)度:" + locatedFileStatus.getLen());
            System.out.println("副本數(shù)量:" + locatedFileStatus.getReplication());
            System.out.println("塊信息:" + Arrays.toString(locatedFileStatus.getBlockLocations()));
        }

        fileSystem.close();
    }

    /**
     * 判斷是文件還是文件夾
     */
    @Test
    public void findHdfs() throws IOException {
        // 1,展示狀態(tài)信息
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
        // 2,遍歷所有文件
        for (FileStatus fileStatus : listStatus) {
            if (fileStatus.isFile())
                System.out.println("是文件:" + fileStatus.getPath().getName());
            else if (fileStatus.isDirectory())
                System.out.println("是文件夾:" + fileStatus.getPath().getName());
        }

        fileSystem.close();
    }

}

文件讀寫

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.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.DisplayName;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;

@RunWith(JUnit4.class)
@DisplayName("this is read write test!")
public class HadoopReadWriteTest {
    FileSystem fileSystem = null;
    Configuration configuration = null;
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        // 1,加載配置
        configuration = new Configuration();
        // 2,構(gòu)建客戶端
        fileSystem = FileSystem.get(new URI("hdfs://hd-even-01:9000/"), configuration, "root");
    }


    @Test
    public void testReadData() throws IOException {
        // 1,獲取hdfs文件流
        FSDataInputStream open = fileSystem.open(new Path("/win10激活.txt"));
        // 2,設(shè)置一次獲取的大小
        byte[] bytes = new byte[1024];
        // 3,讀取數(shù)據(jù)
        while (open.read(bytes) != -1)
            System.out.println(Arrays.toString(bytes));

        open.close();
        fileSystem.close();
    }

    /**
     * 使用緩存流
     *
     * @throws IOException
     */
    @Test
    public void testReadData1() throws IOException {
        FSDataInputStream open = fileSystem.open(new Path("/win10激活.txt"));

        // 使用緩沖流會(huì)快點(diǎn)
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open, StandardCharsets.UTF_8));

        String line = "";

        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }

        bufferedReader.close();
        open.close();
        fileSystem.close();
    }

    /**
     * 指定偏移量來實(shí)現(xiàn)只讀部分內(nèi)容
     */
    @Test
    public void readSomeData() throws IOException {
        FSDataInputStream open = fileSystem.open(new Path("/win10激活.txt"));


        // 指定開始的index
        open.seek(14);

        // 指定讀的多少
        byte[] bytes = new byte[5];
        while (open.read(bytes) != -1)
            System.out.println(new String(bytes));

        open.close();
        fileSystem.close();

    }

    /**
     * 流方式寫數(shù)據(jù)
     * @throws IOException
     */
    @Test
    public void writeData() throws IOException {
        // 1,獲取輸出流
        FSDataOutputStream out = fileSystem.create(new Path("/win11.txt"), false);

        // 2,獲取需要寫的文件輸入流
        FileInputStream in = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\xixi.txt"));

        byte[] b = new byte[1024];
        int read = 0;
        while ((read = in.read(b)) != -1) {
            out.write(b, 0, read);
        }
        in.close();
        out.close();
        fileSystem.close();
    }

    /**
     * 直接寫字符串
     */
    @Test
    public void writeData1() throws IOException {
        // 1,創(chuàng)建輸出流
        FSDataOutputStream out = fileSystem.create(new Path("/aibaobao.txt"), false);
        // 2,寫數(shù)據(jù)
        out.write("wochaoaibaobao".getBytes());
        // 3,關(guān)閉流
        IOUtils.closeStream(out);
        fileSystem.close();
    }

    /**
     * IOUtils方式上傳
     *
     * @throws IOException
     */
    @Test
    public void putToHdfs() throws IOException {
        // 1,獲取輸入流
        FileInputStream in = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\xixi.txt"));
        // 2,獲取輸出流
        FSDataOutputStream out = fileSystem.create(new Path("/haddopPut.txt"), false);
        // 3,拷貝
        IOUtils.copyBytes(in, out, configuration);
        // 4,關(guān)閉流
        IOUtils.closeStream(in);
        IOUtils.closeStream(out);
        fileSystem.close();
    }

    /**
     * IOUtils方式下載
     * @throws IOException
     */
    @Test
    public void getFromHdfs() throws IOException {
        // 1,獲取輸入流
        FSDataInputStream open = fileSystem.open(new Path("/haddopPut.txt"));
        // 2,獲取輸出流
        FileOutputStream out = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\haddopPut.txt"));
        // 3,拷貝
        IOUtils.copyBytes(open, out, configuration);
        // 4,關(guān)閉流
        IOUtils.closeStream(open);
        IOUtils.closeStream(out);
        fileSystem.close();
    }
}

到此這篇關(guān)于java實(shí)現(xiàn)對(duì)Hadoop的操作的文章就介紹到這了,更多相關(guān)Java Hadoop內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis返回值(resultType&resultMap)的具體使用

    Mybatis返回值(resultType&resultMap)的具體使用

    返回值屬性有兩種設(shè)置,一種是resultType,一種是resultMap,本文主要介紹了Mybatis返回值(resultType&resultMap)的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Java如何讀取XML文件 具體實(shí)現(xiàn)

    Java如何讀取XML文件 具體實(shí)現(xiàn)

    這篇文章主要介紹了Java如何讀取XML文件 具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-12-12
  • 提升java開發(fā)效率工具lombok使用爭(zhēng)議

    提升java開發(fā)效率工具lombok使用爭(zhēng)議

    這篇文章主要介紹了提升java開發(fā)效率工具lombok使用爭(zhēng)議到底該不該使用的分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • SpringBoot通過token實(shí)現(xiàn)用戶互踢功能(具體實(shí)現(xiàn))

    SpringBoot通過token實(shí)現(xiàn)用戶互踢功能(具體實(shí)現(xiàn))

    所謂token,既用戶能夠在一定時(shí)間內(nèi)證明自己身份的一長(zhǎng)串字符串,這篇文章主要介紹了SpringBoot通過token實(shí)現(xiàn)用戶互踢功能,需要的朋友可以參考下
    2024-04-04
  • MyBatis使用注解開發(fā)實(shí)現(xiàn)步驟解析

    MyBatis使用注解開發(fā)實(shí)現(xiàn)步驟解析

    這篇文章主要介紹了MyBatis使用注解開發(fā)實(shí)現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java將Word文件轉(zhuǎn)為OFD文件

    Java將Word文件轉(zhuǎn)為OFD文件

    大家好,本篇文章主要講的是Java將Word文件轉(zhuǎn)為OFD文件,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Mybatis-plus插入后返回元素id的問題

    Mybatis-plus插入后返回元素id的問題

    這篇文章主要介紹了Mybatis-plus插入后返回元素id的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring HttpMessageConverter的作用及替換解析

    Spring HttpMessageConverter的作用及替換解析

    這篇文章主要介紹了Spring HttpMessageConverter的作用及替換解析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • springboot整合shiro的過程詳解

    springboot整合shiro的過程詳解

    Shiro 是一個(gè)強(qiáng)大的簡(jiǎn)單易用的 Java 安全框架,主要用來更便捷的 認(rèn)證,授權(quán),加密,會(huì)話管理,這篇文章給大家詳細(xì)介紹Shiro 工作原理及架構(gòu)圖,通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-10-10
  • 淺談Java中ThreadLocal引發(fā)的內(nèi)存泄漏

    淺談Java中ThreadLocal引發(fā)的內(nèi)存泄漏

    本文主要介紹了淺談Java中ThreadLocal引發(fā)的內(nèi)存泄漏,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論