dfs.replication空指针异常

来源:3-21 HDFS API编程之副本系数深度剖析

weixin_慕神5384537

2021-04-20

//副本测试
@Test
public void testReplication(){
    //System.out.println(configuration.get("dfs.replication"));
    //configuration.get("dfs.replication");
    System.out.println(configuration.get("dfs.replication"));
}

报错,空指针异常

图片描述

我好像没有重新声明Configuration啊,为什么会空呢

package com.immoc.bigdata.hadoop.hdfs;

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.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.replication","1");
    
     //configuration.set("dfs.client.use.datanode.hostname", "true");
     /**
      * 构造一个访问指定HDFS系统的客户端对象
      * 第一个参数:HDFS的URI
      * 第二个参数:客户端指定的配置参数
      * 第三个参数:客户端的身份,即用户名
      */
    
     fileSystem=FileSystem.get(new URI(HDFS_PATH),configuration,"hadoop");
    

    }

    //创建HDFS文件夹
    @Test
    public void mkdir() throws Exception {
    Path path=new Path("/hdfsapi/test");
    fileSystem.mkdirs(path);
    //fileSystem.mkdirs(new Path("/hdfsapi/test"));
    }

    //查看hdfs内容
    @Test
    public void text()throws Exception{
    FSDataInputStream in =fileSystem.open(new Path("/cdh_version.properties"));
    IOUtils.copyBytes(in,System.out,1024);
    }

    //创建文件
    @Test
    public void create()throws Exception{
    //FSDataOutputStream out =fileSystem.create(new Path("/hdfsapi/test/a.txt"));
    FSDataOutputStream out =fileSystem.create(new Path("/hdfsapi/test/b.txt"));
    out.writeUTF(" hello PK:replication 1");
    out.flush();
    out.close();
    //hadoop fs -cat /hdfsapi/test/a.txt
    }

    //副本测试
    @Test
    public void testReplication(){
    //System.out.println(configuration.get(“dfs.replication”));
    //configuration.get(“dfs.replication”);
    System.out.println(configuration.get(“dfs.replication”));
    }

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

    //public static final String HDFS_PATH = “hdfs://hadoop000:8020”;
    // 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_PATH”),configuration,“hadoop”);
    // 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-20

这不是跟你原来的问题一个的么,configuration 你在哪定义的? 代码写完和git上提供的代码做个对比呢

0
2
weixin_慕神5384537
明白了,set up里面又声明了一遍=。= 错误部分: Configuration configuration=new Configuration(); 修改后: configuration=new Configuration();
2021-04-20
共2条回复

Hadoop 系统入门+核心精讲

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

2397 学习 · 902 问题

查看课程