Hadoop入门 Java api操作hdfs

2021-06-22 10:25:41 浏览数 (1)

新建项目

  • File->New->Module->Maven,选择quickstart
  • 设置文件名和文件地址
  • 点击完成
  • 项目目录
  • 配置pom.xml
    • 添加hadoop依赖包
代码语言:html复制
<!--添加hadoop依赖-->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>${hadoop.version}</version>
</dependency>
代码语言:html复制
<!--全局定义hadoop的版本-->
<hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
代码语言:html复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="
  • 点击图中标志
  • 配置好的Maven目录

测试hadoop是否安装成功

  • AppTest文件中写入以下代码
代码语言:java复制
package com.syh;

import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.apache.hadoop.fs.*;

/**
 * Unit test for simple App.
 */
public class AppTest 
{
    /**
     * Rigorous Test :-)
     */
    @Test
    public void shouldAnswerWithTrue()
    {
        assertTrue( true );
    }

    @Test
    public void testHadoop() {
        FileSystem fileSystem = null;
    }
}
  • 按住Ctrl点击FilrSystem可以看到跳转到hadoop目录下,说明安装成功了

连接hdfs

  • 新建java文件
  • HDFSApp文件中写入以下代码,在hadoop中创建文件夹
代码语言:java复制
package com.syh.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;

public class HDFSApp {
    Configuration configuration = null;
    FileSystem fileSystem = null;
    // 配置路径(ip地址)
    public static final String HDFS_PATH = "hdfs://192.168.207.128:8020";
    // 测试(新建文件夹)
    @Test
    public void mkdir() throws Exception {
        fileSystem.mkdirs(new Path("/emperorlawd/test"));
    }

    // Java 连接hdfs 需要先建立一个连接
    // 测试方法执行之前要执行的操作
    @Before
    public void setUp() throws Exception {
        System.out.println("开始建立与HDFS的连接");
        configuration = new Configuration();
        fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, "hadoop");
    }

    // 测试之后要执行的代码
    @After
    public void tearDown() {
        configuration = null;
        fileSystem = null;
        System.out.println("关闭与HDFS的连接");
    }
}
  • 运行成功的效果

创建文件

  • HDFSApp文件中加入以下代码
代码语言:java复制
// 创建文件
    @Test
    public void create() throws Exception {
        Path path = new Path("/emperorlawd/test/hello.txt");
        FSDataOutputStream outputStream = fileSystem.create(path);
        outputStream.write("hello hadoop".getBytes());
        outputStream.flush();
        outputStream.close();
    }
  • 运行create()

重命名文件

  • HDFSApp文件中加入以下代码
代码语言:java复制
// 重命名文件
    @Test
    public void rename() throws Exception {
        Path oldPath = new Path("/emperorlawd/test/hello.txt");
        Path newPath = new Path("/emperorlawd/test/rehello.txt");
        fileSystem.rename(oldPath, newPath);
    }
  • 运行rename()

查看文件

  • HDFSApp文件中加入以下代码
代码语言:java复制
// 查看文件
    @Test
    public void cat() throws Exception {
        Path path = new Path("/emperorlawd/test/rehello.txt");
        FSDataInputStream inputStream = fileSystem.open(path);
        IOUtils.copyBytes(inputStream, System.out, 1024);
        inputStream.close();
    }
  • 运行cat()

上传文件

  • HDFSApp文件中加入以下代码
代码语言:java复制
// 上传文件
    @Test
    public void upload() throws Exception {
        Path localPath = new Path("cifar-10-python.tar.gz");
        Path hdfsPath = new Path("/");
        fileSystem.copyFromLocalFile(localPath, hdfsPath);
    }
  • 运行upload()

下载文件

  • HDFSApp文件中加入以下代码
代码语言:java复制
// 下载文件
    @Test
    public void download() throws Exception {
        Path hdfsPath = new Path("/hadoop-2.6.0-cdh5.7.0.tar.gz");
        Path localPath = new Path("./down/hadoop-2.6.0-cdh5.7.0.tar.gz");
        fileSystem.copyToLocalFile(false, hdfsPath, localPath, true);
    }
  • 运行download()

0 人点赞