各个节点之间距离的计算:
机架感知:
HDFS将我上传的文件存放到哪三个节点上呢?
HDFS的读数据的流程:读数据和写数据都是以块为单位的。
读数据的时候client只需要和其中的一个DN建立通道获取第一个块,第一个块读完之后,读第二个块可能还是在这个DN上,但是不一定,读取第二块的内容的时候都需要重新去建立通道的。读数据的时候一块一块读。
在读数据的时候,只需要和其中的一个DataNode建立连接。
读数据和写数据client都是先与NameNode连接交互,再去和DataNode去交互。
NameNode和SecondaryNameNode之间的工作机制NameNode是整个HDFS的集群的老大,管理所有文件的元数据信息,2NN是NN的小秘,帮助NN管理一些工作,帮助NN减小压力,但是后期高可用集群直接淘汰了2NN
NameNode最主要的作用就是对HDFS中数据的元数据进行管理。
因为对镜像文件的修改是随机操作,效率很低
而对编辑日志文件的操作是追加操作,效率高。
NN中始终只会保留两个fsimage文件。
namenode这些fsimage镜像文件的位置和edits的编辑日志的文件位置:
/opt/module/hadoop-3.1.3/data/dfs/name/current
version文件是namenode自己维护的东西。
看一下seen_txid
代表谁是正在记录修改hdfs记录操作的edits
查看edits和fsimage文件
直接cat查看这个文件是看不了的,乱码。
hdfs oiv -p XML -i fsimage_0000000000000000735 -o /opt/module/hadoop-3.1.3/fsimage.xml
hdfs oev -p XML -i edits_0000000000000000348-0000000000000000455 -o /opt/module/hadoop-3.1.3/edits.xml
16542
FILE
songsong2.txt316082082307821608211634111134217728atguigu:supergroup:07441073741890106771
因为文件进入hdfs之后就会变成Block。所以如果是文件的话,还会记录它的block_id
1073741890
但是没有记录这个块在那个DN上存的。
文件之间的上下级关系怎么记录的呢?
HDFS中的目录都是在fsimage文件中通过inode维护的。
去查看nn里面的数据和DN里面的数据,发现DN中少了edits_inprogress文件