Hadoop学习-编程实现DFS文件操作

一、DFS

DFS是一个分布式文件存储系统。

二、DFS常用操作命令

  • 创建目录
    hadoop dfs -mkdir /home

  • 上传文件或目录到hdfs
    hadoop dfs -put hello /
    hadoop dfs -put hellodir/ /

  • 查看目录
    hadoop dfs -ls /

  • 创建一个空文件
    hadoop dfs -touchz /361way
  • 删除一个文件
    hadoop dfs -rm /361way

  • 删除一个目录
    hadoop dfs -rmr /home

  • 重命名
    hadoop dfs -mv /hello1 /hello2

  • 查看文件
    hadoop dfs -cat /hello

  • 将制定目录下的所有内容merge成一个文件,下载到本地
    hadoop dfs -getmerge /hellodir wa

  • 使用du文件和目录大小
    hadoop dfs -du /

  • 将目录拷贝到本地
    hadoop dfs -copyToLocal /home localdir

  • 查看dfs的情况
    hadoop dfsadmin -report

三、DFS常用类

Java本地文件操作类和DFS文件操作类对比:




















































操作说明操作本地文件操作DFS文件
主要命名空间java.io.File
java.io.FileInputStream
java.io.FileOutputStream
org.apache.hadoop.conf.Configuration
org.apache.hadoop.fs.FileSystem
org.apache.hadoop.fs.Path
org.apache.hadoop.fs.FSDataInputStream;
org.apache.hadoop.fs.FSDataOutputStream

初使化对象new File(路径);Configuration
FileSystem hdfs
创建文件File.createNewFile();FSDataOutputStream = hdfs.create(path)
FSDataOutputStream.write(
buffer, 0, buffer.length);
创建文件夹File.mkdir();hdfs.mkdirs(Path);
读文件new FileInputStream(); FileInputStream.read(buffer)FSDataInputStream = hdfs.open(path);
FSDataInputStream.read(buffer);
写文件FileOutputStream.write(
buffer, 0, buffer.length);
FSDataOutputStream = hdfs.append(path)
FSDataOutputStream.write(
buffer, 0, buffer.length);
删除文件(夹)File.delete()FileSystem.delete(Path)
列出文件夹内容File.list();FileSystem.listStatus()
重命名文件(夹)File.renameTo(File)FileSystem.rename(Path, Path)

.

四、编程实现

3.1 创建工程

过程略。

3.2 编写写文件代码

package hdp.test;

import java.io.IOException;

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

public class UploadFileToDFS {


    // 往DFS文件系统中的指定文件写入指定内容 
    public static void main(String[] args) {
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://localhost:9000");

        try { 
            FileSystem hdfs = FileSystem.get(conf);
            // 目的文件,如果不存在则创建
            Path path = new Path("/user/wcinput/README1.txt"); 
            FSDataOutputStream outputStream = hdfs.create(path);

            // 写入目的文件的内容
            byte[] buffer = " These are new content of this file!".getBytes();
            // 开始写入
            outputStream.write(buffer, 0, buffer.length);
            outputStream.flush();
            outputStream.close();
            System.out.println("Create OK");
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}

编译,运行。
在DFS文件系统中,我们会看到新的文件newFile.txt,如下图示:
这里写图片描述
查看文件newFile.txt内容:
这里写图片描述
正是我们在代码中写入的内容。

扩展该程序,可以上传文件功能。

3.3 读文件

package hdp.test;

import java.io.IOException;

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;

public class ReadFileFromDFS {

    // 从DFS文件系统中读取指定文件  
    public static void main(String[] args) {
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://localhost:9000");

        int size = 0;
        byte[] buffer = new byte[128];
        StringBuffer stringBuffer = new StringBuffer();

        try { 
            FileSystem hdfs = FileSystem.get(conf);
            // 从DFS读取文件
            Path pathRead = new Path("/user/wcinput/newFile.txt"); 
            FSDataInputStream fileInputStream = hdfs.open(pathRead); 

            // 开始读取
            while ((size = fileInputStream.read(buffer)) != 0 && size != -1) {
                stringBuffer.append(new String(buffer, 0, size));
            }
            fileInputStream.close();
            System.out.println("" + stringBuffer);
            System.out.println("Read successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}

编译,运行。 查看打印:

 log4j:WARN No appenders could be found for logger (org.apache.hadoop.conf.Configuration.deprecation).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
 **These are new content of this file!**
Read successfully!

扩展该程序,可以下载文件功能。

3.4 删除文件

package hdp.test;

import java.io.IOException;

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

public class DeleteFileDFS {



    // 从DFS文件系统中删除指定文件  
    public static void main(String[] args) {
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://localhost:9000");


        try { 
            FileSystem hdfs = FileSystem.get(conf);
            Path path = new Path("/user/wcinput/newFile.txt"); 
            hdfs.delete(path);

            hdfs.close();
            System.out.println("Delete file successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

编译,运行。

刷新DFS文件系统,发现:newFile.txt这个文件不见了。说明删除成功!

四、结尾

本文讲述了如何用java代码来实现DFS文件操作(读、写、删),实现其他操作也是类似的道理。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oyezitan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值