设为首页 收藏本站
查看: 1080|回复: 0

[经验分享] Apache kylin进阶

[复制链接]

尚未签到

发表于 2017-12-24 20:49:11 | 显示全部楼层 |阅读模式
一、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元数据损坏或不一致,可采用如下命令恢复:


  • cd ${KYLIN_HOME}
  • sh ./bin/metastore.sh reset
  • 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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427636-1-1.html 上篇帖子: BeanUtils.copyProperties 复制bean异常org.apache.commons.beanutils.ConversionExceptio 下篇帖子: WAMP下Apache配置Vhost (2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表