实现Windows与HDFS之间的传输

hadoop2.6.0提取码: kgd1

目录

  • 一、本地连接hdfs配置
  • 二、准备
  • 三、JAVA编写Demo(创建、上传、下载、删除)

一、本地连接hdfs配置

  1. 把hadoop2.6.0的tar.gz解压到windows本地目录
  2. hadoop.dll,winutils.exe两个文件放到解压后hadoop的bin目录下
  3. hadoop.dll在C:\Windows\System32里面再放一份
  4. 在C:\Windows\System32\drivers\etc\hosts中添加节点

在这里插入图片描述

  1. 配置环境变量HADOOP_HOME为解压后hadoop2.6.0的路径

在这里插入图片描述

  1. Path变量中入%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin

在这里插入图片描述

二、准备

1.安装完hadoop并启动
Hadoop安装与配置(伪分布式、使用VM)

2.使用maven导jar包,实现Java与Hadoop连接
https://mvnrepository.com/search?q=hadoop
在这里插入图片描述

三、JAVA编写Demo(创建、上传、下载、删除)

  • 编写测试类
package cn.kgc.hdfs;

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


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

public class HdfsClient {
    //创建一个文件夹
    @Test
    public void testMKdir() throws Exception {
        //1.创建配置文件
        Configuration conf=new Configuration();
        //2.获取文件系统
        FileSystem fs=FileSystem.get(new URI("hdfs://hostname110:9000"),conf,"root");
        //3. 调用API操作
        fs.mkdirs(new Path("/hdfs"));
        //4.关闭资源
        fs.close();
    }
    //window上传文件到hdfs
    @Test
    public void testCopyFromLocalFile() throws Exception {
        //1.创建配置文件
        Configuration conf=new Configuration();
        //2.获取文件系统
        FileSystem fs=FileSystem.get(new URI("hdfs://hostname110:9000"),conf,"root");
        //3. 调用API操作
        fs.copyFromLocalFile(new Path("F:\\Program File (x86)\\Software\\Linux\\a.txt"),new Path("/hdfs/b.txt"));
        //4.关闭资源
        fs.close();
    }
    //从hdfs下载文件到windows
    @Test
    public void testCopyToLocalFile() throws Exception {
        //1.创建配置文件
        Configuration conf=new Configuration();
        //2.获取文件系统
        FileSystem fs=FileSystem.get(new URI("hdfs://hostname110:9000"),conf,"root");
        //3. 调用API操作(如果不出现空指针异常,则delSrc,RawLocalFileSystem 为默认,不需要配置)
        fs.copyToLocalFile(false,new Path("/hdfs/b.txt"),new Path("F:\\Program File (x86)\\Software\\Linux\\"),true);
        //4.关闭资源
        fs.close();
    }

    //删除文件
    @Test
    public void testDelete() throws Exception {
        //1.创建配置文件
        Configuration conf=new Configuration();
        //2.获取文件系统
        FileSystem fs=FileSystem.get(new URI("hdfs://hostname110:9000"),conf,"root");
        //3. 调用API操作
        //b:代表是否递归删除
        fs.delete(new Path("/hdfs"),true);
        //4.关闭资源
        fs.close();
    }
}
  • 每运行一个可通过网页输入 http://192.168.19.110:50070 查看(也可通过hdfs命令查看)

实现Windows与HDFS之间的传输_第1张图片

注:
copyToLocalFile方法第一个参数和最后一个解析:

  • 第一个参数(delSrc)控制下载完成后是否删除源文件,默认是 true,即删除;
  • 最后一个参数表示是否将 RawLocalFileSystem 用作本地文件系统;
  • RawLocalFileSystem 默认为 false,通常情况下可以不设置,但如果你在执行时候抛出 NullPointerException 异常,则代表你的文件系统与程序可能存在不兼容的情况 (window 下常见);
  • 此时可以将 delSrc设置为false,RawLocalFileSystem 设置为 true。

你可能感兴趣的:(实现Windows与HDFS之间的传输)