HDFS学习总结

本文详细介绍了Hadoop分布式文件系统(HDFS)的概念、工作机制,包括元数据管理、RPC机制、HA高可用性和Federation机制。HDFS适合大规模数据集的应用,具有高容错性和高吞吐量的特点。文章还讨论了NameNode和DataNode的角色,以及RPC如何实现进程间交互,HA如何保证服务的连续性,以及Federation如何解决单个NameNode的局限性。
摘要由CSDN通过智能技术生成

1. 什么是HDFS

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。

2. HDFS工作机制

元数据:描述数据(块)的数据(块的信息、创建人、时间、类型等)

主从架构:namenode、secondarynamenode、datanode

namenode:1、接收IO请求 2、管理元数据 3、管理datanode

datanode:1、小弟角色 2、负责client端的续写请求 3、创建块、删除块、副本
在这里插入图片描述

3. RPC机制、HA机制、Federation机制

  1. RPC(Remote Produce Call,远程过程调用)机制,Hadoop RPC采用了Java动态代理与反射实现对象调用方式,客户端到服务器数据的序列化与反序列化由Hadoop框架或用户自己实现。Hadoop的进程间交互均通过RPC机制完成,如NameNode与DataNode,JobTracker与TaskTracker。
    RPC采用Client/Server模式,首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息,在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息给client,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

RPC具有透明性、高性能、可控性等特点。

  1. HA(High Availability,高可用性)机制,由于每个集群只有一个NameNode,如果这个NameNode发生故障,将导致整个集群都无法使用。除非重启NameNode或者新启动一个NameNode,另一方面如果跟NameNode有关的软硬件升级也将导致一段时间内不能使用NameNode。HA通过提供选择在同一集群中的一个热备用的两个冗余NameNode,使出现问题时可以快速转移到另一个NameNode。

  2. Federation机制,简而言之,Federation机制使的HDFS支持多个名字空间,并且允许在HDFS中间存在多个NameNode。

对于单个NameNode的HDFS架构存在许多局限性,如性能瓶颈(HDFS的吞吐量受限于单个NameNode的吞吐量);隔离问题单个NameNode无法隔离各个程序,可能造成一个程序影响整个HDFS;集群可用性;NameSpace和Block Management的紧密耦合等。

当文件系统客户端(client)进行写操作时,首先把它记录在修改日志中(edit log)
元数据节点在内存中保存了文件系统的元数据信息。在记录了修改日志后,元数据节点则修改内存中的数据结构。
每次的写操作成功之前,修改日志都会同步(sync)到文件系统。
fsimage文件,也即命名空间映像文件,是内存中的元数据在硬盘上的checkpoint,它是一种序列化的格式,并不能够在硬盘上直接修改。
同数据的机制相似,当元数据节点失败时,则最新checkpoint的元数据信息从fsimage加载到内存中,然后逐一重新执行修改日志中的操作。
从元数据节点就是用来帮助元数据节点将内存中的元数据信息checkpoint到硬盘上的
checkpoint的过程如下:

  • 从元数据节点通知元数据节点生成新的日志文件,以后的日志都写到新的日志文件中。
  • 从元数据节点用http get从元数据节点获得fsimage文件及旧的日志文件。
  • 从元数据节点将fsimage文件加载到内存中,并执行日志文件中的操作,然后生成新的fsimage文件。
  • 从元数据节点奖新的fsimage文件用http post传回元数据节点
  • 元数据节点可以将旧的fsimage文件及旧的日志文件,换为新的fsimage文件和新的日志文件(第一步生成的),然后更新fstime文件,写入此次checkpoint的时间。
  • 这样元数据节点中的fsimage文件保存了最新的checkpoint的元数据信息,日志文件也重新开始,不会变的很大了。
    参考链接:https://www.cnblogs.com/forfuture1978/archive/2010/03/14/1685351.html
    参考链接:https://www.cnblogs.com/z1987/p/5055246.html
    参考链接:https://blog.csdn.net/wangxueqing52/article/details/79866177(namenode和datanode的工作机制)
    参考链接:https://blog.csdn.net/erchouchou/article/details/100023392(亮仔的博客)

HDFS的API(增删改查)

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

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;


/**
 * Unit test for simple App.
 */
public class AppTest {
   
    @Test
    /**
     *   HDFS获取文件系统
     */
    public void initHDFS() throws Exception {
   
// 1 创建配置信息对象
        Configuration configuration = new Configuration();
// 2 获取文件系统
        FileSystem fs = FileSystem.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值