写在前面
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系
解答
副本放置策略需要考虑到哪些因素?
数据块副本放置策略直接决定了每个数据块多个副本存放节点的选择,一个良好的副本放置策略能权衡写性能和可靠性两个因素,在保证写性能较优的情况下,尽可能提高数据的可靠性。
副本放置策略与集群物理拓扑结构是直接相关的,一个集群由多个机架构成,每个机架由16~64个物理节点组成 ,机架内部的节点是通过内部交换机通信的,机架之间的节点是通过外部节点通信的,由于机架间的节点通信需通过多层交换机,相比于机架内节点通信,读写延迟要高一些。
相同机架内部的节点通常“绑定”在一起,多种资源可能是共享的,比如内部交换机,电源插座等,因此它们同时不可用的概率要比不同机架节点高很多。
考虑到集群物理拓扑结构的特点,HDFS默认采用的三副本放置策略(HDFS中副本放置策略是插拔式的,用户可嵌入自己的实现)。
客户端与 DataNode同节点
这是一种常见的场景:上层计算框架处理HDFS数据时,每个任务实际上就是一个客户端,它们运行在与 DataNode 相同的计算节点上(HDFS和YARN同节点部署)。
在这种情况下,三副本放置策略如下:
第一个副本写到同节点的 DataNode上,另外两个副本写到另一个相同机架的不同 DataNode 上。
客户端与 DataNode不同节点
当HDFS之外的应用程序向HDFS写数据时,通常会出现这种情况,
典型的场景有 Flume Sink,用户通过独立客户端 shell fs 命令行将文件上传到HDFS等。
在这种情况下,三副本放置策略如下:
HDFS会随机选择一个 DataNode 作为第一个副本放置节点,其他两个副本写到另一个相同机架的不同 DataNode 上。