zoukankan      html  css  js  c++  java
  • Apache kylin进阶——元数据篇

    一、Apache kylin元数据的存储

    Apache kylin的元数据包括 立方体描述(cube description),立方体实例(cube instances)项目(project)、作业(job)、表(table)、字典(dictionary),参见: Apache kylin 核心概念。在kylin集群中至关重要,假如元数据丢失,kylin集群将无法工作。

    在kylin 的设计中,元数据存储的类图如下:

    可见kylin提供了两种方式存储元数据,一般而言,集群模式的元数据都选择在hbase中存储。在${KYLIN_HOME}/conf/kylin.properties中,元数据的默认配置如下:

    kylin.metadata.url=kylin_metadata@hbase 
    

    kylin_metadata@hbase表示,元数据存储在hbase中的kylin_metadata表中。HBaseResourceStore#HBaseResourceStore的参考代码如下:

    public HBaseResourceStore(KylinConfig kylinConfig) throws IOException {
            super(kylinConfig);
    
            String metadataUrl = kylinConfig.getMetadataUrl();
            // split TABLE@HBASE_URL
            int cut = metadataUrl.indexOf('@');
            tableNameBase = cut < 0 ? DEFAULT_TABLE_NAME : metadataUrl.substring(0, cut);
            hbaseUrl = cut < 0 ? metadataUrl : metadataUrl.substring(cut + 1);
    
            createHTableIfNeeded(getAllInOneTableName());
        }
    

    如若存储kylin元数据在本地文件系统中,需将kylin.metadata.url 指向本地文件系统的一个绝对路径, 如:可在${KYLIN_HOME}/conf/kylin.properties中配置如下:

    kylin.metadata.url=/home/${username}/${kylin_home}/kylin_metada

    注意,一定要是绝对路径,否则会出现错误。

    当选择元数据存储在hbase中时,并非所有的数据都在hbase中,当待存储的记录(通常是key-value pairs)的value大于一个最大值kvSizeLimit时,数据将被保存在HDFS中,默认路径为:/kylin/kylin_metadata/,相关配置项在${KYLIN_HOME}/conf/kylin.properties中,如下:

    • kylin.hdfs.working.dir=/kylin
    • kylin.metadata.url=kylin_metadata@hbase

    HBaseResourceStore#buildPut的参考代码如下:

    private Put buildPut(String resPath, long ts, byte[] row, byte[] content, HTableInterface table) throws IOException {
            int kvSizeLimit = this.kylinConfig.getHBaseKeyValueSize();
            if (content.length > kvSizeLimit) {
                writeLargeCellToHdfs(resPath, content, table);
                content = BytesUtil.EMPTY_BYTE_ARRAY;
            }
    
            Put put = new Put(row);
            put.add(B_FAMILY, B_COLUMN, content);
            put.add(B_FAMILY, B_COLUMN_TS, Bytes.toBytes(ts));
    
            return put;
        }
    

    kvSizeLimit 的获取代码如下:

    public int getHBaseKeyValueSize() {
            return Integer.parseInt(this.getOptional("kylin.hbase.client.keyvalue.maxsize", "10485760"));
        }
    

    默认值为10M,可在在${KYLIN_HOME}/conf/kylin.properties中配置:

    kylin.hbase.client.keyvalue.maxsize=10485760

    注意,该值的大小十分重要,因为kylin为了提高整体性能将hbase中的元数据缓存在hbase内存中,如下图:

    随着每天 cube的增量build,该表会越来越大。假如不及时清理历史数据,将会使hbase的进程发生 OutOfMemoryError错误!这里kvSizeLimit需在性能和内存大小之间做一个权衡。

    二、Apache kylin元数据的运维

    当前kylin的元数据只提供了冷备份的方式。

    可利用crontab 在${KYLIN_HOME}下,每天定时执行./bin/metastore.sh backup命令,kylin会将元数据信息保存如下目录:

    ${KYLIN_HOME}/meta_backups/meta_year_month_day_hour_minute_second

    当kylin元数据损坏或不一致,可采用如下命令恢复:

    1. cd ${KYLIN_HOME}
    2. sh ./bin/metastore.sh reset
    3. sh ./bin/metastore.sh restore ./meta_backups/meta_xxxx_xx_xx_xx_xx_xx

    参考文档:

    [1].http://kylin.apache.org/docs15/howto/howto_backup_metadata.html

  • 相关阅读:
    MQTT---HiveMQ源代码具体解释(四)插件载入
    HTTP访问控制(CORS)
    java实现限流
    Orika的使用姿势,Orika java bean copy 框架
    uploadify是通过flash上传,服务器获取type为application/octet-stream
    ThinkPHP 5使用 Composer 组件名称可以从https://packagist.org/ 搜索到
    3种方法轻松处理php开发中emoji表情的问题
    解决thinkphp设置session周期无效的问题
    如何使用沙箱测试单笔转账到支付宝账号(php版) https://openclub.alipay.com/read.php?tid=1770&fid=28
    微信jssdk批量添加卡券接口
  • 原文地址:https://www.cnblogs.com/mistor/p/6699049.html
Copyright © 2011-2022 走看看