1、hdfs缺点
(1)不适合低延时数据访问
(2)无法高效存储大量小文件
①大量小文件,会占用大量NN的内存来存储目录和块信息
②寻址时间会超出文件读取时间
(3)不支持并发写入、不支持文件随机修改
①一个文件只能一个写,不允许多线程写入
②仅支持追加,不支持修改
2、Namenode作用
(1)管理HDFS命名空间
(2)配置副本策略
(3)管理数据块(Block)映射信息
(4)处理客户端的读写请求
3、Datanode
(1)存储实际数据
(2)执行数据块读写
4、Client
(1)文件切分,文件上传HDFS时,client将文件切分成一个个文件块
(2)与Namenode交互,获取文件信息
(3)与Datanode交互,读取或者写入数据
(4)Client提供一些命令管理HDFS,比如Namnode格式化
(5)Client通过一些命令来访问HDFS,比如对HDFS增删改查操作
5、dfs.block设置大小–主要取决于磁盘传输速率
(1)机械硬盘,磁盘传输速率一般100MB/s 设置128
(2)SSD,磁盘传输速率200-300MB/s,设置256
(3)hdfs文件块太小,会增加寻址时间
(4)文件块太大,磁盘传输数据时间会明显大于定位这个块开始位置所需要的时间,导致程序在处理这块数据时,会非常慢
6、hdfs命令
(1)-appendToFile ##追加一个文件到已经存在的文件末尾
(2)-setrep 副本数 ##修改文件的副本数,当副本数大于节点数时,最大副本数为节点数,除非节点扩容
7、hdfs安全模式下只能读不能写,原因是保证数据完整性
hdfs dfsadmin -safemode get ##获取
hdfs dfsadmin -safemode enter ##进入
hdfs dfsadmin -safemode leave ##离开
8、hdfs数据块大小
1) 2.x版本前64M,2.x版本后128M
2)文件块大小因素
寻址时间为传输时间的1%时,则为最佳状态,块太小会增加寻址时间,块太大磁盘传输数据时间会明显大于定位块开始位置所需要时间,所以块大小和磁盘读写相关,ssd可以256M
9、hadoop不适合存储小文件的原因
1)namenode元数据存放在内存中,大量小文件占内存
2)小文件的存储会增大寻址时间
10、hdfs使用场景
一次写入,多次读取,仅支持数据追加
11、hdfs写数据流程
client会对上传的文件进行切分为block
1)client通过Distributed FileSystem模块向NN发起上传文件请求,
NameNode检查权限、文件、父目录是否存在,反馈是否可以上传
2)client请求第一个Block块上传到哪几个DN上,NN反馈DN信息
3)client通过FSDataOutputStream 模块请求DN上传第一个block,
并且与副本节点建立传输通道
4)client向DN上上传Block,单位是Packet,并且同步副本
5)第一个block传输完成后再传输第二个
12、副本节点选择
1)第一个副本在client所处节点上,如果client在集群外,随机选择
2)第二个副本在另外机架节点
3)第三个副本在2副本机架随机节点
13、hdfs读流程
1)client通过Distributed FileSystem模块向NN发起下载文件请求,NN校验权限
,查询元数据,找到数据所在DN
2)client就近选择DN读取数据
3)DN传输数据给client,还是Packet为单位校验
4)client以Packet为单位接收,现在本地缓存,然后写入目标文件
14、hdfs元数据
namenode的/current目录下会有4类文件
1)FSimages文件:HDFS文件系统元数据的一个永久性的检查点, 其中包含HDFS文件系统的所有目录和文件inode的序列化信息
2)Edits文件:存放hdfs文件系统所有更新操作,所有写操作会先记录到Edits中
3)seen_txid文件,中保存最新一个Edits文件后缀,如:edits_inprogress_0000000012316041077 seen_txid中存储12316041077
4)VERSION,记录时间类型等节点信息
每次NameNode启动的时候都会将Fsimage文件读入内存, 加载Edits里面的更新操作, 保证内存中的元数据信息是最新的、 同步的, 可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。
15、查看FSimage和Edits文件
1)FSimages
hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径
2)Edits
hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径
16、checkpoint参数设置
1)两个周期检查点间的间隔
dfs.namenode.checkpoint.period ##默认3600s
2)让备NN或者检查节点创建检查的事务数,即不论时间是否到达,操作次数到了就执行
dfs.namenode.checkpoint.txns ##HW集群默认5000000
3)多久检查一次操作次数
dfs.namenode.checkpoint.check.period #默认60s
17、Datanode工作机制
1)数据块在DN上是文件形式存储,包括数据本身和元数据(包括数据块长度、块数据校验和、时间戳)
2)DN启动后会向NN注册,周期性上报所有块信息(默认6小时)
dfs.blockreport.intervalMsec 默认21600000毫秒,即6小时
##DN扫描数据目录在磁盘和内存中块区别的间隔
dfs.datanode.directoryscan.interval 默认2160秒,即6小时
3)心跳3秒一次,心跳返回结果包含NN对DN的命令,如复制数据、删除数据块等
。若10分钟没收到心跳则认为节点不可用
18、DN掉线时限参数
TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval。
默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟, dfs.heartbeat.interval默认为3秒
heartbeat.recheck.interval 的单位为毫秒,
dfs.heartbeat.interval 的单位为秒
19 hdfs写数据按照packet写入,突然断开后重连,hdfs会继续传吗?
发送数据的时候 底层维护了一个packet的队列,数据从里面发出去,
发出去的packet会放到一个应答队列里面,如果全部写成功了就从应答队列删掉,
如果写失败了,就从应答队列的中取出来,放回到发送队列的顶部,重新发送
##如果断开连接,写入就会报错
20 hdfs的异构存储
异构存储就是将不同需求或者冷热的数据存储到不同的介质中去,
实现既能兼顾性能又能兼顾成本。
存储类型
HDFS异构存储支持如下4种类型,分别是:
RAM_DISK(内存镜像文件系统)
SSD(固态硬盘)
DISK(普通磁盘,HDFS默认)
ARCHIVE(计算能力弱而存储密度高的存储介质,一般用于归档)
以上四种自上到下,速度由快到慢,单位存储成本由高到低。