目录
什么是机架感知
感知hadoop集群中每个机器节点所属的机架
如何感知机架
某台 slave 机器是属于哪个 rack 并非是智能感知的,而是需要 hadoop的管理者人为的告知 hadoop 哪台机器属于哪个 rack,这样在 hadoop的 namenode 启动初始化时,会将这些机器与 rack 的对应信息保存在内存中,用来作为对接下来所有的 HDFS 的写块操作分配 datanode列表时(比如 3 个 block 对应三台 datanode)的选择 datanode 策略,尽量将三个副本分布到不同的 rack。
Hadoop机架感知的作用
不开启机架感知的缺点
默认情况下,hadoop 的机架感知是没有被启用的。所以,在通常情况下,hadoop 集群的 HDFS 在选机器的时候,是随机选择的。
也就是说,如果实际节点不完全在相同的机架,但是又没有配置机架感知很有可能在写数据时:
hadoop 将第一块数据 block1 写到了rack1 上,然后随机的选择下将 block2 写入到了 rack2 下,此时两个rack 之间产生了数据传输的流量,再接下来,在随机的情况下,又将block3 重新又写回了 rack1,此时,两个 rack 之间又产生了一次数据流量。在 job 处理的数据量非常的大,或者往 hadoop 推送的数据量非常大的时候,这种情况会造成 rack 之间的网络流量成倍的上升,成为性能的瓶颈,进而影响作业的性能以至于整个集群的服务。
开启机架感知的优势
(1)不同节点之间的通信能够尽量发生在同一个机架之内,而不是跨机架;
(2)为了提高容错能力,名称节点会尽可能把数据块的副本放到多个机架上。
默认3副本情况下:
- client所在节点如果是DataNode节点,那么会在本节点存放一份副本;如果client在集群外,那么按照就近原则选一个节点存放副本;
- 第二个副本在另外一个机架的随机一个节点;
- 第三个副本在第二个副本所在机架的随机一个节点;
如何配置机架感知?
1.检查当前集群机架配置情况
- 执行hdfs dfsadmin -printTopology打印当前机架信息,可以看到默认所有节点都是一个机架 default-rack,此时没有配置机架感知。
Rack: /default-rack
172.16.91