Hadoop学习之路(九)HDFS深入理解

HDFS的优点和缺点

HDFS的优点

1、可构建在廉价机器上

    通过多副本提高可靠性,提供了容错和恢复机制

    服务器节点的宕机是常态   必须理性对象

2、高容错性

    数据自动保存多个副本,副本丢失后,自动恢复

    HDFS的核心设计思想:  分散均匀存储 + 备份冗余存储

3、适合批处理

    移动计算而非数据,数据位置暴露给计算框架

    海量数据的计算 任务 最终是一定要被切分成很多的小任务进行

4、适合大数据处理

    GB、TB、甚至 PB 级数据,百万规模以上的文件数量,10K+节点规模

5、流式文件访问

     一次性写入,多次读取,保证数据一致性

HDFS的缺点

不适合以下操作

1、低延迟数据访问

    比如毫秒级 低延迟与高吞吐率

2、小文件存取

    占用 NameNode 大量内存 150b* 1000W = 15E,1.5G 寻道时间超过读取时间

3、并发写入、文件随机修改

    一个文件只能有一个写者 仅支持 append

抛出问题:HDFS文件系统为什么不适用于存储小文件?

这是和HDFS系统底层设计实现有关系的,HDFS本身的设计就是用来解决海量大文件数据的存储.,他天生喜欢大数据的处理,大文件存储在HDFS中,会被切分成很多的小数据块,任何一个文件不管有多小,都是一个独立的数据块,而这些数据块的信息则是保存在元数据中的,在之前的博客HDFS基础里面介绍过在HDFS集群的namenode中会存储元数据的信息,这里再说一下,元数据的信息主要包括以下3部分:

  1)抽象目录树

  2)文件和数据块的映射关系,一个数据块的元数据大小大约是150byte

  3)数据块的多个副本存储地

而元数据的存储在磁盘(1和2)和内存中(1、2和3),而服务器中的内存是有上限的,举个例子:

有100个1M的文件存储进入HDFS系统,那么数据块的个数就是100个,元数据的大小就是100*150byte,消耗了15000byte的内存,但是只存储了100M的数据。

有1个100M的文件存储进入HDFS系统,那么数据块的个数就是1个,元数据的大小就是150byte,消耗量150byte的内存,存储量100M的数据。

所以说HDFS文件系统不适用于存储小文件。

HDFS的辅助功能

HDFS作为一个文件系统。有两个最主要的功能:上传和下载。而为了保障这两个功能的完美和高效实现,HDFS提供了很多的辅助功能

1.心跳机制

普通话讲解

1、 Hadoop 是 Master/Slave 结构,Master 中有 NameNode 和 ResourceManager,Slave 中有 Datanode 和 NodeManager

2、 Master 启动的时候会启动一个 IPC(Inter-Process Comunication,进程间通信)server 服 务,等待 slave 的链接

3、 Slave 启动时,会主动链接 master 的 ipc server 服务,并且每隔 3 秒链接一次 master,这 个间隔时间是可以调整的,参数为 dfs.heartbeat.interval,这个每隔一段时间去连接一次 的机制,我们形象的称为心跳。Slave 通过心跳汇报自己的信息给 master,master 也通 过心跳给 slave 下达命令,

4、 NameNode 通过心跳得知 Datanode 的状态 ,ResourceManager 通过心跳得知 NodeManager 的状态

5、 如果 master 长时间都没有收到 slave 的心跳,就认为该 slave 挂掉了。!!!!!

大白话讲解

1、DataNode启动的时候会向NameNode汇报信息,就像钉钉上班打卡一样,你打卡之后,你领导才知道你今天来上班了,同样的道理,DataNode也需要向NameNode进行汇报,只不过每次汇报的时间间隔有点短而已,默认是3秒中,DataNode向NameNode汇报的信息有2点,一个是自身DataNode的状态信息,另一个是自身DataNode所持有的所有的数据块的信息。而DataNode是不会知道他保存的所有的数据块副本到底是属于哪个文件,这些都是存储在NameNode的元数据中。

2、按照规定,每个DataNode都是需要向NameNode进行汇报。那么如果从某个时刻开始,某个DataNode再也不向NameNode进行汇报了。 有可能宕机了。因为只要通过网络传输数据,就一定存在一种可能: 丢失 或者 延迟。

3、HDFS的标准: NameNode如果连续10次没有收到DataNode的汇报。 那么NameNode就会认为该DataNode存在宕机的可能。

4、DataNode启动好了之后,会专门启动一个线程,去负责给NameNode发送心跳数据包,如果说整个DataNode没有任何问题,但是仅仅只是当前负责发送信条数据包的线程挂了。NameNode会发送命令向这个DataNode进行确认。查看这个发送心跳数据包的服务是否还能正常运行,而为了保险起见,NameNode会向DataNode确认2遍,每5分钟确认一次。如果2次都没有返回 结果,那么NameNode就会认为DataNode已经GameOver了!!!

最终NameNode判断一个DataNode死亡的时间计算公式:

timeout = 10 * 心跳间隔时间  + 2 * 检查一次消耗的时间

心跳间隔时间:dfs.heartbeat.interval 心跳时间:3s
检查一次消耗的时间:heartbeat.recheck.interval checktime : 5min

最终结果默认是630s。

2.安全模式

1、HDFS的启动和关闭都是先启动NameNode,在启动DataNode,最后在启动secondarynamenode。

2、决定HDFS集群的启动时长会有两个因素:

  1)磁盘元数据的大小

  2)datanode的节点个数

当元数据很大,或者 节点个数很多的时候,那么HDFS的启动,需要一段很长的时间,那么在还没有完全启动的时候HDFS能否对外提供服务?

在HDFS的启动命令start-dfs.sh执行的时候,HDFS会自动进入安全模式

为了确保用户的操作是可以高效的执行成功的,在HDFS发现自身不完整的时候,会进入安全模式。保护自己。

在正常启动之后,如果HDFS发现所有的数据都是齐全的,那么HDFS会启动的退出安全模式

3、对安全模式进行测试

安全模式常用操作命令:

hdfs dfsadmin -safemode leave //强制 NameNode 退出安全模式

hdfs dfsadmin -safemode enter //进入安全模式

hdfs dfsadmin -safemode get //查看安全模式状态

hdfs dfsadmin -safemode wait //等待,一直到安全模式结束

手工进入安全模式进行测试

1、测试创建文件夹

[[email protected] ~]$ hdfs dfsadmin -safemode enter
Safe mode is ON
[[email protected] ~]$ hadoop fs -mkdir -p /xx/yy/zz
mkdir: Cannot create directory /xx/yy/zz. Name node is in safe mode.
[[email protected] ~]$ 

2、测试下载文件

[[email protected] ~]$ ls
apps  data
[[email protected] ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[[email protected] ~]$ hadoop fs -get /aa/1.txt ~/1.txt
[[email protected] ~]$ ls
1.txt  apps  data
[[email protected] ~]$ 

3、测试上传

[[email protected] ~]$ hadoop fs -put 1.txt /a/xx.txt
put: Cannot create file/a/xx.txt._COPYING_. Name node is in safe mode.
[[email protected] ~]$ 

4、得出结论,在安全模式下:

如果一个操作涉及到元数据的修改的话。都不能进行操作

如果一个操作仅仅只是查询。那是被允许的。

所谓的安全模式,仅仅只是保护namenode,而不是保护datanode

3.副本存放策略

第一副本:放置在上传文件的DataNode上;如果是集群外提交,则随机挑选一台磁盘不太慢、CPU不太忙的节点上;
第二副本:放置在于第一个副本不同的机架的节点上;
第三副本:与第二个副本相同机架的不同节点上;
如果还有更多的副本:随机放在节点中;

4.负载均衡

负载均衡理想状态:节点均衡、机架均衡和磁盘均衡。

Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,例如:当集群内新增、删除节点,或者某个节点机器内硬盘存储达到饱和值。当数据不平衡时,Map任务可能会分配到没有存储数据的机器,这将导致网络带宽的消耗,也无法很好的进行本地计算。
当HDFS负载不均衡时,需要对HDFS进行数据的负载均衡调整,即对各节点机器上数据的存储分布进行调整。从而,让数据均匀的分布在各个DataNode上,均衡IO性能,防止热点的发生。进行数据的负载均衡调整,必须要满足如下原则:

    • 数据平衡不能导致数据块减少,数据块备份丢失
    • 管理员可以中止数据平衡进程
    • 每次移动的数据量以及占用的网络资源,必须是可控的
    • 数据均衡过程,不能影响namenode的正常工作

负载均衡的原理

数据均衡过程的核心是一个数据均衡算法,该数据均衡算法将不断迭代数据均衡逻辑,直至集群内数据均衡为止。该数据均衡算法每次迭代的逻辑如下:

步骤分析如下:

  1. 数据均衡服务(Rebalancing Server)首先要求 NameNode 生成 DataNode 数据分布分析报告,获取每个DataNode磁盘使用情况
  2. Rebalancing Server汇总需要移动的数据分布情况,计算具体数据块迁移路线图。数据块迁移路线图,确保网络内最短路径
  3. 开始数据块迁移任务,Proxy Source Data Node复制一块需要移动数据块
  4. 将复制的数据块复制到目标DataNode上
  5. 删除原始数据块
  6. 目标DataNode向Proxy Source Data Node确认该数据块迁移完成
  7. Proxy Source Data Node向Rebalancing Server确认本次数据块迁移完成。然后继续执行这个过程,直至集群达到数据均衡标准

DataNode分组

在第2步中,HDFS会把当前的DataNode节点,根据阈值的设定情况划分到Over、Above、Below、Under四个组中。在移动数据块的时候,Over组、Above组中的块向Below组、Under组移动。四个组定义如下:

  • Over组:此组中的DataNode的均满足

DataNode_usedSpace_percent > Cluster_usedSpace_percent + threshold

  • Above组:此组中的DataNode的均满足

Cluster_usedSpace_percent + threshold > DataNode_ usedSpace _percent >Cluster_usedSpace_percent

  • Below组:此组中的DataNode的均满足

Cluster_usedSpace_percent > DataNode_ usedSpace_percent > Cluster_ usedSpace_percent – threshold

  • Under组:此组中的DataNode的均满足

Cluster_usedSpace_percent – threshold > DataNode_usedSpace_percent

Hadoop HDFS 数据自动平衡脚本使用方法

在Hadoop中,包含一个start-balancer.sh脚本,通过运行这个工具,启动HDFS数据均衡服务。该工具可以做到热插拔,即无须重启计算机和 Hadoop 服务。HadoopHome/bin目录下的start−balancer.sh脚本就是该任务的启动脚本。启动命令为:‘HadoopHome/bin目录下的start−balancer.sh脚本就是该任务的启动脚本。启动命令为:‘Hadoop_home/bin/start-balancer.sh –threshold`

影响Balancer的几个参数:

  • -threshold

    • 默认设置:10,参数取值范围:0-100
    • 参数含义:判断集群是否平衡的阈值。理论上,该参数设置的越小,整个集群就越平衡
  • dfs.balance.bandwidthPerSec
    • 默认设置:1048576(1M/S)
    • 参数含义:Balancer运行时允许占用的带宽

示例如下:

#启动数据均衡,默认阈值为 10%
$Hadoop_home/bin/start-balancer.sh

#启动数据均衡,阈值 5%
bin/start-balancer.sh –threshold 5

#停止数据均衡
$Hadoop_home/bin/stop-balancer.sh

在hdfs-site.xml文件中可以设置数据均衡占用的网络带宽限制

    <property>
    <name>dfs.balance.bandwidthPerSec</name>
    <value>1048576</value>
    <description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description>
    </property>

原文地址:https://www.cnblogs.com/qingyunzong/p/8535995.html

时间: 2024-11-07 02:37:27

Hadoop学习之路(九)HDFS深入理解的相关文章

Hadoop学习之路(2)Hdfs分布式文件系统

@[TOC] 1.Hadoop架构 Hadoop由三个模块组成:分布式存储HDFS.分布式计算MapReduce.资源调度引擎Yarn 2.HDFS体系架构 2.1NameNode    NameNode负责:文件元数据信息的操作以及处理客户端的请求   NameNode管理:HDFS文件系统的命名空间NameSpace.   NameNode维护:文件系统树(FileSystem)以及文件树中所有的文件和文件夹的元数据信息(matedata)维护文件到块的对应关系和块到节点的对应关系   Na

阿里封神谈hadoop学习之路

阿里封神谈hadoop学习之路 封神 2016-04-14 16:03:51 浏览3283 评论3 发表于: 阿里云E-MapReduce >> 开源大数据周刊 hadoop 学生 spark 摘要: 在大数据时代,要想个性化实现业务的需求,还是得操纵各类的大数据软件,如:hadoop.hive.spark等.笔者(阿里封神)混迹Hadoop圈子多年,经历了云梯1.ODPS等项目,目前base在E-Mapreduce.在这,笔者尽可能梳理下hadoop的学习之路. 引言 当前,越来越多的同学进

Hadoop学习之路(一)——Hadoop家族学习路线图

主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等. 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无

Hadoop学习之路(十一)HDFS的读写详解

HDFS的写操作 <HDFS权威指南>图解HDFS写过程 详细文字说明(术语) 1.使用 HDFS 提供的客户端 Client,向远程的 namenode 发起 RPC 请求 2.namenode 会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会 为文件创建一个记录,否则会让客户端抛出异常: 3.当客户端开始写入文件的时候,客户端会将文件切分成多个 packets,并在内部以数据队列“data queue(数据队列)”的形式管理这些 packets,并向 namenode 申

Hadoop学习之路(十九)MapReduce框架排序

流量统计项目案例 样本示例 需求 1. 统计每一个用户(手机号)所耗费的总上行流量.总下行流量,总流量 2. 得出上题结果的基础之上再加一个需求:将统计结果按照总流量倒序排序 3. 将流量汇总统计结果按照手机归属地不同省份输出到不同文件中 第一题 import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.h

Hadoop学习之路(五)Hadoop集群搭建模式和各模式问题

分布式集群的通用问题 当前的HDFS和YARN都是一主多从的分布式架构,主从节点---管理者和工作者 问题:如果主节点或是管理者宕机了.会出现什么问题? 群龙无首,整个集群不可用.所以在一主多从的架构中都会有一个通用的问题: 当集群中的主节点宕机之后,整个集群不可用.这个现象叫做:单点故障.SPOF 单点故障讲述的概念有两点 1.如果说宕机的那个节点是从节点,那么整个集群能够继续运行,并且对外提供正常的服务. 2.如果说宕机的那个节点是主节点,那么整个集群就处于宕机状态. 通用的解决方案:高可用

Hadoop学习之路(十五)MapReduce的多Job串联和全局计数器

MapReduce 多 Job 串联 需求 一个稍复杂点的处理逻辑往往需要多个 MapReduce 程序串联处理,多 job 的串联可以借助 MapReduce 框架的 JobControl 实现 实例 以下有两个 MapReduce 任务,分别是 Flow 的 SumMR 和 SortMR,其中有依赖关系:SumMR 的输出是 SortMR 的输入,所以 SortMR 的启动得在 SumMR 完成之后 Configuration conf1 = new Configuration(); Con

Hadoop学习之路(8)Yarn资源调度系统详解

文章目录 1.Yarn介绍 2.Yarn架构 2.1 .ResourceManager 2.2 .ApplicationMaster 2.3 .NodeManager 2.4 .Container 2.5 .Resource Request 及 Container 2.6 .JobHistoryServer 2.7.Timeline Server 3.yarn应用运行原理 3.1.yarn应用提交过程 3.2.mapreduce on yarn 4. yarn使用 4.1 .配置文件 4.2.

Hadoop 学习总结之一:HDFS简介

一.HDFS的基本概念 1.1.数据块(block) HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块. 和普通文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的. 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间. 1.2.元数据节点(Namenode)和数据节点(datanode) 元数据节点用来管理文件系统的命名空间 其将所有的文件和文件夹的元数据保存在一个文件系统