zoukankan      html  css  js  c++  java
  • Hadoop记录-HDFS均衡脚本

    #!/bin/bash
    #作用:hdfs使用率取最大100个主机和最小80个主机进行数据均衡
    #打印报告
    hdfs dfsadmin -report>report.txt
    #截取主机名
    cat report.txt | grep -i "hostname" | awk -F ': ' '{print $2}' >hostname.txt
    #截取hdfs使用率
    cat report.txt | grep -i "DFS Used%" | awk -F ': ' '{print $2}' | awk -F '%' '{print $1}' >dfsused.txt
    #截取datanode存活数
    livenum=$(cat report.txt | grep -i "Live datanodes" | awk -F "(" '{print $2}' | awk -F ")" '{print $1}')
    #删除总的hdfs使用率
    sed -i '1d' dfsused.txt
    #截取存活datanode的hdfs使用率和主机名
    dfsarr=((sed -n '1,$livenum p' dfsused.txt))
    hostarr=((sed -n '1,$livenum p' hostname.txt))
    #组合主机名和hdfs使用率一一对应起来
    let livenum+=1
    if [ $livenum -gt  0 ]
    then
       for((i=1;i<$livenum;i++))
       do
        for((j=1;j<$livenum;j++))
        do
          if [ $i -eq $j ]
          then
             echo  ${hostarr[$i]} ":" ${dfsarr[$j]} >> hostdfs.txt
          fi
        done
       done
    else
        echo "Not Live DataNodes"
    fi
    #获取使用率最大100个主机名和最小80台主机名(按第二列排序)
    sort -rn -k 2 -t : hostdfs.txt | awk -F ":" '{print $1}' | head -n 100 >>host.txt
    sort -rn -k 2 -t : hostdfs.txt | awk -F ":" '{print $1}' | tail -n 80 >>host.txt
    #求平均值和最大值进行比较
    avg_used=$(cat hostdfs.txt | awk -F ":" '{print $2*100}' | awk '{sum+=$1} END {print sum/NR}')
    max_used=$(cat hostdfs.txt | awk -F ":" '{print $2*100}' | sort -rn | head -n 1)
    diff_max_avg=$(($max_used-$avg_used))
    #如果最大值与平均值的之差大于5,表示集群数据不均衡
    if [ $diff_max_avg -gt 5 ]
    then
        jps | grep -i "balancer"
        if [ $? -eq 0]
        then
           kill -9  $(jps | grep -i "balancer" | awk '{print $1}')
        else
           #对这些主机执行局部均衡
           hdfs   dfs  -rm   /system/balancer.id
           hdfs balancer  
           -Ddfs.datanode.balance.max.concurrent.moves = 10  
           -Ddfs.balancer.moverThreads = 1024  
           -Ddfs.balance.bandwidthPerSec = 104857600 
           -policy  datanode  -threshold  5  -include -f host.txt
        fi
    else 
        echo "Nothing to do"
    fi
  • 相关阅读:
    ORACLE触发器简单列子
    接口测试中需要携带token的接口返回结果偶尔报无权限
    接口自动化测试用例偶尔报无权限的解决办法
    python中的faker库生成数据,并写入txt文本中
    anaconda在sys.path删除~/.local/lib
    题解12/12 模拟赛
    题解BalticOI 2020
    题解12/09 模拟赛
    亿些原古博客汇总
    bijective proof problems 选做
  • 原文地址:https://www.cnblogs.com/xinfang520/p/11209731.html
Copyright © 2011-2022 走看看