带你入坑大数据(一) --- HDFS基础概念篇

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: HDFS基础

一、HDFS的概念

先简单过一下基础概念,起码知道接下来要说的东西和这个东西是用来干啥的

1.1 Hadoop架构

HDFS(Hadoop Distributed FileSystem),由3个模块组成:分布式存储HDFS,分布式计算MapReduce,资源调度框架Yarn

大量的文件可以分散存储在不同的服务器上面

单个文件比较大,单块磁盘放不下,可以切分成很多小的block块,分散存储在不同的服务器上面,各服务器通过网络连接,造成一个整体。

1.2 核心概念block

HDFS3.x上的文件会按照128M为单位切分成一个个的block,分散存储在集群的不同的数据节点datanode上,需要注意的是,这个操作是HDFS自动完成的。

假设我们现在要存储一个300M的文件,这个300M就会被切分成

datanode1:128M + datanode2:128M + datanode3:44M

这时我们需要知道,就算它的底层逻辑会按照128M进行划分,可是datanode3一个实际占用44M的块也是不会占据128M的空间的

1.3 block的副本

为什么hadoop直至今天会这么流行,就是因为它的初始设计就是可以部署在商用服务器上,而我们知道,商用服务器是非常廉价的,而这种廉价的服务器就很容易出现故障,比如CPU,IO内存等等都可能会产生问题

按照我们刚刚1.2的说法,一个文件被分成了3块存储在不同的datanode上,万一其中的一个datanode挂掉,那岂不是这个文件就找不回来了吗,所以hadoop还对我们的每一个数据块做了一个副本,保证数据的可靠性

副本数可以自己进行手动设置,一般是3个副本

hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
    </configuration>
    
    

可以清晰看到value的值为3,我们的副本数就为3

类似于这些个属性我们是如何得知它们的作用的呢,在hadoop官网上可以查看,这里用的2.7.3。点开官方文档,在左侧边栏拉至最下方可以看到configuration项

当然我们需要找对文件,是HDFS的内容就要找hdfs-default.xml,如果是MapReduce,就要mapred-default.xml,yarn的就是yarn-default.xml

点击hdfs-default.xml,可以按下ctrl+f进行搜索,输入dfs.replication回车

这里我们就可以看到了,dfs.replication的默认值就是为3,后面的参数说明写着default block replication,而下面的参数dfs.replication.max就是副本最大可设置为512的意思了

同样刚刚在 1.2 核心概念block 时我们提到的block大小为128M在这个文件中也可以找到

所以其实每一个数据块block的大小也是可以自主设置的

1.3.1 机架存储策略

实际机房中,会有机架,每个机架上会有若干台服务器

一般来说我们会把一个block的3个副本分别按照下述方法进行存储:

第一个副本就存储在一个机架A上
第二个副本存储在和这个block块不同机架(比如机架B)的一个服务器上

我们存储第2个副本时会优先把副本存储在不同的机架上,这是为了防止出现一个机架断电的情况,如果副本也存储在同机架上的不同服务器上,这时候数据就可能丢失了。

第三个副本存储在机架B的另外一个服务器上(注意副本2,3都存储在了机架B)

为什么会这么选择,因为如果我们把副本3也放在另外一个机架C上,副本2和副本3之间的通信就需要副本2通过它的交换机去联系总交换机,然后总交换机去联系机架C的交换机,需要走的路线非常长,而且机房中的带宽资源非常宝贵,如果处于高并发的情况,很容易就把机房的带宽打满,此时整一个集群的响应速度会急剧下降,这时候服务就会出现问题了。

当然我们的副本数也是可以手动通过命令增加的,在客户端访问量多的时候,可以适当分配一下压力


$ hadoop fs -setrep -R 4 path+FileName

setrep的意思其实就是set replication,设置副本数的缩写,上面命令就是将副本数设置成4份了,后面跟着文件路径和文件名即可

二、HDFS的三大组件

再次强调一下,大数据的框架大部分其实都是主从架构,就是一主多从,等下要讲到的HDFS就是一个NameNode,多个DataNode,MapReduce就是一个JobTracker,多个TaskTracker,Yarn则是一个ResourceManager,多个NodeManager,而Spark就是一个Master和多个Slave

DataNode的介绍其实可以省略,姑且只需要知道它的作用是存放block块的即可。

2.1 NameNode的介绍

大数据框架都是分布式的,可能每个角色都运行在各个不同的服务器上面,需要进行通信的时候就要需要网络的支持,而在我们客户端需要读一个文件的信息时,必须知道我们这个文件被分成了多少个block,各个block又分别存储在哪个服务器上,这种用于描述文件的信息被称为文件的元数据信息(metaData),而metaData就是存储在NameNode的内存中的

2.2 metaData的介绍

metaData的大小:文件,block,目录占用大概150byte字节的元数据,所以为什么说HDFS适合存储大文件而不适合存储小文件,可想而知存储一个大文件就只有一份150byte的元数据,存储N多个小文件就会伴随存在N份150Byte字节的元数据文件,这就非常地不划算

元数据信息以命名空间镜像文件(以下称为fsimage)和编辑日志(以下称为edits log)的方式保存,两者的作用分别是

fsimage:元数据镜像文件,保存了文件系统目录树信息以及文件和块的对应关系
edits log:日志文件,保存了文件的更改记录

为什么元数据需要存储在NameNode的内存中呢,答案很简单,存储在内存中意味着快,当然也会存在问题,就是如果NameNode宕机了,内存就无法读取了,此时为了防止这种情况出现,也为了加快NameNode从故障中恢复的速度,就设计了一个SecondaryNameNode的角色

日志缓存方面:客户端向 HDFS 写文件,会记录下来操作日志,而这时我们会预先准备好两块缓存区域,这个日志在写满了第一块缓存时,会开始录入磁盘,也就是edits log,NameNode的内存中,这种状态就是一个双缓存异步写的操作。这样可以保证客户端写的日志时刻都能被记录下来。

2.3 SecondaryNameNode的介绍

它的作用主要有以下几点


1.备份NameNode中的元数据信息
2.提高NameNode的重启速度
3.必要的时候可作为新的NameNode
为什么说SecondaryNameNode可以提高NameNode的恢复速度?

当集群启动的时候,会记录下启动的时间t,而随着一段时间过去后或者NameNode中的edits log文件存满后就会触发checkPoint操作,在Spark中也会有这个知识点,主要作用就是对重要的数据进行备份的一个操作

在之后的文章会对这部分操作流程进行解释

为什么说SecondaryNameNode可以提高NameNode的重启速度

首先搞清楚NameNode节点挂掉后它是如何进行恢复的

首先它会把内存中的镜像文件fsimage读到内存当中,然后通过edits log所记录的所有操作重新执行一遍,把所有的元数据都恢复之后,才能回到关机之前的状态,这个过程十分缓慢

但是有了SecondaryNameNode之后,通过它提供的fsimage.ckpt可以恢复很大一部分的元数据信息,再直接通过执行edits log中所记录下来的,从edits new中合并过来的新操作,就可以进行恢复

而在NameNode确定无法重启之后,SecondaryNameNode就可以通过以下命令作为新的NameNode对外提供服务

hadoop-daemon.sh start namenode

当然我们不难发现,这种方式非常地不优雅,因为在NameNode进行重启或者SecondaryNameNode进行上位的时间段中我们的集群肯定都会有一段空白期,所以之后讲到的hadoop HA的方式就会帮助我们解决这个问题

三、HDFS机制

3.1 心跳机制

心跳机制解决了HDFS集群间的通信问题,还是NameNode命令DataNode执行操作的途径

1.master namenode启动之后,会开一个ipc server
2.slave DataNode启动,连接NameNode,每隔3s向NameNode发送一个心跳,并携带状态信息
3.NameNode通过对这个心跳的返回值来给DataNode传达任务指令

心跳机制的作用

1.NameNode全权管理数据块的复制,它周期性从集群中的每个DataNode接收心跳信号和块状态报告(blockReport),接收到心跳信号意味着该DataNode节点工作正常,块状态报告包含了该DataNode上所有数据块的列表

2.DataNode启动时向NameNode注册,通过后周期性地向NameNode上报blockReport,每3秒向NameNode发送一次心跳,NameNode返回对该DataNode的指令,如将数据块复制到另一台机器,或删除某个数据块等···而当某一个DataNode超过10min还没向NameNode发送心跳,此时NameNode就会判定该DataNode不可用,此时客户端的读写操作就不会再传达到该DataNode上

3.hadoop集群刚开始启动时会进入安全模式(99.99%),就用到了心跳机制,其实就是在集群刚启动的时候,每一个DataNode都会向NameNode发送blockReport,NameNode会统计它们上报的总block数,除以一开始知道的总个数total,当 block/total < 99.99% 时,会触发安全模式,安全模式下客户端就没法向HDFS写数据,只能进行读数据。

3.2 负载均衡

其实就是节点的增加或减少,或者节点的磁盘使用率高低的问题,主要就是通过网络进行数据的迁移工作以达到高可用率

触发命令

$ HADOOP_HOME/sbin/start-balancer.sh -t 5%

5%其实就是刚刚提到的磁盘的利用率差值,大于5%时会触发负载均衡策略

finally

下一篇会继续更新HDFS的读写流程和容错,HA高可用和联邦

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
3月前
|
存储 分布式计算 Hadoop
Hadoop Distributed File System (HDFS): 概念、功能点及实战
【6月更文挑战第12天】Hadoop Distributed File System (HDFS) 是 Hadoop 生态系统中的核心组件之一。它设计用于在大规模集群环境中存储和管理海量数据,提供高吞吐量的数据访问和容错能力。
507 4
|
1月前
|
存储 机器学习/深度学习 数据采集
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
|
1月前
|
存储 分布式计算 数据可视化
大数据概念与术语简介
大数据概念与术语简介
50 2
|
2月前
|
存储 分布式计算 数据可视化
|
3月前
|
消息中间件 大数据 Kafka
高效处理大数据:Kafka的13个核心概念详解
大家好,我是小米!今天我将为大家深入解析Kafka的核心概念,包括消息、批次、主题、分区、副本、生产者、消费者、消费组等内容。通过这篇文章,你将全面了解Kafka的工作机制和应用场景,为你的大数据处理提供有力支持。准备好了吗?让我们开始吧!
121 4
|
3月前
|
Java 大数据 API
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
109 0
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
|
3月前
|
存储 分布式计算 大数据
【大数据】分布式文件系统HDFS
【大数据】分布式文件系统HDFS
65 0
【大数据】分布式文件系统HDFS
|
4月前
|
机器学习/深度学习 搜索推荐 数据可视化
大数据用户画像之基本概念
大数据用户画像利用大数据技术分析用户基本信息、消费行为、兴趣、社交及地理数据,创建详细用户模型,助力企业精准营销。涉及技术包括数据挖掘、大数据处理(Hadoop、Spark)、数据可视化、机器学习和数据库管理。通过用户画像,企业可实现市场定位、个性化推荐、精准广告、产品优化和风险控制。学习该领域需掌握多个技术栈,包括相关算法、工具及业务理解。
|
4月前
|
存储 分布式计算 Hadoop
hadoop节点HDFS数据块基本概念
【5月更文挑战第19天】
53 1
|
4月前
|
存储 分布式计算 安全
大数据存储技术(2)—— HDFS分布式文件系统
大数据存储技术(2)—— HDFS分布式文件系统
117 0

热门文章

最新文章