HDFS

HDFS的使用场景

适合一次写入,多次读出的场景,且不支持文件的修改。

HDFS优点和缺点

优点

  1. 高容错性
  2. 适合处理大数据
  3. 可构建在廉价机器上,并通过多副本机制提高可靠性

缺点

  1. 不适合低延时数据访问
  2. 无法高效的对大量小文件进行存储(小文件的寻址时间会超过读取时间,违反HDF的设计目标)
  3. 不支持并发写入,文件随机修改(仅支持数据的追加)

HDFS文件块的大小(重点)

HDFS中的文件是分块存储(Block),块的大小通过参数(dfs.blocksize)来控制

默认大小 128M(2.x)64M(1.x)

如何规定的默认大小(主要取决于磁盘传输速率)

  1. 寻址时间约10ms,

  2. 寻址时间为传输时间的1%时,则为最佳状态。

  3. 目前磁盘的传输速率普遍100MB/s

  4. 传输时间:10ms / 0.01 = 1s

  5. block大小: 1s * 100MB/s = 100MB

常用命令

启动Hadoop集群

sbin/start-dfs.sh

sbin/start-yarn.sh

上传

  • -moveFromLocal 剪切粘贴

    hadoop fs -moveFromLocal ./kongming.txt /sanguo/shuguo

  • -copyFromLocal(-put) 复制粘贴

    hadoop fs -copyFromLocal README.txt /

    hadoop fs -put ./liubei.txt /user/atguigu/test/

  • -appendToFile 追加到一个文件(已经在HDFS中存在)的文件末尾

    hadoop fs -appendToFile liubei.txt /sanguo/shuguo/kongming.txt

下载

  • -copyToLocal(-get) 复制粘贴

    hadoop fs -copyToLocal /sanguo/shuguo/kongming.txt ./

    hadoop fs -get /sanguo/shuguo/kongming.txt ./

  • -getmerge 合并下载多个文件(不会对HDFS中的文件进行合并)

    hadoop fs -getmerge /user/atguigu/test/* ./zaiyiqi.txt

HDFS直接操作

  • -du 统计文件夹的大小信息

    hadoop fs -du -h /user/atguigu/test

  • -setrep 设置HDFS中文件的副本数量

    (最终副本量还是取决于节点数 这里只是改了设置只有节点数达到才生效)

    hadoop fs -setrep 10 /sanguo/shuguo/kongming.txt

HDFS写数据流程

image

网络拓扑(节点距离计算)

在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据。那么这个最近距离怎么计算呢?(节点距离:两个节点到达最近的共同祖先的距离总和。)

拓扑排序

机架感知(副本存储节点选择)

副本节点选择

  1. 第一个副本:在Client所处的节点上,如果客户端在集群外,随机选一个
  2. 第二个副本:在另一个机架的随机一个节点
  3. 第三个副本:在第二个副本所在机架的随机节点

补充

-- Client为什么是以串行的方式建立通道?
-- 本质上就是为了降低client的IO开销

-- 数据传输的时候如何保证数据成功?(了解)
-- 采用了ack回执的策略保证了数据完整成功上传。

HDFS读数据流程

image

NameNode和SecondaryNameNode(重点)

NameNode的元数据存储

元数据存放在内存中,磁盘中备份元数据的FsImage,防止节点断电后数据丢失,引入Edits文件(只进行追加操作,效率高)每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits。断电后可以通过FsImage和Edits的合并,合成元数据。

但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并

NN和2NN工作机制

image

补充

谁负责对NN的元数据信息进行合并?
2NN主要负责对NN的元数据精心合并,当满足一定条件的下,2NN会检测本地时间,每隔一个小时会主动对NN的edits文件和fsimage文件进行一次合并。合并的时候,首先会通知NN,这时候NN就会停止对正在使用的edits文件的追加,同时会新建一个新的edits编辑日志文件,保证NN的正常工作。接下来 2NN会把NN本地的fsimage文件和edits编辑日志拉取2NN的本地,在内存中对二者进行合并,最后产生最新fsimage文件。把最新的fsimage文件再发送给NN的本地。注意还有一个情况,当NN的edits文件中的操作次数累计达到100万次,即便还没到1小时,2NN(每隔60秒会检测一次NN方的edits文件的操作次数)也会进行合并。2NN 也会自己把最新的fsimage文件备份一份。

DataNode(面试开发重点)

DataNode工作机制

image

掉线时限参数设置

  1. DataNode进程死亡或网络故障造成DataNode无法与NameNode通信
  2. NameNode不会立即把该节点判定为死亡,默认要经过10分钟+30秒
  3. 自定义时间为2*dfs.namenode.heartbeat.recheck-interval +10**dfs.heartbeat.interval

需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为

<property>

<name>dfs.namenode.heartbeat.recheck-interval</name>

<value>300000</value>

</property>

<property>

<name>dfs.heartbeat.interval</name>

<value>3</value>

</property>

服役新数据节点

  • 直接启动DataNode,即可关联到集群

hdfs --daemon start datanode yarn --daemon start nodemanager

  • 如果数据不均衡,可以用命令实现集群的再平衡

./start-balancer.sh

DataNode多目录配置

在hdfs-site.xml文件中添加如下内容

<property>

 <name>dfs.datanode.data.dir</name>

<value>file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2</value>

</property>

图解HDFS数据原理

HDFS写数据原理image

image
image

HDFS读数据原理

image

HDFS故障类型和其检测方法image

image
image

posted @ 2022-07-26 16:37  POCOPOCOPOCO  阅读(79)  评论(0编辑  收藏  举报