美文网首页
HADOOP大数据之HDFS基础与应用开发

HADOOP大数据之HDFS基础与应用开发

作者: 奋斗的韭菜汪 | 来源:发表于2023-02-01 15:35 被阅读0次

一、HDFS分布式文件存储

如果让你设计一款分布式文件存储需要考虑哪些问题?

  • 数据上传下载的效率
  • 数据的安全
  • 用户操作数据的体验

二、HDFS操作文件的方式

1)、shell命令,2)、java api

三、企业中常见的存储架构DAS、NAS、SAN对比

文件存储架构.jpg

四、传统文件系统存在的弊端

  • 性能低
  • 可扩展性差
  • 无法支撑高效率的计算分析

五、分布式文件存储需要解决的问题

  • 如何解决海量数据存的下的问题---- 分布式文件存储
  • 如何解决海量数据文件查询便捷----元数据记录
  • 如何解决大文件传输效率慢----分块存储
  • 如何解决硬件故障数据丢失----副本机制
  • 如何解决用户查询视角统一规整----抽象目录树结构

六、HDFS设计目标

  • 硬件故障是常态----故障检测和自动快速恢复(HDFS的核心架构目标)
  • HDFS上的应用主要是以流式读取数据----用于批处理(不注重考虑实时性要求)
  • 文件大小是GB到TB的级别
  • HDFS应对文件要求的是write-one-read-many访问模型----(文件写入之后不再修改)
  • 移动计算的代价比移动数据的代价低(数据不动程序动)
  • HDFS被设计为可从一个平台轻松移植到另一个平台

七、HDFS应用场景

适合场景:大文件、数据流式访问、一次写入多次读取、低成本部署,廉价PC、高容错
不适合场景:小文件、数据交互式访问、频繁任意修改、低延迟处理

八、HDFS客户端核心类

  • Configuration 配置类
  • FileSystem 文件系统对象基类
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.io.IOException;

public class HDFSClientTest {

    private static Configuration conf = null;
    private static FileSystem fs = null;

    /**
     * 初始化,与HDFS集群建立连接
     * @throws IOException
     */
    @Before
    public void connect2HDFS() throws IOException {
        //设置客户端身份,以具备权限操作HDFS,不设置的情况下默认是当前机器的登录用户权限
        System.setProperty("HADOOP_USER_NAME", "root");

        //创建配置对象实例
        conf = new Configuration();
        //设置操作的文件系统是HDFS,并且制定HDFS的操作地址
        conf.set("fs.defaultFS","hadf://node1.itcast.cn:8020");
        //创建FileSystem对象实例
        fs = FileSystem.get(conf);
    }

    /**
     * HDFS创建文件夹
     */
    @Test
    public void mkdir() throws IOException {
        //首先判断文件夹是否存在
        if(!fs.exists(new Path("/ichint"))){
            fs.mkdirs(new Path("/ichint"));
        }
    }

    /**
     * 上传文件
     */
    @Test
    public void putFileToHDFS() throws IOException {
        //创建本地文件路径
        Path src = new Path("D:\\ichint\\scala\1.txt");
        //HDFS文件路径
        Path dst = new Path("/ichint/1.txt");
        //上传文件
        fs.copyFromLocalFile(src, dst);
    }

    /**
     * 下载文件
     */
    @Test
    public void getFileFromHDFS() throws IOException {
        //创建本地文件路径
        Path dst = new Path("D:\\ichint\\scala\1.txt");
        //HDFS文件路径
        Path src = new Path("/ichint/1.txt");
        //下载文件
        fs.copyToLocalFile(src,dst);
    }

    /**
     * 关闭客户端和HDFS的连接
     * @throws IOException
     */
    @After
    public void close(){
        //首先判断文件系统实例是否为null,如果为null,进行关闭
        if (fs != null) {
            try {
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

image.png
image.png
大数据HDFS文件上传原理.jpg

九、LibHDFS客户端操作HDFS

相关文章

网友评论

      本文标题:HADOOP大数据之HDFS基础与应用开发

      本文链接:https://www.haomeiwen.com/subject/gqpihdtx.html