Junit封装执行mkdir报错

来源:3-18 HDFS API编程之jUnit封装

weixin_慕神5384537

2021-04-19

前一章节
通过
FileSystem fileSystem=FileSystem.get(new URI(“hdfs://...:8020”),configuration,“hadoop”);
成功链接阿里云并创建目录
图片描述

Junit这边也先删除了该目录之后再执行mkdir,报错
图片描述

下面代码部分地址正确,

public class HDFSAPP {

//阿里云服务器公网地址  *.*.*.*
public static final String HDFS_PATH= "hdfs://*.*.*.*:8020";
FileSystem fileSystem=null;
Configuration configuration=null;


@Before
public void setUp()throws Exception{
    System.out.println("__________________setUp_______________________");
    Configuration configuration=new Configuration();
    /**
     * 构造一个访问指定HDFS系统的客户端对象
     * 第一个参数:HDFS的URI
     * 第二个参数:客户端指定的配置参数
     * 第三个参数:客户端的身份,即用户名
     */
    FileSystem fileSystem=FileSystem.get(new URI(HDFS_PATH),configuration,"hadoop");


}

@Test
public void mkdir() throws Exception {
    fileSystem.mkdirs(new Path("/hdfsapi/test"));
}


@After
public void tearDown(){
    configuration=null;
    fileSystem=null;
    System.out.println("__________________tearDown______________________________");
}

改用虚拟机,前一张不用junit能过
这一章节用了junit报错了

图片描述

package com.immoc.bigdata.hadoop.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.net.URI;

/**

  • 使用java API操作HDFS文件系统

  • 关键点:

  • 1)创建Configuration

  • 2)获取FileSystem

  • 3)你的HDFS API操作
    */
    public class HDFSAPP {

    //阿里云服务器公网地址
    //虚拟机IP192.168.1.127
    public static final String HDFS_PATH = “hdfs://hadoop000:8020”;
    //public static final String HDFS_PATH = “hdfs://192.168.1.127:8020”;

    FileSystem fileSystem=null;
    Configuration configuration=null;

    @Before
    public void setUp()throws Exception{
    System.out.println(“setUp_____”);
    Configuration configuration=new Configuration();
    //configuration.set(“dfs.client.use.datanode.hostname”, “true”);
    /**
    * 构造一个访问指定HDFS系统的客户端对象
    * 第一个参数:HDFS的URI
    * 第二个参数:客户端指定的配置参数
    * 第三个参数:客户端的身份,即用户名
    */
    FileSystem fileSystem=FileSystem.get(new URI(HDFS_PATH),configuration,“hadoop”);

    }

    @Test
    public void mkdir() throws Exception {
    fileSystem.mkdirs(new Path("/hdfsapi/test"));
    }

    @After
    public void tearDown(){
    configuration=null;
    fileSystem=null;
    System.out.println(“tearDown_”);
    }

// public static void main(String[] args) throws Exception{
//
// //hadoop2017:8020
// //虚拟机IP192.168.1.127
// Configuration configuration=new Configuration();
// FileSystem fileSystem=FileSystem.get(new URI(“hdfs://192.168.1.127:8020”),configuration,“hadoop”);

//
//
//
// Path path=new Path("/hdfsapi/test");
// boolean result=fileSystem.mkdirs(path);
//
// System.out.println(result);
// }
}

写回答

1回答

Michael_PK

2021-04-19

云主机这个代码还不够,需要额外的几个参数设置。

你可以到问答区搜索:dfs.datanode.use.datanode.hostname  这关键字,有整理好的答案

0
4
Michael_PK
回复
weixin_慕神5384537
你的setup中FileSystem fileSystem = ,,, 这个是你自己new出来的,没有给上面的赋值呢,导致NPE
2021-04-20
共4条回复

Hadoop 系统入门+核心精讲

从Hadoop核心技术入手,掌握数据处理中ETL应用,轻松进军大数据

2413 学习 · 909 问题

查看课程