hadoop Balance 优化


  1. 优化拷贝带宽(带宽的设置是影响datanode,设置单个datanode的balance带宽上限):

    [-setBalancerBandwidth <bandwidth in bytes per second>]
    [@rm.tv.hadoop.sohuno.com ~]$ hdfs dfsadmin -setBalancerBandwidth 50000000
    Balancer bandwidth is set to 50000000 for nn.tv.hadoop.sohuno.com/10.10.34.89:8020
    Balancer bandwidth is set to 50000000 for rm.tv.hadoop.sohuno.com/10.10.34.90:8020

  2. 优化chooseNodes函数中选择source和dest的规则
    若有机器磁盘使用率很高,则只拷贝over的。
    若有新加入的机器,则只向under拷贝。
  3. 可以加大MAX_SIZE_TO_MOVE,使每次迭代中datanode拷贝更多的数据。默认是10GB
    final private static long MAX_SIZE_TO_MOVE = 10*1024*1024*1024L; //10GB
  4. 加大每台datanode的并行拷贝数:
    在balancer启动机器hdfs-site.xml中修改配置:dfs.datanode.balance.max.concurrent.moves  默认为5。同时需要修改source机器的该属性,否则会报异常,并且不生效。
  5. 由于4的限制,会导致balancer线程在datanode并行拷贝达到上限的时候无法继续运行,

    方案一:在shouldFetchMoreBlocks()判断失败的时候不退出(将else全部注释掉)。

    方案二:将MAX_NO_PENDING_MOVE_ITERATIONS 值改大,确保有足够的等待时间等那5个move完成。(默认值是5)

    if (shouldFetchMoreBlocks()) {
      // fetch new blocks
      try {
        blocksToReceive -= getBlockList();
        continue;
      } catch (IOException e) {
        LOG.warn("Exception while getting block list", e);
        return;
      }
    } else {
      // source node cannot find a pendingBlockToMove, iteration +1
      noPendingBlockIteration++;
      // in case no blocks can be moved for source node's task,
      // jump out of while-loop after 5 iterations.
      if (noPendingBlockIteration >= MAX_NO_PENDING_BLOCK_ITERATIONS) {
        setScheduledSize(0);
      }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值