kylin集群负载均衡(kylin3,hbaseRIF问题)

1 篇文章 0 订阅
本文讲述了作者在HBase集群环境中遇到内存集中于一台机器的问题,通过查找和分析发现是由于过时的Phoenix测试数据导致的。作者尝试了资源分配和手动删除元数据两种解决方案,最终成功解决了问题并实现了负载均衡。
摘要由CSDN通过智能技术生成

hbase历险记

目录

hbase历险记

寻找问题

分析原因

解决方案

方案1(资源问题、失败)

方案2(成功)


寻找问题

        不知道你是不是有这样的疑惑。我kylin是个单机,我使用的hbase是个集群,但内存全在某一台机器上了。其实,这里kylin是单机还是集群都无所谓的,但hbase作为存储,为什么集群内存占用到了一台。

        我就在hbase shell中使用了hbase负载均衡的命令

balance_switch true

        过了一会发现并没有用。

        我就用knox做了网关,把hbase的页面信息代理了出来,进去浏览了一圈发现了

        

        通过网上的寻找,就是它。

分析原因

        通过反复查看寻找到了那个region的蛛丝马迹

        

        这里面就发现了,这个table记录了相当多的phoenix信息,而phoenix,是我以前用于测试同步数据的,现在早已没用了,而图中的那个1,就是目前仅存在的问题,进去看看。

        

        通过进入这个表,成功发现了这就是一个region,无法完成regionServer的分配,一直尝试造成的。

解决方案

        通过查阅资料,发现如下两种。

  • 手动分配
  • 主动删除

这里提前解释一下,为什么我两种方案都尝试了。虽然我在前面已经发现这个region现在就是个垃圾,但我抱着宁烂误缺的态度想试一下。

方案1(资源问题、失败)

        进入hbase的客户端,我执行了。

assign '3696b0faae0b67cdfe1627afd107cb2e'

        但过了一会,发现了问题,我的服务器资源疯狂飙升,我想赶快停了,这下麻烦了,磁盘越来越多。

        后面通过查询,发现了我没对WAL 文件做限制,他最终会导致我磁盘全部占满,而所有服务都无法运行。

        所以我想不尝试了,直接迅速快照、关闭hbase集群、删除/hbase/MasterProcWALs无用文件,删除回收站文件、添加配置、重启。

        限制WAL文件配置如下,添加到hbase-site.xml中:

<!-- 限制 WAL 文件的最大大小,以防止过大的 MasterProcWALs 文件 -->
<property>
     <name>hbase.regionserver.hlog.maxfilesize</name>
     <value>1073741824</value> <!-- 1 GB,根据需要进行调整 -->
</property>
<property>
    <name>hbase.regionserver.hlog.roll.multiplier</name>
    <value>0.95</value>
</property>
<property>
    <name>hbase.master.logcleaner.ttl</name>
    <value>600</value> <!-- 10分钟,根据需要进行调整 -->
</property>

        还好重启后没有异常。

方案2(成功)

        上面不行,那我就直接删除元数据了,执行删除命令,

deleteall 'hbase:meta','SYSTEM:LOG,\x08\x00\x00\x00,1615171260407.3696b0faae0b67cdfe1627afd107cb2e.'

发现了 0 row受影响。

        我突然反映过来无法识别\x,或者转义成了其他字符。然后我用匹配查询试一下,

        发现了我还没办法直接删了。果断使用java程序来删除。

        代码如下:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

/**
 * @author 
 * @version 1.0
 * @date 2024/1/16 14:13
 * @desc :
 */
public class DeleteFromMetaTable {
    public static void main(String[] args) throws Exception {
        Configuration config = HBaseConfiguration.create();
        try (Connection connection = ConnectionFactory.createConnection(config);
             Table metaTable = connection.getTable(TableName.valueOf("hbase:meta"))) {

            // Specify the row key you want to delete
            byte[] rowKey = Bytes.toBytes("SYSTEM:LOG,\u0008\u0000\u0000\u0000,1615171260407.3696b0faae0b67cdfe1627afd107cb2e.");

            // Create Delete object with the specified row key
            Delete delete = new Delete(rowKey);

            // Execute the delete operation
            metaTable.delete(delete);

            System.out.println("Delete operation completed.");
        }
    }
}

           注意我已经将\x替换。

        打包,上传,运行,出现了:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration

        接着我又修改了hadoop-env.sh文件,添加了

        

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/app/software/hbase-2.0.0/lib/*

        这个需要根据自己的hbase相关jar包决定。分发集群(无需重启)

        再运行java程序,成功。

        接下来关闭hbase集群,删除hdfs上/hbase/MasterProcWALs的文件。重启集群。

        进入到hbase页面查看(需等一会),发现,异常的region已经不在。

        接下来是负载均衡问题,一般是自动开启的。页面查看

       手动触发:

hbase(main):001:0> balance_switch true

        好一次惊心动魄的冒险。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值