#!/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

Hadoop记录-HDFS均衡脚本的更多相关文章

  1. Hadoop记录-hdfs转载

    Hadoop 存档 每个文件均按块存储,每个块的元数据存储在namenode的内存中,因此hadoop存储小文件会非常低效.因为大量的小文件会耗尽namenode中的大部分内存.但注意,存储小文件所需 ...

  2. Hadoop记录-HDFS balancer配置

    HDFS balancer配置(可通过CM配置)dfs.datanode.balance.max.concurrent.moves 并行移动的block数量,默认5 dfs.datanode.bala ...

  3. Hadoop记录-HDFS配额Quota

    设置文件数配额 hdfs dfsadmin -setQuota <N> <directory>...<directory> 例如:设置目录下的文件总数为1000个h ...

  4. 介绍hadoop中的hadoop和hdfs命令

    有些hive安装文档提到了hdfs dfs -mkdir ,也就是说hdfs也是可以用的,但在2.8.0中已经不那么处理了,之所以还可以使用,是为了向下兼容. 本文简要介绍一下有关的命令,以便对had ...

  5. hadoop记录-hive常见设置

    分区表 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict;create tabl ...

  6. 深入理解Hadoop之HDFS架构

    Hadoop分布式文件系统(HDFS)是一种分布式文件系统.它与现有的分布式文件系统有许多相似之处.但是,与其他分布式文件系统的差异是值得我们注意的: HDFS具有高度容错能力,旨在部署在低成本硬件上 ...

  7. 大数据技术之Hadoop(HDFS)

    第1章 HDFS概述 1.1 HDFS产出背景及定义 1.2 HDFS优缺点 1.3 HDFS组成架构 1.4 HDFS文件块大小(面试重点) 第2章 HDFS的Shell操作(开发重点) 1.基本语 ...

  8. Apache Hadoop2.0之HDFS均衡操作分析

    1 HDFS均衡操作原理 HDFS默认的块的副本存放策略是在发起请求的客户端存放一个副本,如果这个客户端在集群以外,那就选择一个不是太忙,存储不是太满的节点来存放,第二个副本放在与第一个副本相同的机架 ...

  9. hadoop记录-Hadoop参数汇总

    Hadoop参数汇总 linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分区 设置合理的预读取缓冲区 ...

随机推荐

  1. 基于 Redis 实现简单的分布式锁

    摘要 分布式锁在很多应用场景下是非常有效的手段,比如当运行在多个机器上的不同进程需要访问同一个竞争资源的时候,那么就会涉及到进程对资源的加锁和释放,这样才能保证数据的安全访问.分布式锁实现的方案有很多 ...

  2. Django示例演示--?

    引用自:https://blog.csdn.net/weixin_42950386/article/details/83143293 定义模型类 模型类被定义在"应用/models.py&q ...

  3. RCNN,Fast RCNN,Faster RCNN 的前生今世:(1) Selective Search

    Selective Search for Object Recoginition 这篇论文是J.R.R. Uijlings发表在2012 IJCV上的一篇文章,主要介绍了选择性搜索(Selective ...

  4. java spring boot 导出/下载文本文件操作(包含写文本文件)

    内容简介 本文主要内容为使用java把内容写入文本文件,并实现下载/导出的功能. 实现步骤 1. controller层 @ResponseBody @RequestMapping(value = & ...

  5. PostgreSQL 索引坏块处理

    今天应用反应有张表查询报错,报错信息如下 back=# select max(create_time) from public.tbl_index_table where create_time> ...

  6. 1.7volatile关键字

    volatile volatile关键字的主要作用是使变量在多个线程间可见 使用方法: private volatile int number=0; 图示: 两个线程t1和t2共享一份数据,int a ...

  7. cube.js 学习(二)cube.js与 graphql2chartjs的比较

    cube.js 是目前看到从设计以及理念上很不错的数据分析事件,graphql2chartjs 是hasura graphql-engine 团队开发 的一个类库基于graphql,以下做一些比较 c ...

  8. npm 安装全局包 不是内部或外部命令的问题

    场景: npm已经安装成功  ,通过npm install -g 安装的 全局包 提示不是内部或外部命令 第一步: npm list -g --depth=0:查看npm全局包的路径,和有哪些安装包 ...

  9. mysqli扩展有一系列的优势,相对于mysql扩展的提升主要优势有哪些?

    mysqli扩展有一系列的优势,相对于mysql扩展的提升主要优势有哪些? 面向对象接口 prepared语句支持(译注:关于prepare请参阅mysql相关文档) 多语句执行支持 事务支持 增强的 ...

  10. dict 的 items() 方法与 iteritems() 方法的不同?

    items方法将所有的字典以列表方式返回,其中项在返回时没有特殊的顺序: iteritems方法有相似的作用,但是返回一个迭代器对象