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 n
kylin_metadata@hbase表示,元數據存儲在hbase中的kylin_metadata表中。HBaseResourceStore#HBaseResourceStore的參考代碼如下:
public HBaseResourceStore(KylinConfig kylinConfig) throws IOException {n super(kylinConfig);nn String metadataUrl = kylinConfig.getMetadataUrl();n // split TABLE@HBASE_URLn int cut = metadataUrl.indexOf(@);n tableNameBase = cut < 0 ? DEFAULT_TABLE_NAME : metadataUrl.substring(0, cut);n hbaseUrl = cut < 0 ? metadataUrl : metadataUrl.substring(cut + 1);nn createHTableIfNeeded(getAllInOneTableName());n }n
如若存儲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 {n int kvSizeLimit = this.kylinConfig.getHBaseKeyValueSize();n if (content.length > kvSizeLimit) {n writeLargeCellToHdfs(resPath, content, table);n content = BytesUtil.EMPTY_BYTE_ARRAY;n }nn Put put = new Put(row);n put.add(B_FAMILY, B_COLUMN, content);n put.add(B_FAMILY, B_COLUMN_TS, Bytes.toBytes(ts));nn return put;n }n
kvSizeLimit 的獲取代碼如下:
public int getHBaseKeyValueSize() {n return Integer.parseInt(this.getOptional("kylin.hbase.client.keyvalue.maxsize", "10485760"));n }n
默認值為10M,可在在${KYLIN_HOME}/conf/kylin.properties中配置:
kylin.hbase.client.keyvalue.maxsize=10485760
注意,該值的大小十分重要,因為kylin為了提高整體性能將hbase中的元數據緩存在hbase內存中,如下圖:
二、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,翻譯一篇大神的文章
※在數據採集上的痛苦、幻想與失望
※RHadoop環境的搭建基礎
※如何成為數據驅動型公司