HDFS 机架感知配置导致数据不均衡

HDFS 机架感知介绍

HDFS 机架感知是一种逻辑上的网络架构设计,它主要是用来区分不同节点的网络拓扑情况下,保证数据是能够高性能写入和查询的一种机制,毕竟跨网络的数据读写是有网络带宽消耗的,当没有配置机架信息时,所有的机器hadoop都默认在同一个默认的机架下,名为 “/default-rack”,这种情况下,任何一台datanode机器,不管物理上是否属于同一个机架,都会被认为是在同一个机架下,此时,就很容易出现之前提到的增添机架间网络负载的情况。在没有机架信息的情况下,namenode默认将所有的slaves机器全部默认为在/default-rack下,此时写block时,三个datanode机器的选择完全是随机的。

当配置了机架感知信息以后,hadoop在选择三个datanode时,就会进行相应的判断:

  1. 如果上传本机不是一个datanode,而是一个客户端,那么就从所有slave机器中随机选择一台datanode作为第一个块的写入机器(datanode1)。而此时如果上传机器本身就是一个datanode,那么就将该datanode本身作为第一个块写入机器(datanode1)。
  2. 随后在datanode1所属的机架以外的另外的机架上,随机的选择一台,作为第二个block的写入datanode机器(datanode2)。
  3. 在写第三个block前,先判断是否前两个datanode是否是在同一个机架上,如果是在同一个机架,那么就尝试在另外一个机架上选择第三个datanode作为写入机器(datanode3)。而如果datanode1和datanode2没有在同一个机架上,则在datanode2所在的机架上选择一台datanode作为datanode3。
  4. 得到3个datanode的列表以后,从namenode返回该列表到DFSClient之前,会在namenode端首先根据该写入客户端跟datanode列表中每个datanode之间的“距离”由近到远进行一个排序,客户端根据这个顺序有近到远的进行数据块的写入。
  5. 当根据“距离”排好序的datanode节点列表返回给DFSClient以后,DFSClient便会创建Block OutputStream,并向这次block写入pipeline中的第一个节点(最近的节点)开始写入block数据。
  6. 写完第一个block以后,依次按照datanode列表中的次远的node进行写入,直到最后一个block写入成功,DFSClient返回成功,该block写入操作结束。

机架配置场景

通过以上策略,namenode在选择数据块的写入datanode列表时,就充分考虑到了将block副本分散在不同机架下,并同时尽量地避免了之前描述的网络开销

实际场景配置导致数据不均衡

本场景是基于HDP+Ambari的配置实现,其他集群搭建模式其实也会遇到该问题,首先看实际问题截图

HDFS 机架感知配置导致数据不均衡_第1张图片

会发现实际的数据写入很不均衡,初次怀疑是HDFS副本写入机制的问题,HDFS副本写入机制进行了解

查看ambari中host的rack,默认的/default-rack后面还有个id,每个节点的id不同,

eg. /default-rack/fdd9cc43ce8aee1f3bb3d8b1832ab29f3b17a8a986607d5241b2f107

HDFS 机架感知配置导致数据不均衡_第2张图片

使用 hdfs dfsadmin -printTopology命令查看拓扑分布情况

HDFS 机架感知配置导致数据不均衡_第3张图片

HDFS Rack特性验证

一、增加节点 [ host=10.120.7.155 ] 只修改ambari 主机rack信息

(1)拓扑文件topology_mappings.data

HDFS 机架感知配置导致数据不均衡_第4张图片

(2) 拓扑结构

2、修改 [ host=10.120.7.155 ] Ambari 的rack 信息:

(1)修改Ambari 页面rack信息

HDFS 机架感知配置导致数据不均衡_第5张图片


(2)select * from hosts where ipv4='10.120.7.155'; 可以查询rack信息已经修改

HDFS 机架感知配置导致数据不均衡_第6张图片


(3)hdfs 拓扑信息没有发生变化

(4)hdfs 拓扑映射文件没有发生变化

HDFS 机架感知配置导致数据不均衡_第7张图片


(4)namenode 日志文件没有发生变化

2、安装datanode节点在 [ host=10.120.7.155 ]

(1)安装datanode 节点

HDFS 机架感知配置导致数据不均衡_第8张图片

(2)集群拓扑信息没有发生变化

HDFS 机架感知配置导致数据不均衡_第9张图片


(3)集群拓扑信息发生变化,即使设置了ambari机架信息/rack2将主机[ host=10.120.7.155 ] 挂载默认的/default-rack下

HDFS 机架感知配置导致数据不均衡_第10张图片


二、增加节点 [ host=10.120.6.206 ] 修改ambari 主机rack信息,同时修改拓扑文件topology_mappings.data

(1)select * from ambari.hosts where ipv4='10.120.6.206'; 可以查询rack信息已经修改,修改后集群拓扑文件,集群拓扑结构没有发生变化

HDFS 机架感知配置导致数据不均衡_第11张图片

(2)添加 [ host=10.120.6.206 ] 拓扑文件信息,namenode日志与集群拓扑没有发生变化,


 

HDFS 机架感知配置导致数据不均衡_第12张图片


(3)添加datanode节点,namenode 日志,拓扑结构没有发生变化

HDFS 机架感知配置导致数据不均衡_第13张图片

(4)启动datanode 组件服务,hdfs集群的拓扑结构添加到设置的/rack2下


 

HDFS 机架感知配置导致数据不均衡_第14张图片



二、重启namenode服务,查看拓扑结构的变化

1、重启namenode 后[host=10.120.7.155] 的rack 信息变成ambari设置的rack信息

HDFS 机架感知配置导致数据不均衡_第15张图片

四、手动修改topology_mapps.data

1、手动修改topology_mapps.data

HDFS 机架感知配置导致数据不均衡_第16张图片

2、重新该datanode 节点,拓扑结构中rack信息没有变化

HDFS 机架感知配置导致数据不均衡_第17张图片


 

HDFS Rack特性总结

通过以上测试可以得知:ambari设置rack 信息会保存在ambari.hosts 表中。

(1)10.1.7.155通过ambari设置rack信息,不填写topology_mapps.data文件,安装启动datanode组件,会将主机挂到/default-rack下,拓扑文件没有自动填写信息。

(2)10.1.6.206 通过ambari设置rack信息,填写主机对应topology_mappings文件,安装启动datanode组件,会将主机节点挂载到ambari设置 /rack2下

(3)重启namenode 组件,发现 10.120.7.155 的拓扑信息自动填写拓扑文件中,并且rack信息是ambari设置的rack信息。

(4)修改topology_mapps.data文件的主机rack信息,重启datanode节点,hdfs集群的拓扑结构没有发生变化,namenode日志显示还是旧的rack信息,这时候没有读取拓扑文件中的信息。

【结论】:

(1)扩展启动datanode节点时,会读取 topology_mapps.data 文件配置信息,如果文件中没有配置该节点的rack信息,该节点会被挂载到/default-rack下;如果文件中配置了该节点rack信息,则将该节点rack信息添加内存中;

(2)重启namenode组件会从ambari设置的 ambari.hosts中读取rack信息,写入文件

topology_mapps.data中。更新集群的拓扑信息。

(3)修改topology_mappings.data文件,重启datanode, 集群的拓扑结构没有发生变化。

你可能感兴趣的:(hdfs,hadoop,大数据)