本节和大家继续学习一下有关Hadoop集群性能优化中机架感知配置方面的内容,主要包括写入数据和读出数据两大部分,希望通过本节的介绍大家对Hadoop集群中机架感知配置有一定的认识。 Hadoop集群功能测试 以下是分别就配置了机架感知信息和没有配置机架感知信息的hadoopHDFS启动instance进行的数据上传时的测试结果。 写入数据 当没有配置机架信息时,所有的机器hadoop都默认在同一个默认的机架下,名为“/default-rack”,这种情况下,任何一台
datanode机器,不管物理上是否属于同一个机架,都会被认为是在同一个机架下,此时,就很容易出现之前提到的增添机架间网络负载的情况。例如,对没
有机架信息的hadoopHDFS启动instance上传一个文件,其block信息如下: 而当Hadoop集群中配置了机架感知信息以后,hadoop在选择三个datanode时,就会进行相应的判断: 1.如果上传本机不是一个datanode,而是一个客户端,那么就从所有slave机器中随机选择一台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之间的“距离”由近到远进行一个排序。如果此时DFS写入端不是datanode,则选择datanode列
表中的第一个排在第一位。客户端根据这个顺序有近到远的进行数据块的写入。在此,判断两个datanode之间“距离”的算法就比较关键,hadoop目
前实现如下,以两个表示datanode的对象DatanodeInfo(node1,node2)为例: 如上图所示,每个datanode都会对应自己在集群中的位置和层次,如node1的位置信息为“/rack1/datanode1”,那么它所处的层次就为2,其余类推。 读取数据 我们看一下Hadoop集群配置中如何读取数据。当对某个文件的某个block进行读取的时候,hadoop采取的策略也是一样: 1.首先得到这个block所在的datanode的列表,有几个副本数该列表就有几个datanode。 2.根据列表中datanode距离读取端的距离进行从小到大的排序:a)首先查找本地是否存在该block的副本,如果存在,则将本地datanode作为第一个读取该block的datanode b)然后查找本地的同一个rack下是否有保存了该block副本的datanode c)最后如果都没有找到,或者读取数据的node本身不是datanode节点,则返回datanode列表的一个随机顺序。本节关于Hadoop集群相关内容介绍完毕。 |