3.1 HDFS简介

分布式文件系统(Distributed File System,DFS): 它允许文件通过网络连接的方式,在多台主机上进行多副本存储。

谷歌文件系统(GFS

Hadoop分布式文件系统(HDFS

小tip:HDFS是GFS的开源实现

HDFS要实现以下几个目标:

1 超大文件存储

2 流式数据访问

3 简单的文件模型

4 兼容廉价的硬件

HDFS特殊的设计,导致了一定的局限性:

1 不适合低延迟数据访问

2 大量小文件无法高效存储

3 不支持多用户写入及任意修改文件

3.2 HDFS体系架构

分布式文件系统在物理结构上是由计算机集群中的多个节点构成,分为两类:

主节点(Master Node),也称名称节点(Name Node),负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系。

小tip:名称节点保存了两个核心的数据结构,即命名空间镜像文件(FsImage)用于维护文件系统树以及文件系统树中所有的文件和文件夹的元数据和编辑日志(EditLog)记录了所有针对文件的创建、删除、重命名等操作

从节点(Slave Node),也称数据节点(Data Node),负责数据的存储和读取。

:默认的一个块大小是64MB。在HDFS中文件会被拆分成多个块,每个块作为独立的单元进行存储。

HDFS采用抽象的数据块概念的优点如下:

        ● 支持大规模文件存储:由于一个大规模文件被分拆成若干个数据块,不同的数据块分发到不同的节点上进行存储,因此可存储文件的大小不会受到单个节点的存储容量限制;

        ● 简化系统设计:因为数据块大小是固定的,可以很容易计算出一个节点可存储的数据块数量;其次元数据不需要和数据块一起存储,可以由其他系统负责管理元数据;

        ● 适合数据备份:每个数据块都可在多个节点上进行冗余存储,大大提高了系统的容错性和可用性。

• 数据节点是文件系统中真正存储数据的地方,负责处理文件系统客户端的读写请求。数据节点在名称节点的统一调度下进行数据块的创建、删除和复制。

• 客户端可以向数据节点请求写入或者读取数据块。

• 每个数据节点会周期性地向名称节点发送心跳信息,报告自己的状态,没有按时发送心跳信息的数据节点会被标记为“宕机”,这时系统不会再给它分配任何I/O请求。

 第二名称节点:

        EditLog文件不断变大的缺点:当名称节点重启时,过大的EditLog文件就会导致整个过程非常缓慢,使HDFS系统在启动过程中长期处于“安全模式”,无法正常对外提供读写操作。

        解决方法:HDFS在设计中采用了第二名称节点,该节点可以定期完成EditLog文件与FsImage文件的合并操作以减小EditLog文件大小,从而缩短名称节点重启所需时间。

 副本机制:

 

这种多副本方式具有以下几个优点:

1. 提高系统可靠性;

2. 实现负载均衡;

3. 提高访问效率。

小tip:副本以流水线式的方式从前一个数据节点复制到下一个数据节点,直到满足副本系数为止。

 

 

 数据出错与恢复:

 

 

 

3.3 HDFS文件读取流程

基础代码:

public static void main(String[] args) {
    try {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://localhost:9000");
        conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
        FileSystem fs = FileSystem.get(conf);
        Path file = new Path("test");
        FSDataInputStream getIt = fs.open(file);
        BufferedReader d = new BufferedReader(new InputStreamReader(getIt));
        String content = d.readLine(); //读取文件一行
        System.out.println(content);
        d.close(); //关闭文件
        fs.close(); //关闭hdfs
    } catch (Exception e) {
        e.printStackTrace();
    }
}

 

 

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐