浅谈HDFS

一、块的概念

1. 概念

  1. HDFS的本质是一个文件系统,特点是分布式,需要在多台机器启动多个NN,DN进程组成一个分布式系统

  2. HDFS不支持对一个文件的并发写入,也不支持对文件的随机修改,不适合存储小文件(存储小文件时会降低NN的服务能力)

2. HDFS的块大小

  • 块大小可以通过hdfs-site.xml中的dfs.blocksize进行配置,
    如果不配置,那么在hadoop1.x时,dfs.blocksize=64M,在hadoop2.xdfs.blocksize=128M

  • 默认值为128M的原因:
    hadoop默认使用hadoop的集群的机器都采用普通的机器磁盘

  • 基于最佳传输消耗理论,一次传输中寻址时间为总传输时间的1%为最佳状态
    目前机器磁盘的寻址时间普遍为10ms, 10ms / 1% * 磁盘的写入速度(100M/S)=100M

  • 块大小不能太小:
    如果块太小,会造成降低NN的服务能力,在读取和上传一个大的文件时带来额外的寻址时间消耗

  • 块大小不能太大:
    如果块太大,在一次上传时,如果发生异常,需要重新传输,造成网络IO资源的浪费,
    在随机读取某部分内容时,不够灵活

3. 块大小和副本数

1. 块大小指的是块的极限值
2. 副本数指的也是副本的最大值

这两个参数都是在客户端上传文件时指定

4. 块的属性

length:  块的实际大小
offset:  块的便宜量,这个块从文件的哪部分开始保存数据

二、拓扑距离和机架感知

1. 拓扑距离

拓扑距离指网络中各个节点之间抽象的一种距离,通常指两个节点到达共同祖先节点的和。

2. 机架感知

2.7.2的默认的机架感知策略:

  1. 在本地机架挑选一个节点,保存第一个副本,如果本地机架没有DN节点,挑选距离本地机架最近的一个节点
  2. 在本机机架挑选另一个节点,保存第二个副本,如果本地机架没有DN节点,挑选距离本地机架最近的一个节点
  3. 在其他机架选择一个节点,保存第三个副本

三、NameNode工作原理

1. NN的作用

  • NN保存HDFS上所有文件的元数据
  • NN负责接受客户端的请求
  • NN负责接受DN上报的信息,给DN分配任务(维护副本数)

2.元数据的存储

元数据存储在fsiamge文件+edits文件中!

fsimage(元数据的快照文件)
edits(记录所有写操作的文件)

NN负责集群中所有客户端的请求和所有DN的请求,在一个集群中,通常NN需要一个高配置,保证NN可以及时处理客户端或DN的请求,一旦NN无法及时处理请求,HDFS就已经瘫痪

  1. fsimage文件的产生:

     ①第一次格式化NN时,此时会创建NN工作的目录,其次在目录中生成一个fsimage_000000000000文件
     
     ②当NN在启动时,NN会将所有的edits文件和fsiamge文件加载到内存合并得到最新的元数据,将元数据持久化到磁盘生成新的fsimage文件
     
     ③如果启用了2NN,2NN也会辅助NN合并元数据,会将合并后的元数据发送到NN
    
  2. edits:
    NN在启动之后,每次接受的写操作请求,都会将写命令记录到edits文件中,edits文件每间隔一定的时间和大小滚动

  3. txid :
    每次写操作命令,分解为若干步,每一步都会有一个id,这个id称为txid

  4. NN的元数据分两部分:
    ①inodes : 记录在fsimage文件中或edits文件中
    ②blocklist: 块的位置信息(每次DN在启动后,自动上报的)

  5. checkpoint
    每次Namenode会定期进行checkpoint,主要了为了防止在运行期间产生大量的edits文件,导致下次重启时恢复时间过长,其定期将edits文件中新的内容,持久化到fsimage文件中,进行快照存储

    默认的机制:
    ①每间隔1h,执行一次
    ②距离上次,又新产生了100w次txns操作

  6. NN的安全模式

  • NN的安全模式主要是为了接受DN上报块信息。每次NN启动时,会自动进入安全模式,在安全模式只能有限读,不能写

  • 当DN上报的块的最小副本数的总数 / 块的总数 > 0.999时,NN会在30秒后自动离开

    手动操作:  hdfs dfsadmin -safemode  get|enter|leave|wait
    

四、DataNode

1.作用

  1. 接受客户端的读写块请求
  2. DN负责维护块的完整性,通过定期检查块的校验和判断块是否损坏,损坏的块,DN会自动删除,在下次启动时,不会上报给NN
  3. DN负责定期向NN汇报块的信息,接收NN的其他任务(复制块等)

2.Datanode的掉线时长

DN和NN每间隔dfs.heartbeat.interval(3s) 进行一次心跳,如果DN和NN上一次心跳距离当前时间,已经过了2dfs.namenode.heartbeat.recheck-interval(5min)+10dfs.heartbeat.interval ,此时NN会将DN的状态标记为DEAD。

五、其他配置

1. NN的多目录配置

NN的多目录指对元数据进行多个目录的同时备份,通过hdfs-site.xml中的dfs.namenode.name.dir进行设置

2. DN的多目录配置

如果机器添加了新的磁盘,希望DN在写入块时,向新磁盘的目录进行写入,则需要配置DN的多目录。
DN的多目录需要通过hdfs-site.xml中dfs.datanode.data.dir进行配置

3. 服役新节点

  1. 准备机器,安装软件,配置NN,RM的相关配置
  2. 启动datanode和nodemanager进程即可

注意:服役了新的DN节点后,可以执行再平衡的命令,这个命令可以将集群中块进行重新平衡分配。

./start-balancer.sh

4. 白名单

白名单是为了阻止某个进程加入集群,白名单之外的机器,无法进入集群。
白名单通过hdfs-site.xml中的dfs.hosts配置,可以使用 hdfs dfsadmin -refreshNodes刷新配置,读取此配置信息

5.黑名单

黑名单是为了退役datanode,黑名单中的机器在最后一次启动时,会将当前机器的块移动到其他节点
黑名单通过hdfs-site.xml中的dfs.hosts.exclude配置

注意: 如果当前集群中在线的DN节点不满足某些文件的副本数要求,当前退役节点是无法退役完成的

6.集群间的拷贝

hadoop distcp  hdfs://xxxx:xxx/xxx   hdfs://xxxx:xxx/xxx  

7.在线归档

在线归档的功能实际是一个MR程序,这个程序将HDFS已经存在的多个小文件归档为一个归档文件

归档:  hadoop arichieve  -archievename 归档文件名  -p 父目录  输入文件...  输出目录 
使用:  hadoop fs -ls  har:///归档文件名

注意:在线归档不会删除原文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值