我是靠谱客的博主 兴奋紫菜,最近开发中收集的这篇文章主要介绍【博学谷学习记录】超强总结,用心分享 | 狂野大数据HDFS的JavaAPI操作~个人学习&复习记录~PART-03,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、配置

需要先在Windows配置对应版本的hadoop环境

二、涉及的主要类

Configuration:该类的对象封装了客户端或服务器的配置

FileSystem:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作,通过FileSystem的静态方法get获得该对象

FileSystem fs = FileSystem.get(conf);

三、

在使用Java来操作HDFS时,第一步必须获取HDFS的FileSystem对象,该对象代表整个HDFS系统,有个这个对象,就可以对HDFS的上的文件进行增删改查

package pack01;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet;
import org.junit.Before;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;

public class Demo01HDFS {

    private FileSystem filesystem;

    //获取filesystem对象
    @Before
    public void getFileSystem() throws URISyntaxException, IOException, InterruptedException {
        filesystem = FileSystem.get(new URI("hdfs://node1:8020"), new Configuration(), "root");
        //System.out.println("fileSystem:"+fileSystem);
    }


    //文件的删除
    @Test
    public void deleteFile() throws IOException {
        boolean delete = filesystem.delete(new Path("/dir"), true);
    }


    //小文件合并
    @Test
    public void appendFile() throws IOException {
        //获取HDFS大文件输出流
        FSDataOutputStream outputStream = filesystem.create(new Path("/big.txt"));
        //获取本地每一个文件输入流
        File file = new File("E:\train");
        File[] files = file.listFiles();
        for (File file1 : files) {
            FileInputStream inputStream = new FileInputStream(file1);

            IOUtils.copy(inputStream,outputStream);
            inputStream.close();
        }
        outputStream.close();
    }

    //文件上传
    @Test
    public void upload() throws IOException {
        filesystem.copyFromLocalFile(new Path("E:\train\copyFromlocal.txt"),new Path("/dir"));
    }


    //文件下载-方式2
    @Test
    public void download2() throws IOException {
        filesystem.copyToLocalFile(new Path("/dir/2.txt"),new Path("E:\train\222.txt"));
    }



    //文件下载-方式1
    @Test
    public void downlowd1() throws IOException {
        //1:获取HDFS文件的输入流
        FSDataInputStream inputStream = filesystem.open(new Path("/dir/1.txt"));
        //2:获取本地文件的输出流
        FileOutputStream outputStream = new FileOutputStream("E:\train\111.txt");
        //3:实现文件的复制
        IOUtils.copy(inputStream,outputStream);
        //4:关流
        outputStream.close();
        inputStream.close();
    }
    //递归创建目录
    @Test
    public void mkdir() throws IOException {
        boolean mkdirs = filesystem.mkdirs(new Path("/xxx/yyy/zzz"));

    }

    //遍历目录
    @Test
    public void listFiles() throws IOException {
        RemoteIterator<LocatedFileStatus> iterator = filesystem.listFiles(new Path("/"), true);
        while (iterator.hasNext()) {
            LocatedFileStatus fileStatus = iterator.next();
//            System.out.println(fileStatus.getPath().getName());  //获取文件名
            System.out.println(fileStatus.getPath().toString()); //获取文件绝对路径

            long blockSize = fileStatus.getBlockSize(); //获取block大小
//            System.out.println(blockSize/1024/1024 + "M");

            short replication = fileStatus.getReplication();  //获取文件副本数
//            System.out.println(replication);

            BlockLocation[] blockLocations = fileStatus.getBlockLocations();  //获取block的位置数组
//            System.out.println(blockLocations.length);  //获取文件block数

            for (BlockLocation blockLocation : blockLocations) {
//                String[] names = blockLocation.getNames();  //获取每个block副本所在主机的ip地址
//                System.out.println(Arrays.toString(names));
                String[] hosts = blockLocation.getHosts();  //获取每个副本所在的主机名
                System.out.println(Arrays.toString(hosts));
            }

        }

    }
}

最后

以上就是兴奋紫菜为你收集整理的【博学谷学习记录】超强总结,用心分享 | 狂野大数据HDFS的JavaAPI操作~个人学习&复习记录~PART-03的全部内容,希望文章能够帮你解决【博学谷学习记录】超强总结,用心分享 | 狂野大数据HDFS的JavaAPI操作~个人学习&复习记录~PART-03所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部