Hadoop Part 5 - HDFS Java 编程访问

文章导航

«返回课程汇总页面

Hadoop Part 5 - HDFS Java 编程访问

【版本】

当前版本号v20210430

版本修改说明
v20210430修正 HdfsUtils 类名错误
v20210404增加常见问题
v20210403初始化版本

【实验名称】

Hadoop Part 5 - HDFS Java 编程访问

【实验目的】

【实验环境】

【实验资源】

下载链接:https://pan.baidu.com/s/1ghde86wcK6pwg1fdSSWg0w
提取码:v3wv

【实验参考】

类 org.apache.hadoop.fs.FileSystem 的 参考文档

【实验步骤】

  1. 打开 Part 4 的 hadoopexp 项目。

  2. 在项目hadoop-exp\src\main\java下创建一个名为hadoop+你学号后4位.hdfs的包。注意替换为你的学号后4位。

  3. 在包下面新建一个 HdfsUtils 的类。该类包含了一个在HDFS上创建文件并写入内容的方法createFile。代码如下,注意替换为你的学号后4位。

package hadoop你学号后4位.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class HdfsUtils {

    /**
     * 在HDFS上创建文件并写入内容
     * @param conf HDFS的配置
     * @param hdfsFilePath HDFS创建的文件的路径
     * @param content 写入文件的内容
     * @param overwrite true表示覆盖原文件,false表示不覆盖
     */
    public static boolean createFile(Configuration conf,URI uri,String hdfsFilePath,String content,boolean overwrite) {
        FileSystem fs=null;
        FSDataOutputStream os=null;
        boolean rs=false;
        try {
            // 指定用户名 , 获取 FileSystem 对象
            fs = FileSystem.get(uri, conf, "hadoop");
            //定义文件路径
            Path dfs = new Path(hdfsFilePath);
            os = fs.create(dfs, overwrite);
            //往文件写入信息
            os.writeBytes(content);
            //成功创建文件,设置为true
            rs=true;
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try {
                if(os!=null) {
                    // 关闭流
                    os.close();
                }
                if(fs!=null) {
                    // 不需要再操作 FileSystem 了,关闭
                    fs.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return rs;
    }
}
  1. 在项目hadoop-exp\src\test\java下创建一个名为hadoop+你学号后4位.hdfs的包。注意替换为你的学号后4位。

  2. 在包下面新建一个 HdfsUtilsTest 的类,用于单元测试。代码如下,注意替换为你的学号后4位。此测试用例主要目的是在 HDFS 上创建一个文件,并把 “hello” 写入文件。

package hadoop替换为你学号后4位.hdfs;

import hadoop替换为你学号后4位.hdfs.HdfsUtils;
import org.apache.hadoop.conf.Configuration;
import org.junit.Test;

import java.net.URI;

public class HdfsUtilsTest {
    @Test
    public void testCreate() {
        Configuration conf=new Configuration();
        boolean rs=false;
        //创建的文件路径
        String filePath="/替换为你学号后4位/test.txt";
        String content="hello";
        try {
            URI uri = new URI("hdfs://10.0.0.71:8020");
            rs= HdfsUtils.createFile(conf, uri, filePath, content, true);
        }catch(Exception e){
            e.printStackTrace();
        }
        if(rs){
            System.out.println("Create successfully!");
        }else{
            System.out.println("Create fail!");
        }
    }
}
  1. 复制文件 hadoop.dll 到 C:\Windows\System32 下。

  2. 启动虚拟机的 Hadoop。

  3. 运行HdfsUtilsTest。查看 IDEA 的控制台输出结果是否创建成功。

  4. SSH 登录 NodeA,运行以下命令查看创建文件的内容输出。是否和创建的文件内容一致。注意替换为你的学号后4位。

hdfs dfs -cat /替换为你学号后4位/test.txt
  1. 参考以上代码和【实验参考】给出的 API 文档,完成以下编程要求

##【常见问题】

报错:(null) entry in command string

这是缺少文件hadoop.dll文件 1、下载hadoop.dll文件 2、把文件放在:\windows\system32目录下