Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6449
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-31 08:30
文章分类
文章存档

2013年(3)

我的朋友

分类: IT职场

2013-08-05 22:29:00


Hadoop集群您能否生悉,本文就像各人先容一下Hadoop集群性能优化中有闭机架感知建设成绩,悲迎各人一同来进修,盼愿颠末本文的先容各人对机架感知有所理解。 AD: 本节战各人继尽进修一下有闭Hadoop集群性能优化中机架感知建设方面的内容,重要包含写进数据战读出数据两年夜局部,盼愿颠末本节的先容各人对Hadoop集群中机架感知建设有必定的熟悉。 Hadoop集群功能测试 以下是拜别就建设了机架感知疑息战没有建设机架感知疑息的hadoopHDFS启动instance进止的数据上传时的测试成绩。 写进数据 当没有建设机架疑息时,一切的机械hadoop皆默许在同一个默许的机架下,名为 /default-rack ,这类环境下,任何一台datanode机械,不管物理上能否属于同一个机架,皆市被认为是在同一个机架下,此时,就很简单出现之条件到的增减机架间网络负载的环境。例如,对没有机架疑息的hadoopHDFS启动instance上传一个文件,其block疑息以下: 从上图可以看出,在没有机架疑息的环境下,namenode默许将一切的slaves机械齐部默许为在/default-rack下,按照hadoop代码的理睬也能知道哦啊,此时在写block时,三个datanode机械的选择完全是随机的。 而当Hadoop集群中建设了机架感知疑息当前,hadoop在选择三个datanode时,就会进止响应的鉴定: 1.假设上传本机不是一个datanode,而是一个客户端,那么就从一切slave机械中随机选择一台datanode作为第一个块的写进机械(datanode1)。 a)而此时假设上传机械自己就是一个datanode(例如mapreduce作业中task颠末DFSClient背hdfs写进数据的时间),那么就将该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)为例: a)首先按照node1战node2对象拜别得出两个datanode在全部hdfs集群中所处的层次。这里的层次观点需要注释一下:每个datanode在hdfs集群中所处的层次布局字符串是如许描述的,假定hdfs的拓扑布局以下: 如上图所示,每个datanode皆市对应自己在集群中的位置战层次,如node1的位置疑息为 /rack1/datanode1 ,那么它所处的层次就为2,其余类推。 b)得到两个node的层次后,会沿着每个node所处的拓朴树中的位置背上查找,如 /rack1/datanode1 的上一级就是 /rack1 ,此时两个节面之间的距离减1,两个node拜别同上背上查找,直到找到配开的先人节面位置,此时所得的距离数就用来代表两个节面之间的距离。所以,如上图所示,node1战node2之间的距离就为4. 5.当按照 距离 排好序的datanode节面列表返回给DFSClient当前,DFSClient便会建树BlockOutputStream,并念此次block写进pipeline中的第一个节面(比来的节面)开初写进block数据。 6.写完第一个block当前,按序按照datanode列表中的次近的node进止写进,直到最后一个block写进成功,DFSClient返回成功,该block写进操纵结束。 颠末以上计谋,namenode在选择数据块的写进datanode列表时,就充裕斟酌到了将block副天职集在不同机架下,并同时尽量的截至了之前描述的网络多于开消。 对建设了机架疑息的hadoopHDFS启动instance上传一个文件,其block疑息以下: 从上图可以看出,在建设了机架疑息的环境下,为了削减机架间的网络流量,namenode会将个中两个副本写在同一个机架上,并且为了尽量做到容错,会将第三个block写讲另外一个机架上的datanode上。 读取数据 我们看一下Hadoop集群建设中如何读取数据。当对某个文件的某个block进止读取的时间,hadoop采取的计谋也是一样: 1.首先得到这个block所在的datanode的列表,有几个副本数该列表就有几个datanode。 2.按照列表中datanode距离读取真个距离进止从小到年夜的排序: a)首先查找本地能否存在该block的副本,假设存在,则将本地datanode作为第一个读取该block的datanode b)然后查找本地的同一个rack下能否有保存了该block副本的datanode c)最后假设皆没有找到,或读取数据的node自己不是datanode节面,则返回datanode列表的一个随机按次。本节闭于Hadoop集群相闭内容先容终了。
阅读(937) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~