Hadoop_JAVA操作HDFS

之前已经在虚拟机上安装好了hadoop,下面纪录下用java操作hdfs和中间遇到的一些问题,使用的是伪分布式模式

一 本地配置hadoop环境变量

此处默认已经具备jdk环境.
将hadoop的压缩包解压到任意目录

在环境变量中配置HADOOP_HOME变量,值为hadoop所在的目录

二、编写测试类

复制代码
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.junit.Before;
import org.junit.Test;

import java.net.URI;


public class JavaToHDFS {
    // 定义类变量:文件系统,用来链接hdfs
    FileSystem fs = null;

    //预处理,链接hdfs
    @Before
    public void init() throws Exception {
        fs = FileSystem.get(new URI("hdfs://192.168.10.102:9000"), new Configuration(), "root");
    }

    @Test
    public void mkdir() {
        System.out.println(fs);
    }
}
复制代码

测试会发现会报一个这样的错误

这是因为在本地运行hadoop程序需要依赖一些依赖库和工具类,需要工具的可以直接搜索你对应Hadoop版本的winutils.exe

下载完后吧他bin里面的文件全部拷贝到Hadoop的bin文件中

添加完后就可以正常运行了

 三、简单操作HDFS

复制代码
    
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.junit.Before;
import org.junit.Test;

import java.net.URI;


public class JavaToHDFS {
    // 定义类变量:文件系统,用来链接hdfs
    FileSystem fs = null;

    //预处理,链接hdfs
    @Before
    public void init() throws Exception {
        fs = FileSystem.get(new URI("hdfs://192.168.10.102:9000"), new Configuration(), "root");
    }

    @Test
    public void mkdir() {
        System.out.println(fs);
    }
}

//创建文件夹
    @Test
    public void MKDir() {
        boolean flag = false;
        try {
            flag = fs.mkdirs(new Path("/aaa"));
            System.out.println(flag);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //删除文件夹
    @Test
    public void testDel() {
        boolean flag = false;
        try {
            flag = fs.delete(new Path("/123.log"), true);
            System.out.println(flag);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //上传文件
    @Test
    public void testUpload() {
        try {
            InputStream in = new FileInputStream("D:\\Hadoop\\123.log");
            OutputStream out = fs.create(new Path("/123.log"));
            IOUtils.copyBytes(in, out, 1024, true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
复制代码

 

posted @   文明老人  阅读(149)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示