Hadoop之HDFS的使用

目录

  • HDFS介绍
  • HDFS基础操作
  • Java操作HDFS

HDFS介绍

  • HDFS 是一种允许文件通过网络在多台主机上分享的文件系统,可以让多台机器上的多个用户分享文件和存储空间。
  • 分布式文件管理系统有很多,HDFS 只是其中一种实现
  • 注意:HDFS 不适合存储小文件(几KB或几M的小文件)

HDFS基础操作

  1. 操作格式
    hdfs dfs -xxx schema: // authority / path
    -xxx : 命令(读、写、创建、查看等)
    schema :hdfs
    authority :地址+端口(bigdata01:9000)
    path :路径

  2. 上传文件

# 上传 NOTICE.txt 文件至根路径
hdfs dfs -put NOTICE.txt hdfs://bigdata01:9000/
  1. 查看指定路径信息
# 查看根目录下信息
hdfs dfs -ls hdfs://bigdata01:9000/

Hadoop之HDFS的使用

# 查看根目录多级文件及目录信息
hdfs dfs -ls -R hdfs://bigdata01:9000/

Hadoop之HDFS的使用
4. 查看 HDFS 文件内容

# 查看 NOTICE.txt 文件内容
hdfs dfs -cat hdfs://bigdata01:9000/NOTICE.txt
  1. 下载文件到本地
# 下载 NOTICE.txt 文件至本地当前目录下
hdfs dfs -get hdfs://bigdata01:9000/NOTICE.txt .
# 下载 NOTICE.txt 文件至本地上一层目录下
hdfs dfs -get hdfs://bigdata01:9000/NOTICE.txt ../
# 下载 NOTICE.txt 文件至本地当前目录下并指定新文件名
hdfs dfs -get hdfs://bigdata01:9000/NOTICE.txt NOTICE.txt.bak

Hadoop之HDFS的使用
6. 创建目录

# 在根目录下创建 test 目录
hdfs dfs -mkdir hdfs://bigdata01:9000/test
# 递归创建多级目录
hdfs dfs -mkdir -p hdfs://bigdata01:9000/abc/xyz
  1. 删除文件及目录
# 删除 NOTICE.txt 文件
hdfs dfs -rm hdfs://bigdata01:9000/NOTICE.txt
# 删除 NOTICE.txt 文件
hdfs dfs -rm -r hdfs://bigdata01:9000/abc

Hadoop之HDFS的使用 8. 统计目录下文件数量

# 统计根目录下文件数量
hdfs dfs -ls hdfs://bigdata01:9000/

Hadoop之HDFS的使用9. 统计目录下文件大小

# 统计根目录下文件大小
hdfs dfs -ls hdfs://bigdata01:9000/ | grep / | awk -F ' ' '{print $8,$5}'

Hadoop之HDFS的使用

Java操作HDFS

  • 由于操作 HDFS 会进行用户验证,配置不进行验证
# 停止服务
stop-all.sh 
# 打开配置文件 hdfs-site.xml
vi /usr/local/hadoop-3.2.0/etc/hadoop/hdfs-site.xml
# 添加如下属性
<property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
</property>
# 启动服务
start-all.sh
# 查看进程是否正确
jps
  • Maven 项目进入依赖
<!-- 引入 hadoop-3.2.0 依赖-->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.2.0</version>
</dependency>
  • 写如下测试代码
package com.july.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 java.io.*;

/**
 * @Auther: july
 * @Date: 2022-02-19 - 18:29 
 * @Description: 对 hadoop3.2.0 HDFS 上传文件、下载文件、删除文件操作
 * @version: 1.0
 */
public class HdfsDemo {

    public static void main(String[] args) throws IOException {

        // 创建一个配置对象
        Configuration conf = new Configuration();
        // 指定 HDFS 地址
        conf.set("fs.defaultFS", "hdfs://192.168.30.128:9000");
        // 获取操作 HDFS 的对象
        FileSystem fileSystem = FileSystem.get(conf);

        // 上传文件
        //new HdfsDemo().uploadFile(fileSystem);

        // 下载文件
        //new HdfsDemo().downloadFile(fileSystem);

        // 删除文件或目录
        new HdfsDemo().deleteFile(fileSystem);
    }

    // 删除文件
    public void deleteFile(FileSystem fileSystem) {

        try {
            // 删除指定的文件或目录,当删除目录时第二个参数设置为 true 为递归删除
            boolean result = fileSystem.delete(new Path("/test.txt"), true);

            System.out.println( result ? "删除成功" : "删除失败");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 下载文件
    public void downloadFile(FileSystem fileSystem) {
        OutputStream outputStream;
        FSDataInputStream fsDataInputStream;
        try {
            // 本地文件输出流
            outputStream = new FileOutputStream("D:\\NOTICE.txt");

            // 获取 HDFS 文件系统的输入流
            fsDataInputStream = fileSystem.open(new Path("/NOTICE.txt"));

            // 下载文件,并自动关闭流
            IOUtils.copyBytes(fsDataInputStream, outputStream, 1024, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 上传文件
    public void uploadFile(FileSystem fileSystem) {

        InputStream inputStream;
        FSDataOutputStream fsDataOutputStream;
        try {
            // 本地文件输入流
            inputStream = new FileInputStream("C:\\test.log");

            // 获取 HDFS 文件系统的输出流
            fsDataOutputStream = fileSystem.create(new Path("/test.log"));

            // 上传文件,并自动关闭流
            IOUtils.copyBytes(inputStream, fsDataOutputStream, 1024, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
上一篇:大数据技术【10】


下一篇:HDFS简化版Maintenance state实现