分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群。机架内的机器之间的网络速度通常都会高于跨机架机器之间的网络速度,并且机架之间机器的网络通信通常受到上层交换机间网络带宽的限制。
具体到Hadoop集群,由于Hadoop的HDFS对数据文件的分布式存放是按照分块block存储,每个block会有多个副本(默认为3),并且为了数据的安全和高效,所以Hadoop默认对3个副本的存放策略为:
在本地机器的hdfs目录下存储一个block
在另外一个rack的某个datanode上存储一个block
在该机器的同一个rack下的某台机器上存储最后一个block
这样的策略可以保证对该block所属文件的访问能够优先在本rack下找到,如果整个rack发生了异常,也可以在另外的rack上找到该block的副本。这样足够的高效,并且同时做到了数据的容错。
但是,Hadoop对机架的感知并非是自适应的,亦即,Hadoop集群分辨某台slave机器是属于哪个rack并非是只能的感知的,而是需要 Hadoop的管理者人为的告知Hadoop哪台机器属于哪个rack,这样在Hadoop的namenode启动初始化时,会将这些机器与rack的对应信息保存在内存中,用来作为对接下来所有的HDFS的写块操作分配datanode列表时(比如3个block对应三台datanode)的选择 datanode策略,做到Hadoopallocateblock的策略:尽量将三个副本分布到不同的rack。
接下来的问题就是:通过什么方式能够告知Hadoopnamenode哪些slaves机器属于哪个rack?以下是配置步骤。
配置
默认情况下,Hadoop的机架感知是没有被启用的。所以,在通常情况下,Hadoop集群的HDFS在选机器的时候,是随机选择的,也就是说,很有可能在写数据时,Hadoop将第一块数据block1写到了rack1上,然后随机的选择下将block2写入到了rack2下,此时两个rack之间产生了数据传输的流量,再接下来,在随机的情况下,又将block3重新又写回了rack1,此时,两个rack之间又产生了一次数据流量。在job处理的数据量非常的大,或者往Hadoop推送的数据量非常大的时候,这种情况会造成rack之间的网络流量成倍的上升,成为性能的瓶颈,进而影响作业的性能以至于整个集群的服务。
要将Hadoop机架感知的功能启用,配置非常简单,在namenode所在机器的Hadoop-site.xml配置文件中配置一个选项:
1. <property>
2. <name>topology.script.file.name</name>
3. <value>/path/to/script</value>
4. </property>
这个配置选项的value指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值。接受的参数通常为某台datanode机器的 ip地址,而输出的值通常为该ip地址对应的datanode所在的rack,例如”/rack1”。Namenode启动时,会判断该配置选项是否为空,如果非空,则表示已经用机架感知的配置,此时namenode会根据配置寻找该脚本,并在接收到每一个datanode的heartbeat时,将该 datanode的ip地址作为参数传给该脚本运行,并将得到的输出作为该datanode所属的机架,保存到内存的一个map中。
至于脚本的编写,就需要将真实的网络拓朴和机架信息了解清楚后,通过该脚本能够将机器的ip地址正确的映射到相应的机架上去。一个简单的实现如下:
1. #!/usr/bin/perl-w
2. usestrict;
3. my$ip=$ARGV[0];
4. my$rack_num=3;
5. my@ip_items=split/\./,$ip;
6. my$ip_count=0;
7. foreachmy$i(@ip_items){
8. $ip_count+=$i;
9. }
10. my$rack="/rack".($ip_count%$rack_num);
11. print"$rack";
分享到:
相关推荐
因此,如果不对机架进行感知和管理,可能会导致数据传输的流量和网络瓶颈,影响集群的性能。 Hadoop 的机架感知策略是将每个 block 副本分配到不同的机架上,以确保数据的高效和容错性。具体来说,第一个副本放在和...
在IT领域,尤其是在大数据处理和分布式计算中,Hadoop是一个不可或缺的...在这个视频教程中,IT十八掌徐培成将深入讲解机架感知的原理和测试方法,对于想要深入了解和优化Hadoop集群的人来说,无疑是一份宝贵的资源。
Hadoop集群的搭建和管理是一项复杂的工作,它需要考虑硬件资源、网络配置、数据安全和监控等多个方面。通过理解Hadoop集群的基本原理,可以更好地部署和优化Hadoop环境,实现对大数据的高效处理和分析。
- **机架拓扑**:Hadoop集群通常采用机架式服务器,并通过交换机连接成一个整体。这种设计能够充分利用带宽资源,减少数据传输延迟。 - **带宽需求**:随着Hadoop集群规模的扩大,更高的带宽变得越来越重要。1Gb/s或...
Hadoop集群对机架配置有“机架感知”(RackAwareness)的能力,即管理员可以定义机架的数量。这样做的目的是为了预防数据丢失和提高网络性能。为了防止数据丢失,Hadoop会将数据在不同机架的多个节点上复制存储。 ...
在构建Hadoop集群的过程中,需要遵循一系列步骤和配置要求,以确保集群稳定高效地运行。以下是对标题"《Hadoop集群搭建.pdf》"和描述中所述知识点的详细说明: 1. **集群搭建目的**: 创建Hadoop集群的目的是为了...
在构建海量结构化和非结构化大数据的Hadoop集群时,关键在于全面的规划,包括硬件、软件、网络和应用等多个方面。硬件规划涉及到选择适当的服务器、存储设备和网络基础设施,以确保集群能够应对大规模数据处理的需求...
8. **机架感知**:配置机架感知可以提高Hadoop集群的效率和稳定性,当写入数据时,会尽量将副本分布在不同机架的DataNode上,确保数据可用性和网络效率。 9. **文件上传过程**:在客户端上传文件时,数据不经过...
2. **副本存放策略**:HDFS采用机架感知策略来提高数据的可靠性和网络带宽的利用率。 3. **心跳检测**:NameNode周期性地从集群中的每个DataNode接收心跳包和块报告,确保DataNode正常运行。 4. **安全模式**:系统...
### Hadoop详解:深入理解Hadoop集群和网络 #### Hadoop集群基础原理 Hadoop作为一个分布式计算框架,其设计初衷是为了高效地处理大数据。本文旨在深入解析Hadoop集群的架构和运作机制,以及网络和服务器基础设施...
本讲座将深入探讨Hadoop集群的优化配置、管理、监控、数据导入以及安全保障等方面,帮助学员掌握Hadoop集群的生产运维最佳实践。 首先,Hadoop集群的优化配置和部署是构建高效集群的基础。在规划阶段,需要考虑集群...
- **网络拓扑感知**:根据网络拓扑结构调整数据复制策略,减少跨机架传输。 - **TCP参数调优**:调整TCP的缓冲区大小、重传超时等参数,优化网络效率。 6. **工具**: - **Hadoop命令行工具**:如`hadoop fs`...
这可能包括Hadoop集群的硬件选择、网络布局优化、内存管理、垃圾回收策略设置等。例如,Hadoop的机架感知功能允许系统根据节点所在的机架信息进行更合理的数据分配,从而提高数据处理的效率。 随着Hadoop技术的不断...
- 配置机架感知可以使Hadoop更智能地将数据分布在整个集群中,优化网络通信,减少跨机架的数据传输。 10. **Client上传文件**: - Client在上传文件时,会先与NameNode交互获取Block的存储位置,然后直接与相关的...
设置为3的原因是提高数据可靠性、可用性和网络效率,遵循机架感知策略,一个副本在本地机架,一个在同一机架的另一节点,一个在不同机架的节点,优化了读写性能和数据安全性。 以上就是实验报告中涉及到的全部核心...
支持配置推送,hosts文件推送,自动生成机架感知脚本 使用方法: http://github.com/xianglei/easyhadoop 点zip图标下载,然后运行EasyHadoopCentral中的setup_centos_(x).py进行安装 标签:hadoop ...
### 云计算基础课件-Hadoop:Google云计算的开源实现 #### Hadoop简介 Hadoop是一个由Apache基金会维护的开源框架,旨在提供一个高效、可靠且可扩展的分布式计算环境。它能够利用大量的普通硬件(而非昂贵的专业...
#### 六、Hadoop机架感知 Hadoop支持机架感知特性,即能够根据物理网络结构(例如机架或数据中心)来优化数据的读取和写入操作。这有助于提高数据访问的速度并降低网络带宽消耗。 1. **配置机架感知**:通过在`...