Hadoop-HDFS的核心总结


什么是Hadoop?

Hadoop是apache旗下的一款开源的软件平台。
Hadoop提供的功能:利用服务器集群,根据用户的业务逻辑,对海量数据进行分布式处理。
多个服务器进行并行计算,把最后的结果汇总。
在这里插入图片描述

  1. 集群
    多台服务器的方式,每台服务器可以【独自】完成工作。(可以自己完成工作,也可以分给别人一起做)
  2. 分布式
    多台服务器【共同】完成一个或多个工作。(必须多台机器一起完成)

Hadoop的主要组成:

  1. common:基础功能组件,提供基础功能服务(通信)
  2. HDFS:分布式文件系统
  3. YARN:资源调度系统
  4. MapReduce:分布式离线计算框架
    yarn调度资源给mapreduce进行作业,通过从hdfs调用数据(hdfs提供底层的存储数据)进行计算,都是需要common进行通信。
    在这里插入图片描述

什么是HDFS?

HDFS是hadoop的分布式文件系统,采用的是集群的方式来存储海量数据。
在这里插入图片描述

HDFS的核心思想

关键字:分而治之

  1. HDFS将大文件切分成多个块(block)来存储,默认是按照128M每个块进行数据的存储。
  2. 为保证数据块(block)的高可靠,不丢失。一般会对数据进行冗余备份,即使一台服务器宕机了,也不会导致数据的丢失。一般默认是备份3个副本到不同的服务器上。

HDFS的优缺点

  1. 支持超大文件的存储,但是只能把超大文件当作是一个整体,很难对其中的某一行进行操作。
  2. HDFS是一个超大的仓库(数据仓库),不管用户放什么文件,什么格式的文件,多大的文件都能存储下来。但是与mysql(数据库)相比,mysql存储数据非常严谨,必须符合规范才能存储。而HDFS存储的文件不能针对单条记录进行增删改查。
  3. 支持大规模并发读取,大规模并发写入比较差。
  4. HDFS不支持超多的小文件存储。

HDFS的架构

  1. 主节点namenode:集群的老大,管理文件系统的目录树,处理客户端的读写请求。(nn可以理解为是一本书的目录)
  2. secondarynamenode:严格来说并不是namenode的备份节点,主要给namenode分担内存压力。但是实际工作中不会用2nn,而是再搭建一个nn(即使存在多个nn,也只能有一个nn处于active活跃状态。)
  3. 从节点datanode:存储整个集群的所有数据块,处理真正的数据读写。(dn可以理解为是一本书的目录对应的内容)

HDFS的核心设计

1. 心跳机制

1)datanode每个固定时间(默认3秒)向namenode汇报自身的状况信息,这就称之为心跳。namenode也会发送指令给datanode。

2)HDFS默认时间超过10分钟30秒,就说明datanode挂掉了。

3)计算公式:
timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
默认的 heartbeat.recheck-interval 大小为 5 分钟,dfs.heartbeat.interval 默认的大小为 3 秒。

4)根据key的值查看values:
hdfs getconf -confkey dfs.namenode.heartbeat.recheck-interval (300000毫秒)
在这里插入图片描述
hdfs getconf -confkey dfs.heartbeat.interval (3秒)
在这里插入图片描述

2. 安全模式

namenode的状态:active(活跃的) / standby(预备) / safemode(安全模式)

扫描二维码关注公众号,回复: 9612670 查看本文章

safemode其实可以认为是hdfs集群的一种自我保护状态,在该状态下不允许上传文件。为保证数据块的高可靠,不让副本丢失,当数据量丢失率超过0.1%(默认),则会进入到安全模式。

冷启动(先stop再start)集群的时候,为什么刚开始safemode是开启的,后来才关闭?
因为当namenode启动的时候,就会去读取元数据,元数据在内存中是完整的,但是在磁盘中是不完整的,namenode就以为数据块都丢失了,就进入到safemode。
当datanode启动之后就会进行心跳汇报,safemode就会退出。

3. 副本存放策略

关键字:负载均衡、带宽、高可靠
数据分块的存储和副本的存放,是保证高可靠的关键。
存放要求:

  1. 第一个副本存放在客户端连接的节点中。(要考虑负载均衡,选择的节点不能太满或太忙,要离客户端连接近,节省带宽)
  2. 第二个副本要存放在与第一个副本存放节点不同的机架上。(考虑高可靠)
  3. 第三个副本要存放与第一个副本同一个机架,随机放在不同节点上。(节省带宽)
    在这里插入图片描述

4. 负载均衡

命令(如何才算均衡):
start-balancer.sh
sbin/start-balancer.sh -t 10% (设置越小,均衡越高,但是会频繁负载均衡)

机器容量最高的那个值 和 最低的那个值得差距 不能超过 10%

hdfs集群主要的功能是实现读写操作(带宽),自动进行均衡非常慢,一天能移动的数据量在 10G-10T 的级别,很难满足超大集群的需求。

原因:
hdfs集群默认不允许balance操作占用很大的网络带宽,这个带宽是可以调整的。
命令修改:
hdfs dfsadmin -setBalanacerBandwidth 10485760
该数值的单位是字节,上面的配置是10M/s,默认是1M/s

可以在hdfs-site.xml 配置文件中进行设置:

<property>
    <name>dfs.balance.bandwidthPerSec</name>
    <value>10485760</value>
</property>
发布了56 篇原创文章 · 获赞 34 · 访问量 3667

猜你喜欢

转载自blog.csdn.net/MicoOu/article/details/103362546
今日推荐