Apache kylin進階——元數據篇

1、Apache kylin元數據的存儲

Apache kylin的元數據包括 立方體描述(cube description),立方體實例(cube instances)項目(project)、做業(job)、表(table)、字典(dictionary),參見: Apache kylin 核心概念。在kylin集羣中相當重要,假如元數據丟失,kylin集羣將沒法工做。html

在kylin 的設計中,元數據存儲的類圖以下:java

可見kylin提供了兩種方式存儲元數據,通常而言,集羣模式的元數據都選擇在hbase中存儲。在${KYLIN_HOME}/conf/kylin.properties中,元數據的默認配置以下:apache

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中,以下:ui

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

HBaseResourceStore#buildPut的參考代碼以下:this

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 的獲取代碼以下:url

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

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

kylin.hbase.client.keyvalue.maxsize=10485760

注意,該值的大小十分重要,由於kylin爲了提升總體性能將hbase中的元數據緩存在hbase內存中,以下圖:

隨着天天 cube的增量build,該表會愈來愈大。假如不及時清理歷史數據,將會使hbase的進程發生 OutOfMemoryError錯誤!這裏kvSizeLimit需在性能和內存大小之間作一個權衡。

2、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

相關文章
相關標籤/搜索