Hadoop基础-网络拓扑机架感知及其实现

                                          作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.网络拓扑结构

  在本地网络中,两个节点被称为“彼此近邻”是什么意思?在海量数据处理中,其主要限制因素是节点之间数据的传输速率,即带宽稀缺。这里的想法是将两个节点之间的带宽作为距离的衡量标准。不用衡量节点之间的带宽,实际上很难实现(它需要一个稳定的集群,并且在集群中两两节点对数量是节点数量的平方),hadoop为此采用了一个简单的方法:把网络看作一棵树,两个节点之间的距离是他们到最近共同祖先的距离总和。该树中的层次是没有预先设定的, 但是相对与数据中心,机架和正在运行的节点,通常可以设定等级。具体想法是针对以下每个常见,可用带宽依次递减:

    1>.同一节点上的进程;

    2>.同一机架上的不同节点;

    3>.同一数据中心中不同机架上的节点;

    4>.不同数据中心的节点‘

  举个例子,假设有数据中心d1,机架r1中的节点n1。该节点可以表示为“/d1/r1/n1”。利用这种标记,这里给出四种距离描述:

    1>.distance(/d1/r1/n1,/d1/r1/n1)=0(同一节点上的进程);

    2>.distance(/d1/r1/n1,/d1/r1/n2)=2(同一机架上的不同节点);

    3>.distance(/d1/r1/n1,/d1/r2/n3)=4(同一数据中心中不同机架上的节点);

    4>.distance(/d1/r1/n1,/d2/r3/n4)=6(不同数据中心中的节点);

  上图摘自《Hadoop权威指南第四版》。我们必须要意识到Hadoop无法自动发现你的网络拓扑结构。它需要一些帮助,不过在默认情况下,假设网络是扁平化的只有一层,换句话说,所有节点在同一数据中心的同一机架上。规模小的集群可能如此,不需要进一步配置。

二.机架感知

   机架感知可以通过python和shell实现,详情请参考官方文档的案例:http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/RackAwareness.html。由于Hadoop是Java语言写的,因此本篇博客主要使用Java代码实现机架感知。在机架感知中,接受的数据(参数)是一个包含所有节点的ip或主机名的List,返回的数据也是一个List,是拓扑距离的list。

1>.编写机架感知自定义逻辑代码

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.hdfs;
 7
 8 import org.apache.hadoop.net.DNSToSwitchMapping;
 9 import java.util.ArrayList;
10 import java.util.List;
11 /**
12  *hadoop副本放置策略:(3副本情况)
13  *      1、在本地机架的一个节点放置一个副本    s101-s103    rack1
14  *      2、在其他机架的两个结点放置两个副本    s104-s105    rack2
15  */
16 public class RackAware implements DNSToSwitchMapping {
17     public List<String> resolve(List<String> names) {
18         List<String> list = new ArrayList<String>();
19         for(String name : names){
20             Integer suffix = 0;
21             /**
22              * 第一种情况: names是主机名
23              */
24             if(name.startsWith("s")){
25                 //将s101变为101
26                 suffix = Integer.parseInt(name.substring(1));
27             }
28             /**
29              * 第二种情况:names是ip
30              */
31             else {
32                 suffix = Integer.parseInt(name.substring(name.lastIndexOf(".") + 1));
33             }
34             /**
35              *  我们的策略是主机位大于103的就放在第一个机会上,即"/rack1",否则就放在第二个机柜上上,即"/rack2"
36              */
37             if(suffix <= 103){
38                 // /rack1/s102
39                 list.add("/rack1");
40             }
41             else {
42                 // /rack2/s105
43                 list.add("/rack2");
44             }
45         }
46         return list;
47     }
48     /**
49      * 下面的两个方法空实现即可。不用搭理它们,咱们这里用不到他们两个方法
50      */
51     public void reloadCachedMappings() {}
52     public void reloadCachedMappings(List<String> names) {}
53 }

2>.打包并上传至服务器端的/soft/hadoop/share/hadoop/common/lib目录下

3>.修改配置文件

4>.分发配置文件

[yinzhengjie@s101 ~]$ more `which xrsync.sh`
#!/bin/bash
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie
#EMAIL:y1053419035@qq.com#判断用户是否传参
if [ $# -lt 1 ];thenecho "请输入参数";exit
fi#获取文件路径
file=$@#获取子路径
filename=`basename $file`#获取父路径
dirpath=`dirname $file`#获取完整路径
cd $dirpath
fullpath=`pwd -P`#同步文件到DataNode
for (( i=102;i<=105;i++ ))
do#使终端变绿色 tput setaf 2echo =========== s$i %file ===========#使终端变回原来的颜色,即白灰色tput setaf 7#远程执行命令rsync -lr $filename `whoami`@s$i:$fullpath#判断命令是否执行成功if [ $? == 0 ];thenecho "命令执行成功"fi
done
[yinzhengjie@s101 ~]$
[yinzhengjie@s101 ~]$ xrsync.sh /soft/hadoop/etc/hadoop/core-site.xml
=========== s102 %file ===========
命令执行成功
=========== s103 %file ===========
命令执行成功
=========== s104 %file ===========
命令执行成功
=========== s105 %file ===========
命令执行成功
[yinzhengjie@s101 ~]$ xrsync.sh /soft/hadoop/etc/hadoop/slaves
=========== s102 %file ===========
命令执行成功
=========== s103 %file ===========
命令执行成功
=========== s104 %file ===========
命令执行成功
=========== s105 %file ===========
命令执行成功
[yinzhengjie@s101 ~]$
[yinzhengjie@s101 ~]$ xrsync.sh /soft/hadoop/share/hadoop/common/lib/MyHbase-1.0-SNAPSHOT.jar
=========== s102 %file ===========
命令执行成功
=========== s103 %file ===========
命令执行成功
=========== s104 %file ===========
命令执行成功
=========== s105 %file ===========
命令执行成功
[yinzhengjie@s101 ~]$ 

5>.启动HDFS并查看NameNode日志

转载于:https://www.cnblogs.com/yinzhengjie/p/9142230.html

Hadoop基础-网络拓扑机架感知及其实现相关推荐

  1. Hadoop HDFS实现机架感知

    机架感知是什么? 告诉hadoop集群中的服务器节点属于哪个机柜 实现 我的hadoop解压目录是 /export/servers/hadoop-2.6.0-cdh5.14.0 1.在hadoop解压 ...

  2. Hadoop之机架感知

    在分布式集群下,由于机架的的槽位和交换机网口数量的限制,使得集群上的机器不得不跨越机架,通常一个大型的集群会跨越很多机架.一般情况机架内机器的通讯会快于跨机架机器之间的通讯,并且机架之间机器的网络通信 ...

  3. Hadoop3.2.0 Hadoop 机架感知

    Hadoop组件具有机架感知功能.例如,通过将一个块的分片放在不同的机架上,HDFS块放置将使用机架感知来实现容错.这可以在群集中发生网络切换故障或分区时提供数据可用性. Hadoop主守护进程通过调 ...

  4. 机架感知(RackAwareness)

    一.背景 分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群.机架内的机器之间的网络速度通常都会高于跨 ...

  5. Hadoop机架感知

    背景 分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群.机架内的机器之间的网络速度通常都会高于跨机架 ...

  6. hadoop--HDFS_机架感知与网络拓扑节点距离计算

    目录 机架感知 网络拓扑--节点距离计算 机架感知 1.什么是机架感知? Hadoop集群中副本存储节点选择: 2.什么时候会涉及机架感知? 当Hadoop集群规模相当大的情况下,就要考虑机架感知: ...

  7. 【转】hadoop机架感知

    原文链接 http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2843015.html 背景 分布式的集群通常包含非常多的机器,由于受到机架槽位和交 ...

  8. 第十三章 hadoop机架感知

    背景 分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群.机架内的机器之间的网络速度通常都会高于跨机架 ...

  9. Hadoop机架感知配置及配置问题解决

    Hadoop在搭建集群的时候,集群的网络拓扑都是默认在同一个机架下的.以/default-rack为一个机架,如下格式. Rack: /default-rack 192.168.71.100:5001 ...

最新文章

  1. dataframe 去除重复
  2. ring0下的 fs:[124]
  3. java移位操作符注意的问题
  4. Docker 官方公共仓库 Docker Hub 遭攻击,恐19 万用户信息泄露;Intel 10核心新品要现身了?...
  5. 人生苦短python作伴_“人生苦短,我用Python”
  6. 企业级应用架构(一) 三层架构之解耦
  7. java简单ai聊天_一个hello/hi的简单的网络聊天程序——JAVA
  8. cuSPARSE库:(十七)cusparseStatus_t 返回信息
  9. 在Git中更改文件名的大小写
  10. github pages markdown_赏金$25000的GitHub漏洞:通过 GitHub Pages 不安全的Kramdown配置实现多个RCE...
  11. 史上最全 SQL 基础知识语法
  12. 《深入浅出WPF》——事件学习
  13. 徐小湛概率论与数理统计课件_概率论与数理统计视频教程下载
  14. adobe illustrator的格式刷
  15. pip安装超时,Exception:Traceback(most recent call last)
  16. 计算机重装系统后黑屏,重装系统过程中电脑黑屏后修复的方法-电脑自学网
  17. SSM+高校教室管理系统 毕业设计-附源码181523
  18. Google Play上架总结(一)为什么要上架Google Play
  19. 企鹅公司为企业与单位推出的一款基于其业务交流平台,该款企业微信mac版可以很轻松的进行企业级沟通
  20. configure文件的生成

热门文章

  1. 每天CookBook之JavaScript-062
  2. [小明爬坑系列]AssetBundle原理介绍
  3. unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题
  4. Bossie Awards 2013:最佳开源数据中心和云软件
  5. Javascript中二进制数据处理方法
  6. 【C++】动态内存管理/move/以及移动构造与移动赋值运算符
  7. IDEA函数调用关系图插件
  8. HTTP协议中的Tranfer-Encoding:chunked编码解析
  9. ASP.NET2.0中用Gridview控件操作数据
  10. C++拾取——使用stl标准库实现排序算法及评测