Kylin HDFS 目录清理

Kylin 会在 HDFS 上生成文件,根目录是 /kylin,然后会使用 Kylin 集群的元数据表名作为第二层目录名,默认为 “kylin_metadata” (可以在 conf/kylin.properties 中定制)

通常, /kylin/kylin_metadata 目录下会有这么几种子目录:cardinality, coprocessor, kylin-job_id, resources, jdbc-resources

  1. cardinality: Kylin 加载 Hive 表时,会启动一个 MR 任务来计算各个列的基数,输出结果会暂存在此目录。此目录可以安全清除。
  2. coprocessor: Kylin 用于存放 HBase coprocessor jar 的目录;请勿删除。
  3. kylin-job_id: Cube 计算过程的数据存储目录,请勿删除。 如需要清理,请遵循 storage cleanup guide.
  4. resources: Kylin 默认会将元数据存放在 HBase,但对于太大的文件(如字典或快照),会转存到 HDFS 的该目录下,请勿删除。如需要清理,请遵循 cleanup resources from metadata
  5. jdbc-resources:性质同上,只在使用 MySQL 做元数据存储时候出现。

Storage cleanup guide

在创建多维数据集的过程中,Kylin 将在 HDFS 上生成中间文件;此外,当清除/删除/合并多维数据集时,一些 HBase 表可能会留在 HBase 中,不再被查询;尽管 Kylin 已经开始做一些自动垃圾收集,但可能不会覆盖所有情况;可以定期手动清理:

  1. 检查哪些资源可以清理,这不会删除任何内容:
> ${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.StorageCleanupJob --delete false
  1. 可以选择1或2个资源以检查它们是否不再被引用;然后添加“–delete true”选项以开始清理
> ${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.StorageCleanupJob --delete true

Hive 中间表、HDFS 文件和 HBase table 应该被删除了

  1. 如果要删除所有资源,请添加“–force true”选项以开始清理:
> ${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.StorageCleanupJob --force true --delete true

Cleanup resources from metadata

Kylin 将其所有元数据存储在 HBase 中,Kylin 配置文件(kylin.properties)有这样一行:

## The metadata store in hbase
kylin.metadata.url=kylin_metadata@hbase

这表示元数据将保存为名为 kylin_metadata 的 HBase 表。

元数据目录

Kylin 将元数据(包括多维数据集描述和实例、项目、反向索引描述和实例、作业、表和字典)组织为层次结构,使用【资源根路径(resource root path)+资源名称(resource name)+资源后缀(resource suffix)】作为 Rowkey 来存储元数据。例如:

Resource root path resource name resource suffix
/cube /cube name .json
/cube_desc /cube name .json
/cube_statistics /cube name/uuid .seq
/model_desc /model name .json
/dict /DATABASE.TABLE/COLUMN/uuid .dict
/project /project name .json
/table_snapshot /DATABASE.TABLE/uuid .snapshot
/table /DATABASE.TABLE–project name .json
/table_exd /DATABASE.TABLE–project name .json
/execute /job id
/execute_output /job id-step index
/kafka /DATABASE.TABLE .json
/streaming /DATABASE.TABLE .json
/user /user name

查看元数据

如果要查看某些元数据,可以运行:

> ./bin/metastore.sh list /path/to/store/metadata

要列出存储在指定目录中的实体,可以运行(查看一个实体元数据):

> ./bin/metastore.sh cat /path/to/store/entity/metadata.

用二进制包备份元数据

有时需要将 Kylin 的元数据存储从 HBase 备份到磁盘文件系统。可以运行:

> ./bin/metastore.sh backup

将元数据转储到本地文件夹 $kylin_home/metadata_backps 下的文件夹(以当前时间命名 meta_year_month_day_hour_minute_second

此外,还可以运行:

> ./bin/metastore.sh fetch /path/to/store/metadata

有选择地转储元数据。例如,运行 ./bin/metastore.sh fetch /cube_desc/ 以获取所有多维数据集描述元数据,或运行 ./bin/metastore.sh fetch /cube_desc/kylin_sales_cube.json 以获取单个多维数据集描述元数据。

用二进制包还原元数据

如果发现元数据存储区出错,并且希望还原到以前的备份。首先,重置元数据存储(这将清除 HBase 中 Kylin 元数据存储的所有内容,确保备份):

> ./bin/metastore.sh reset

然后将备份元数据上载到 Kylin 的元数据存储:

> ./bin/metastore.sh restore $KYLIN_HOME/meta_backups/meta_xxxx_xx_xx_xx_xx_xx

有选择地还原元数据(推荐)

如果只更改了几个元数据文件,管理员就可以选择要还原的这些文件,而不必覆盖所有元数据。与完全恢复相比,这种方法更有效、更安全,因此建议采用。创建一个新的空目录,然后根据要还原的元数据文件的位置在其中创建子目录;例如,要还原多维数据集实例,应创建一个“多维数据集”子目录:

> mkdir /path/to/restore_new
> mkdir /path/to/restore_new/cube

将要还原的元数据文件复制到此新目录:

> cp meta_backups/meta_2016_06_10_20_24_50/cube/kylin_sales_cube.json /path/to/restore_new/cube/

此时,可以手动修改/修复元数据

> cd $KYLIN_HOME
> ./bin/metastore.sh restore /path/to/restore_new

只有文件夹中的文件将恢复到 Kylin Metastore。类似地,恢复完成后,单击 Web 界面上的“Reload Metadata”按钮以刷新缓存。

从元数据存储中清除未使用的资源

随着时间的推移,一些资源(如 dictionary、table snapshot)变得无用(随着多维数据集段被删除或合并),但它们仍然占用空间;可以运行命令从元数据存储中查找和清理它们:
首先,运行检查,这是安全的,不会更改任何内容,可以通过添加“–jobThreshold 30”选项来设置保留元数据资源的天数(列出将要删除的资源):

> ./bin/metastore.sh clean --jobThreshold 30

接下来,添加“–delete true”参数以清除这些资源;在此之前,请确保已备份元数据存储;

> ./bin/metastore.sh clean --delete true --jobThreshold 30

Tags:

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注