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

发布时间:2024年01月16日

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

????????好一次惊心动魄的冒险。

文章来源:https://blog.csdn.net/qq_40209679/article/details/135626359
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。