#!/bin/bash

export JAVA_HOME=xxx
export HADOOP_HOME=xxx
export HADOOP_CONF_DIR=xxx cd /home/hdfs/xxx mv host.txt host.txt_`date +"%Y-%m-%d"`
mv host.txt_`date +"%Y-%m-%d"` host/ mv hostdfs.txt hostdfs.txt_`date +"%Y-%m-%d"`
mv hostdfs.txt_`date +"%Y-%m-%d"` host/ rm -f ip.txt
rm -f allhostname.txt
rm -f hostname.txt
rm -f iphostname.txt
rm -f dfused.txt
rm -f minhost.txt
rm -f maxhost.txt
rm -f host.txt
rm -f nohup.out
rm -f dfsreport.txt echo "start checking hdfs used rate"
$HADOOP_HOME/bin/hdfs dfsadmin -report > dfsreport.txt
cat dfsreport.txt | grep -i "50010" | awk -F ":" '{print $2}'| awk '{print $1}' > ip.txt
cat dfsreport.txt | grep -i "hostname" | awk -F ": " '{print $2}' > allhostname.txt
cat dfsreport.txt | grep "DFS Used%" | awk -F ": " '{print $2}' | awk -F "%" '{print $1}' > dfused.txt
livesum=$(cat dfsreport.txt | grep "Live datanodes" | awk '{print $3}' | awk -F "):" '{print $1}' | awk -F "(" '{print $2}')
echo $livesum
sed -i '1d' dfused.txt
let livesum+=1
sed -i $livesum',$d' dfused.txt
sed -i $livesum',$d' ip.txt
linesum=$(cat ip.txt | wc -l)
echo $linesum
harr=($(awk '{print $1}' ip.txt))
darr=($(awk '{print $1}' dfused.txt))
if [ $linesum -gt 0 ]
then
for (( i = 0 ; i < ${#harr[@]} ; i++ ))
do
for (( j = 0 ; j < ${#darr[@]} ; j++ ))
do
if [ $i -eq $j ]
then
echo ${harr[$i]} ":" ${darr[$j]} >> hostdfs.txt
fi
done
done
else
echo "Not Live Datanodes"
fi
hharr=($(cat hostdfs.txt | awk '{print $3}' |sort -ru | tail -n 60))
ddarr=($(cat hostdfs.txt | awk '{print $3}' |sort -ru | head -n 100))
for (( k = 0; k< ${#hharr[@]} ; k++ ))
do
if [[ $(echo $(cat hostdfs.txt) | grep "${hharr[$k]}") != "" ]]
then
cat hostdfs.txt | grep "${hharr[$k]}" | awk 'NR==1{print $1}' >> minhost.txt
fi
done
for (( m = 0; m< ${#ddarr[@]} ; m++ ))
do
if [[ $(echo $(cat hostdfs.txt) | grep "${ddarr[$m]}") != "" ]]
then
cat hostdfs.txt | grep "${ddarr[$m]}" | awk 'NR==1{print $1}' >> maxhost.txt
fi
done cat maxhost.txt | awk '{print $1}' >> host.txt
cat minhost.txt | awk '{print $1}' >> host.txt narr=($(cat allhostname.txt | awk '{print $1}'))
for (( k = 0; k< ${#harr[@]}; k++ ))
do
for (( n = 0; n < ${#narr[@]}; n++))
do
if [ $k -eq $n ]
then
echo ${harr[$k]} ":" ${narr[$n]} >>iphostname.txt
fi
done
done hostarr=($(cat host.txt | awk '{print $1}'))
for (( c = 0; c < ${#hostarr[@]} ; c++ ))
do
if [[ $(echo $(cat iphostname.txt) | grep "${hostarr[$c]}") != "" ]]
then
cat iphostname.txt | grep "${hostarr[$c]}" | awk 'NR==1{print $3}' >> hostname.txt
fi
done max_rate=$(cat dfused.txt | sort -r | head -n 1 | awk '{print int($0)}')
avg_used_rate=$(cat dfused.txt | awk '{e+=$1}END{print e/NR}' | awk '{print int($0)}' )
let max_avg_diff=max_rate-avg_used_rate if [ $max_avg_diff -gt 5 ]
then
jps | grep -i "balancer"
if [ $? -eq 0 ]
then
kill -9 $($JAVA_HOME/bin/jps | grep -i "balancer" | awk 'NR==1{print $1}')
fi
$HADOOP_HOME/bin/hdfs dfs -mv /system/balancer.id /system/balancer.id_`date +"%Y-%m-%d-%H-%M"`
nohup $HADOOP_HOME/bin/hdfs balancer -policy datanode -threshold 5 -include -f host.txt > /home/hdfs/balancer/rebalancer.log 2>&1 &
else
echo "Nothing to do"
fi

$ nohup hdfs balancer \
-Ddfs.datanode.balance.max.concurrent.moves = 10 \
-Ddfs.balancer.dispatcherThreads = 1024 \
-Ddfs.balance.bandwidthPerSec = 1073741824

#此配置用于限制允许Datanode平衡群集的最大并发块移动数
dfs.datanode.balance.max.concurrent.moves, default is 5
#带宽
dfs.datanode.balance.bandwidthPerSec, default is 1048576 (=1MB/s)
dfsadmin -setBalancerBandwidth <bandwidth in bytes per second>
#mover线程数
dfs.balancer.moverThreads, default is 1000
#datanode传输的最大线程数
dfs.datanode.max.transfer.threads
修改dfs.datanode.max.transfer.threads=4096 (如果运行HBase的话建议为16384),
指定用于在DataNode间传输block数据的最大线程数,老版本的对应参数为dfs.datanode.max.xcievers。
#平衡策略,默认为datanode
[-policy <policy>]
blockpool: Cluster is balanced if each pool in each node is balanced.
datanode: Cluster is balanced if each datanode is balanced.
#阈值
[-threshold <threshold>] [1.0, 100.0]
#包含列表
[-include [-f <hosts-file> | <comma-separated list of hosts>]]
#排除列表
[-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
#最大移动数据大小
dfs.balancer.max-size-to-move, default is 10737418240 (=10GB)

Linux记录-shell获取hdfs used使用的更多相关文章

  1. Linux记录-shell获取hdfs表查询mysql

    #!/bin/sh hdfs dfs -ls /user/hive/warehouse | awk '{print $8}' | awk -F "/" '{print $5}' & ...

  2. linux中用shell获取昨天、明天或多天前的日期

    linux中用shell获取昨天.明天或多天前的日期 时间 -- :: BlogJava-专家区 原文 http://www.blogjava.net/xzclog/archive/2015/12/0 ...

  3. linux中用shell获取时间,日期

    linux中用shell获取昨天.明天或多天前的日期:在Linux中对man date -d 参数说的比较模糊,以下举例进一步说明:# -d, --date=STRING display time d ...

  4. Linux记录-shell 100例(转载)

    1.编写hello world脚本 #!/bin/bash # 编写hello world脚本 echo "Hello World!" 2.通过位置变量创建 Linux 系统账户及 ...

  5. Linux记录-shell实现脚本监控服务器及web应用

    1.apache web 服务器 1 2 3 4 5 6 7 8 9 10 !/bin/bash # 表示请求链接3秒钟,不要返回的测试数据 nc -w 3 localhost 80 &> ...

  6. Linux记录-shell一行代码杀死进程(收藏)

    ps -ef |grep hello |awk '{print $2}'|xargs kill -9

  7. Linux记录-Shell自动化部署批量建立用户和批量SSH配置(转载)

    if [ ! $# -eq 2 ] ; then echo "请输入用户名和密码以空格分开!" exit else name="$1" passwd=" ...

  8. Linux记录-shell自动化批量部署sql脚本并记录日志信息(转载)

    #!/bin/bash #script_version=v110 db_host=127.0.0.1 db_port=3306 db_username=db_test_inst db_passwd=` ...

  9. linux在shell中获取时间

    linux在shell中获取时间 获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今 ...

随机推荐

  1. 复习 LIS nlogn

    参考:https://www.cnblogs.com/wxjor/p/5524447.html 最长下降只要把符号都倒过来就行 在栈中二分找第一个比当前值小的替换就行

  2. bzoj 4542: [Hnoi2016]大数 (莫队)

    Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...

  3. 【CodeForces706E】Working routine(二维链表)

    BUPT2017 wintertraining(15) #6B 题意 q次操作,每次把两个给定子矩阵交换,求最后的矩阵.(2 ≤ n, m ≤ 1000, 1 ≤ q ≤ 10 000) 题解 用R[ ...

  4. 08 Zabbix4.0系统配置事件通知 - 动作Action

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 08 Zabbix4.0系统配置事件通知 - 动作Action 请点击查看Zabbix3.0.8版 ...

  5. 【AtCoder2134】ZigZag MST(最小生成树)

    [AtCoder2134]ZigZag MST(最小生成树) 题面 洛谷 AtCoder 题解 这题就很鬼畜.. 既然每次连边,连出来的边的权值是递增的,所以拿个线段树xjb维护一下就可以做了.那么意 ...

  6. Codeforces 1079D Barcelonian Distance(计算几何)

    题目链接:Barcelonian Distance 题意:给定方格坐标,方格坐标上有两个点A,B和一条直线.规定:直线上沿直线走,否则沿方格走.求A到B的最短距离. 题解:通过直线到达的:A.B两点都 ...

  7. NOIP2013华容道(BFS+乱搞)

    n<=30 * m<=30 的地图上,0表示墙壁,1表示可以放箱子的空地.q<=500次询问,每次问:当空地上唯一没有放箱子的空格子在(ex,ey)时,把位于(sx,sy)的箱子移动 ...

  8. A.01.01—模块的输入—低端输入

    汽车电子模块的输入一般包含数字量低端输入.数字量高端输入.模拟量输入.脉宽调制输入.总线信号输入.脉冲信号输入,对于无线信号输入和视频信号音频信号我们不做讨论. 数字量低端输入是应用最为广泛的一种输入 ...

  9. 简单两步 ~ 绕过 "Paused in debugger"

    不BB,上图 然后刷新一下就ok了~再也不能阻止我们查看源码了~ 补充:(屏蔽在Sources里面)

  10. 关于python的GIL全局解释器锁的简单理解

    GIL是解释器内部的一把锁,确切一点说是CPython解释器内部的一把锁,所以要注意区分 这和我们在Python代码中使用线程锁Lock并不是一个层面的概念. 1. GIL产生的背景: 在CPytho ...