Hadoop机架感知(rack-aware)配置指南
Hadoop机架感知(rack-aware)配置
副本的存放策略又是HDFS实现高可靠性和搞性能的关键,优化的副本存放策略也正是HDFS区分于其他大部分分布式文件系统的重要特性。HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。大型HDFS实例一般运行在跨越多个机架的计算机组成的机群上,不同机架(rack)上的两台机器之间的通信需要经过交换机,这样会增加数据传输的成本。在大多数情况下,同一机架内的两台机器间的带宽会比不同机架的两台机器间的带宽大(当前网络一般可以改造到不是瓶颈了)。
一方面,通过一个机架感知的过程,NameNode可以确定每个DataNode所属的机架ID。目前HDFS采用的策略就是将副本存放在不同的机架上,这样可以有效防止整个机架失效时数据的丢失,并且允许读数据的时候充分利用多个机架的带宽(直接提高hadoop的IO磁盘性能)。这种策略设置可以将副本均匀地分布在集群中,有利于组织失效情况下的负载均衡。但是,因为这种策略的一个写操作需要传输数据块到多个机架,这增加了写操作的成本。
另一方面,在读取数据时,为了减少整体的带宽小号和降低整体的带宽延时(将读取IO分布到各个不同的磁盘上),HDFS会尽量读取程序读取距离客户端最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该副本;如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读取本地数据中心的副本。
默认情况下,Hadoop的机架感知策略是未开启的,默认都是在同一个机架下面。下面叙述下配置步骤
1、创建sh脚本topology.sh
脚本位置自定义存放,这里存放在/usr/software/hadoop-2.7.3/sh
!/bin/bash
HADOOP_CONF=/usr/software/hadoop-2.7.3/sh
while [ $# -gt 0 ] ; do
nodeArg=$1
exec<${HADOOP_CONF}/topology.data
result=""
while read line ; do
ar=( $line ) if [ "${ar[0]}" = "$nodeArg" ]||[ "${ar[1]}" = "$nodeArg" ]; then result="${ar[2]}" fi
done
shift
if [ -z "$result" ] ; then
echo -n "/default-rack"
else
echo -n "$result"
fi
done
在此要注意的是,要给topology.sh赋予可执行权限
2、配置机架数据
机架数据新建【topolopy.data】文件放置的位置是任意的,这里也放在/usr/software/hadoop-2.7.3/sh下,上面的这个shell文件用到了这个新建立的文件
第一列为IP地址, 第二列为主机名,第三列为机架位置
192.27.4.193 master /master/rack1 192.25.225.181 node1 /home/rack1 192.25.81.15 node2 /home/rack2
3、将脚本配置到hadoop的core-site.xml中
<property> <name>topology.script.file.name</name> <value>/usr/software/hadoop-2.7.3/sh/topology.sh</value> </property>
4、检验配置
重启Hadoop(我的天那。。。。起不来怎么办?),输入命令
hdfs dfsadmin -printTopology
打印如下
至此看到rack1,rack2的输出,说明机架感知配置成功且已启用
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Apache Spark Delta Lake 写数据使用及实现原理代码解析
Apache Spark Delta Lake 写数据使用及实现原理代码解析 Delta Lake 写数据是其最基本的功能,而且其使用和现有的 Spark 写 Parquet 文件基本一致,在介绍 Delta Lake 实现原理之前先来看看如何使用它,具体使用如下: df.write.format("delta").save("/data/yangping.wyp/delta/test/") //数据按照 dt 分区 df.write.format("delta").partitionBy("dt").save("/data/yangping.wyp/delta/test/") // 覆盖之前的数据 df.write.format("delta").mode(SaveMode.Overwrite).save("/data/ya
- 下一篇
hadoop日常运维白皮书
hadoop日常运维与升级总结 ▲进程管理由于配置文件的更改,需要重启生效,或者是进程自己因某种致命原因终止,或者发现进程工作出现异常等情况下,需要进行手动进程的关闭或启动,或者是增删节点过程中的需要,进程的关闭与启动,使用hadoop-daemon.sh start| stop datanode/namenode/journalnode/zkfcyarn-daemon.sh start| stop nodemanager/resourcemanager检查进程是否完成关闭:jps 或者 ps –ef | grep datanode|namenode|journalnode|zkfc|nodemanager|resourcemanager注意:要清楚自己关闭的每一个进程对正在运行的集群会产生什么样的影响 ▲集群健康检查hdfs fsck / 进行文件系统健康检查,是否有块丢失,如何处理?hdfs fsck 也可以用来查看你关心的某些文件的块的分布情况。Hdfs fsck /path –files –blocks –locations 可以显示详细的文件,block位置等信息。Datan...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境