HDFS原理深入

本文深入探讨HDFS,包括其概述、体系结构、NameNode、Secondary NameNode、DataNode的角色,以及文件读写流程。还讨论了HDFS的Java API使用、RPC调用、数据回收站机制、高可用性和联邦特性,最后分析了常见的HDFS问题及解决方案。
摘要由CSDN通过智能技术生成

目录

一、HDFS概述

二、hdfs 体系结构

 1、Namenode

2、secondary namenode的工作流程

3、DATANode

三、hdfs java调用

四、RPC和HDFS调用

五、hdfs文件读写流程分析

        1、数据存储-->读文件

        2、数据存储-->写文件.

六、数据回收站

七、HA和Federation

        1、hdfs2的HA

2、HA的failover原理

八、HDFS常见问题

        1、集群启动失败

        2、hdfs文件无法操作


一、HDFS概述

        数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。

        是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

        通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。

        容错。即使系统中有某些节点宕机,整体来说系统仍然可以持续运作而不会有数据损失【通过副本机制实现】。

        分布式文件管理系统很多,hdfs只是其中一种,不合适小文件。

二、hdfs 体系结构

 1、Namenode

        NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。

文件包括:

        fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。  

        edits:操作日志文件,namenode启动后一些新增元信息日志。

        fstime:保存最近一次checkpoint的时间

以上这些文件是保存在linux的文件系统中。

        hdfs-site.xml的dfs.namenode.name.dir属性

2、secondary namenode的工作流程

        1)secondary通知namenode切换edits文件

        2)secondary从namenode获得fsimage和edits(通过http)

        3)secondary将fsimage载入内存,然后开始合并edits

        4)secondary将新的fsimage发回给namenode

        5)namenode用新的fsimage替换旧的fsimage

3、DATANode

提供真实文件数据的存储服务。

文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。2.0以后HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block.         hdfs-site.xml中dfs.blocksize属性

不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间

Replication。多复本。默认是三个。

        hdfs-site.xml的dfs.replication属性 

            

            

三、hdfs java调用

FileSysterm

fileSysterm是使用java代码操作hdfs的api接口

文件操作

        create 写文件

        open 读取文件

        delete 删除文件

目录操作

        mkdirs 创建目录

        delete 删除文件或目录

        listStatus 列出目录的内容

        getFileStatus 显示文件系统的目录和文件的元数据信息

        getFileBlockLocations 显示文件存储位置

package com.shujia.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;

import java.io.*;
import java.net.URI;


public class HdfsAPI {
    FileSystem fs;

    //1.获取hdfs文件管理系统 file system
    @Before
    public void main() throws Exception {
        //获取配置文件
        Configuration configuration = new Configuration();
        //手动更改配置信息
        configuration.set("dfs.replication", "1");
        //获取连接地址
        URI uri = new URI("hdfs://master:9000");
        //获取hdfs文件管理对象
        fs = FileSystem.get(uri, configuration);

    }

    @Test
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值