【HDFS】存储balancer到底咋回事

本文探讨了HDFS中的balancer如何工作,用于解决集群存储倾斜问题。balancer作为一个独立程序运行,根据预设的阈值判断数据节点是否需要进行数据迁移。它将数据节点分为ABCD四类,计算过载和空载数据量,制定数据移动计划,并遵循机架感知策略,以确保数据安全性。balancer通过迭代过程实现集群的均衡。
摘要由CSDN通过智能技术生成

最近集群存储倾斜,个别节点存储超过85%,启动balancer之后效果明显,但是有时候balancer启动也不能解决问题。从运维阶段就知道有这么一个balancer,今天终于憋了一口气看看balancer到底咋回事。版本还是1.0.3

首先balancer在org.apache.hadoop.hdfs.server.balancer,balancer作为一个独立程序启动,听说之前是在namenode内部,这个还真没见过。

  public static void main(String[] args) {
    try {
      System.exit( ToolRunner.run(null, new Balancer(), args) );
    } catch (Throwable e) {
      LOG.error(StringUtils.stringifyException(e));
      System.exit(-1);
    }

  }

我擦,一看,是熟悉的ToolRunner,不用说Balancer就是个tool,重写run方法。

进去balancer的run看看吧。

run代码相对比较长,不全部贴出来了,一步步看一下吧。

 init(parseArgs(args));
首先是解析程序传递参数,然后执行init方法。什么程序参数?很简单,因为balancer是这么用的bin/start-balancer.sh -threshold 5,看到了吗,有个阈值,需要管理员指定。

这个阈值是啥下面再说,这个解析参数,就是拿到咱们threshold的值,这里是5,那就把5传给init。

    this.threshold = threshold;
    this.namenode = createNamenode(conf);//得到集群namenode对象
    this.client = DFSClient.createNamenode(conf);//弄一个客户端对象
    this.fs = FileSystem.get(conf);//文件系统对象
这就是init主要的方法,剩下的安全认证的这里就不说了,这里主要是弄个namenode的代理,弄个hdfs的客户端,然后弄个hdfs文件系统的对象。好了,继续:

      out = checkAndMarkRunningBalancer();
      /*任意时刻只能有一个balancer存在,如何判断?就是往集群写一个文件/system/balancer.id,写的时候本身会有已存在的报错返回null
       * 往里写的应该是byte类型的数据,即balancer所在的机器信息。
       * */
      if (out == null) {
        System.out.println("Another balancer is running. Exiting...");
        return ALREADY_RUNNING;
      }
这里一看,就是检查一下有木有balancer进程已经在工作了,这个方法很简单,程序写死了要往hdfs的/system/balancer.id这个文件写进去点东西,写的东西是balancer所在机器的信息:

  private OutputStream checkAndMarkRunningBalancer() throws IOException {
    try {
      DataOutputStream out = fs.create(BALANCER_ID_PATH);
      out. writeBytes(InetAddress.getLocalHost().getHostName());
      out.flush();
      return out;
看到了吗。然后写的过程中判断这个文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值