当前位置: 首页 > 后端技术 > Java

HDFSBalancer负载均衡器

时间:2023-04-01 23:15:05 Java

1。背景当我们的hadoop集群运行了一段时间后,各个DataNode上的数据分布不一定是均匀分布的。例如:我们向现有集群添加了一个新的DataNode。2.什么是平衡?这是我自己的简单理解。所谓平衡,就是每个DataNode的利用率与集群的利用率之差不超过给定的阈值百分比。这里的平衡指的是各个DataNode之间的平衡,同一个DataNode之间的磁盘是不会平衡的。2.1每个DataNode的Utilization计算DataNode的Utilization=dfs使用的空间/分配给dfs的空间。注意:分配给dfs的空间不是磁盘的总空间。2.2集群的利用率集群的利用率=每个datanodedfs使用的空间/每个datanode的总空间2.3平衡假设平衡阈值是5%,集群的利用率是37.5,那么利用率每个节点的32.5%到42.5%被认为是平衡的。也就是说,在极端情况下,DataNode的利用率变化幅度可达10%。3、hdfsbalancer语法[hadoopdeploy@hadoop01~]$hdfsbalancer--helpUsage:hdfsbalancer[-policy]平衡策略:datanode或blockpool[-threshold]磁盘容量百分比[-exclude[-f<主机文件>|<逗号分隔的主机列表>]]排除指定的数据节点。[-include[-f<主机文件>|<逗号分隔的主机列表>]]仅包括指定的数据节点。[-source[-f<主机文件>|<逗号分隔的主机列表>]]仅选择指定的数据节点作为源节点。[-blockpools<逗号分隔的块池ID列表>]平衡器将仅在此列表中包含的块池上运行。[-idleiterations]退出前的连续空闲迭代次数(-1表示无限)。[-runDuringUpgrade]是否在正在进行的HDFS升级期间运行平衡器。这通常是不需要的,因为它w不会影响过度使用的机器上的已用空间。[-asService]作为长期运行的服务运行。支持的通用选项有:-conf指定应用程序配置文件-D定义给定属性的值-fs指定要使用的默认文件系统URL,覆盖配置中的“fs.defaultFS”属性。-jt指定ResourceManager-files指定逗号-要复制到映射的分隔文件列表reducecluster-libjars指定要包含在类路径存档中的逗号分隔的jar文件列表指定逗号分隔的计算机上要取消归档的档案列表一般的命令行语法是:command[genericOptions][commandOptions]参数描述threshold磁盘容量的百分比默认值为10%,表示上浮10%。政策平衡策略。
datanode(默认):当每个DataNode都平衡时,集群就是平衡的。blockpool:当每个DataNode中的blockpool都平衡时,集群就平衡了。exclude不参与平衡的DataNode节点包含参与平衡的DataNode节点sourceonly选择指定的data节点作为源节点blockpoolsBalancer只在指定的blockpools中运行idleiterations退出前的连续空闲迭代次数(-1表示无限制)-runDuringUpgrade是否正在进行在HDFS升级期间运行平衡器。通常这不是必需的,因为这不会影响过度使用的计算机上的已用空间。-asService作为一个长期运行的服务运行4.运行一个简单的平衡案例4.1设置平衡数据传输带宽[hadoopdeploy@hadoop01~]$hdfsdfsadmin-setBalancerBandwidth10485760Balancer带宽设置为10485760[hadoopdeploy@hadoop01~]$当我们的集群负载需要降低这个值。当我们的集群负载较低时,可以适当增加这个值。4.2执行banalce[hadoopdeploy@hadoop01~]$hdfsbalancer-policydatanode-threshold52023-03-2614:10:09,785INFObalancer.Balancer:使用阈值5.02023-03-2614:10:09,786INFObalancer.Balancer:namenodes=[hdfs://hadoop01:8020]2023-03-2614:10:09,786INFObalancer.Balancer:parameters=Balancer.BalancerParameters[BalancingPolicy.Node,threshold=5.0,maxidleiteration=5,#excludednodes=0,#includednodes=0,#sourcenodes=0,#blockpools=0,在升级期间运行=false]2023-03-2614:10:09,786INFObalancer.Balancer:includednodes=[]2023-03-2614:10:09,786INFObalancer.Balancer:excludednodes=[]2023-03-2614:10:09,786INFObalancer.Balancer:sourcenodes=[]TimeStampIteration#BytesAlreadyMovedBytesLeftToMove正在移动的字节NameNode2023-03-2614:10:09,787INFObalancer.NameNodeConnector:getBlocks对hdfs://hadoop01:8020的调用将速率限制为每秒20个2023-03-2614:10:10,392INFObalancer.Balancer:dfs.namenode.get-blocks.max-qps=20(default=20)2023-03-2614:10:10,392INFObalancer.Balancer:dfs.balancer.movedWinWidth=5400000(default=5400000)2023-03-2614:10:10,392INFObalancer.Balancer:dfs.balancer.moverThreads=1000(default=1000)2023-03-2614:10:10,392INFObalancer.Balancer:dfs.balancer.dispatcherThreads=200(默认=200)2023-03-2614:10:10,392信息平衡器。平衡器:dfs.balancer.getBlocks.size=2147483648(默认=2147483648)2023-03-2614:10:10,392信息平衡器。平衡器:dfs。balancer.getBlocks.min-block-size=10485760(default=10485760)2023-03-2614:10:10,392INFObalancer.Balancer:dfs.datanode.balance.max.concurrent.moves=100(default=100)2023-03-2614:10:10,392信息平衡器。平衡器:dfs.datanode.balance.bandwidthPerSec=104857600(默认值=104857600)2023-03-2614:10:10,395信息平衡器。平衡器:dfs.balancer.max-size-to-move=10737418240(默认值=10737418240)2023-03-2614:10:10,395INFObalancer.Balancer:dfs.blocksize=134217728(默认=134217728)2023-03-2614:10:10,401INFOnet.NetworkTopology:添加新节点:/default-rack/192.168.121.141:98662023-03-2614:10:10,401INFOnet.NetworkTopology:添加新节点:/default-rack/192.168.121.140:98662023-03-2614:10:10,401INFOnet.NetworkTopology:添加新节点:/default-rack/192.168.121.142:98662023-03-2614:10:10,402INFObalancer.Balancer:0过度使用:[]2023-03-2614:10:10,402INFObalancer.Balancer:0未充分利用:[]2023-3-2614:10:1000B0B0B0hdfs://hadoop01:8020集群平衡。退出...2023-3-2614:10:10平衡耗时810.0毫秒[hadoopdeploy@hadoop01~]$5、参考文档1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Balancer2、https://help.aliyun.com/document_detail/449686.html