HDFS 笔记

HDFS定义

HDFS是一个分布式文件系统,适用于大规模数据的存储和分析。它通过目录树来定位文件,特别适合“一次写入,多次读取”的数据场景。HDFS不支持文件的随机修改,因此更适合用作数据分析而非网盘应用。

HDFS优缺点

优点
  • 高容错性:通过数据副本机制提高容错性,丢失副本时系统会自动恢复。
  • 大数据处理能力:能够处理GB、TB甚至PB级别的数据,适合大规模数据处理。
  • 经济性:可以构建在廉价机器上,通过副本机制提高可靠性。
缺点
  • 低延迟访问不适合:无法支持毫秒级别的数据访问。
  • 小文件存储效率低:存储大量小文件会占用大量NameNode内存,影响性能。
  • 不支持并发写入:不支持文件的随机修改,只支持数据追加。

HDFS角色

  • NameNode
    (1)将所有的文件和文件目录信息保存在一颗文件目录树中。
    (2)这些信息也会持久化到磁盘里,保存为images系统镜像文件和edit日志文件。
    (3)保存每个文件都分成了哪些数据块,分别存储在哪些节点上。但是这些信息不会持久化,在系统启动时,可以由数据节点提取出来。

  • DataNode
    (1)存储数据的地方,对于全分布式,默认的数据冗余度是3。
    (2)接收client端和name发出的读写请求。
    (3)定时向namenode汇报数据块中的数据信息。

  • Secondary NameNode
    (1)负责images文件和edit文件的合并,防止edit文件过大。
    (2)备份images文件,用来在namenode失效后的恢复。

HDFS读写流程

读流程
  1. 客户端请求文件:客户端向NameNode发起文件下载请求,NameNode查询文件的元数据并返回文件块所在的DataNode地址。
  2. 选择DataNode:客户端根据就近原则和随机选择一台DataNode来读取数据。
  3. 数据传输:DataNode从磁盘读取数据,以Packet为单位传输给客户端。
  4. 客户端接受数据:客户端接收数据并在本地缓存,然后写入目标文件。
写流程
  1. 客户端请求上传:客户端向NameNode请求上传文件,NameNode检查文件是否已存在、目标目录是否存在以及是否有写权限。
  2. NameNode响应:NameNode确认上传权限后,客户端请求上传第一个Block的数据到哪些DataNode。
  3. 获取DataNode列表:NameNode返回三个DataNode节点(如dn1、dn2、dn3)。
  4. 建立数据传输通道:客户端通过FSDataOutputStream模块向第一个DataNode(dn1)上传数据,dn1再将数据转发给dn2,dn2再转发给dn3。
  5. 逐级应答:DataNodes逐级应答客户端,客户端开始上传数据到dn1,并逐步将数据发送到dn2和dn3。
  6. 上传下一个Block:第一个Block上传完成后,客户端请求NameNode获取下一个Block的DataNode。

端口配置

HDFS的端口配置因Hadoop版本不同而有所差异,以下是Hadoop 2.x和3.x版本的端口信息:

端口用途Hadoop 2.x版本Hadoop 3.x版本
HDFS访问500709870
NameNode内部通信90008020
MR执行任务情况80888088
Yarn内部通信80328032
历史服务器访问1988819888
历史服务器内部1002010020

常用命令

以下是一些常用的HDFS命令,帮助你管理文件和目录:

[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] [-x] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] [-x] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
[-setfattr {-n name [-v value] | -x name} <path>]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-usage [cmd ...]]

块大小

Hdfs中平均寻址时间为10ms
寻址时间是传输时间的1%时为最佳状态,所以最佳传输时间为1s
目前磁盘的传输速率普遍为100mb/s,因此100mb/s*1s=100mb,因此设置块大小为128mb
寻址时间 : 10ms
传输时间 : 10 ms *100 = 1s
磁盘传输速率 :100MB/ s
每秒传输大小 : 100MB/s * 1s = 100MB
因此最终块的大小设置为 128 MB

高可用性(HA)

原理

HA 高可用指 :同时有两个NameNode,当一个NameNode 宕机,则另外一个NameNode 可以及时的转为活跃状态。需要依靠一个共享存储系统 ( Zookeeper ),两个NameNode都包含元数据信息Fsimage,而editlog 文件是存放在共享存储系统中,Active Namenode 将数据写入editsLog并保存到共享存储系统(Quorum Journal Node,Network File System,Zookeeper ),而 StandBy Namenode 会监听该系统,从该系统中读取 editlog 日志的数据,写入自己的使得与Active Namenode 数据保存一致,而StandBy NameNode 只有读权限。实现一个 ZKFC(Zookeeper Failover Controller) ,常驻在每一个namenode节点中,每一个zkfailer负责控制自己所在的namenode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailer来负责切换,切换时需要防止溢出现象的发生

实现
  • ZKFailoverController:负责健康检测、会话管理和主备切换。通过Zookeeper维护短暂类型的znode实现主备切换,确保高可用性。

ZKFailoverController(主备切换控制器)主要职责分为两种, 依赖 zookeeper 的自动切换和不依赖zookeeper 的手动切换
1.健康检测:定期的向它监控的nn发送健康探测命令,从而来确定某个nn是否处于健康状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于一个不健康的状态
2.会话管理:如果nn是健康的zkfc就会在zookeeper中保持一个打开的会话,如果namenode同时还是active状态的,那么zkfc还会在zookeeper中占有一个类型为短暂类型的znode,当这个nn挂掉时,这个znode将会被删除,然后备用的nn,会得到这把锁,升级为主nn,同时标记状态为active
3.当宕机的nn重新启动时,它会再次注册zookeeper,发现已经有znode锁了,便会自动变为standby状态,如此循环往复,保证高可需,需要注意,目前仅仅支持最多两个nn
4.Master选举:如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断哪个nn为active状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值