多套Kylin集群共享Hbase和Hadoop计算集群关键配置最佳实践

由于Kylin的本身架构(广播特性)和业务特点通常不适用于单套Kylin集群的节点过多,通常大家采用拆分Kylin集群但是共用底层的Hbase集群和计算集群的方式进行部署。本文主要根据目前咱们的实践经验对于此种场景集群配置进行分享,希望对大家有所帮助。

Kylin的版本为社区上最新的3.x版本。

一、部署环境

•Kylin集群:

当前有两套Kylin集群(kylin-cluster01,kylin-cluster02);

•部署方式:

(1)采用计算集群和存储集群分离的方式进行部署

(2)这两套Kylin集群均使用同一套存储集群(Hbase01),即两个Kylin集群共用一套HBase集群

(3)这两套Kylin集群均使用同一套计算集群(Hadoop01),即两套Kylin集群均使用同一套计算Hadoop集群

二、配置

Kylin集群的配置主要是配置在KYLIN_HOME/conf/kylin.properties文件, 本文所述的配置均是在此配置文件中配置,KYLIN_HOME为Kylin的安装目录。

HBase存储相关配置

kylin.metadata.url=BIGDATA_KYLIN:kylin_meadata@hbase tablename一定不要与kylin.storage.hbase.table-name-prefix中的前缀配置一样,否则使用tool删除将会删除meta表

代码语言:javascript
复制
 kylin.metadata.url :指定元数据存储方式和路径。两个Kylin集群的此配置一定要**不相同**,值的格式为:namespace:tablename@store_type。此配置分为两部分,@为分隔符:
  (1)、@后的部分表示此Kylin集群使用什么作为存储,可以配置为:hbase、hdfs、ifile、jdbc。咱们用hbase,所以咱们后部分固定为@hbase。
  (2)、@前的部分有至少如下几个用途:
          a、Kylin集群的元数据在hbase中的存储表名以及表对应的namespace,namespace可以不配配置,不配做则为tablename@hbase,这个tablename一定不要与kylin.storage.hbase.table-name-prefix中的前缀一样,否则使用工具类删除数据的时候可能会误删除meta表;
          b、与kylin.env.hdfs-working-dir的值拼接成计算集群和存储集群的Kylin HDFS工作目录,拼接方式为:ylin.env.hdfs-working-dir的值+”/“+ @之前的部分(冒号 :变为中横线 —) ;
          c、与kylin.env.hdfs-metastore-bigcell-dir拼接为bigcell-dir的存储路径,拼接方式为:kylin.env.hdfs-metastore-bigcell-dir的值+”/“+ @之前的部分(冒号 :变为中横线 —);
          d、如果kylin.server.cluster-name 集群名没有设置值,则@前面部分还会作为cluster-name的值。
  (3)、配置例子:
      kylin-cluster01:
          kylin.metadata.url=BIGDATA_KYLIN:kylin01_meadata@hbase
        kylin-cluster02:
           kylin.metadata.url=BIGDATA_KYLIN:kylin02_meadata@hbase

kylin.env.hdfs-metastore-bigcell-dir=/user/prod_kylin/kylin_engine2/

代码语言:javascript
复制
kylin.env.hdfs-metastore-bigcell-dir是大的字典存储的目录,所以一定要配置一个Hbase集群的某个HDFS目录。如果此配置不配,将会从kylin.env.hdfs-working-dir获取值但是会将schemal替换成存储集群(hbase)的schemal
两个Kylin集群不要配成一样的目录。

kylin.storage.hbase.cluster-fs=hdfs://storagepre/hbase

代码语言:javascript
复制
kylin.storage.hbase.cluster-fs  指明 HBase 集群hbase存储的 HDFS 根目录值为hbase-site.xml中“hbase.rootdir”的值。
因为共用一个HBbase集群,故两个集群此处配置一致。

kylin.storage.hbase.namespace=BIGDATA_KYLIN kylin.storage.hbase.table-name-prefix=KYLIN_

代码语言:javascript
复制
(1)、定义:
   kylin.storage.hbase.namespace 指明应在hbase中table的namsespace,建议每个kylin集群配置不一样
    kylin.storage.hbase.table-name-prefix   指明segment对应在hbase中table name的前缀,建议每个kylin集群配置不一样。
(2)、配置例子:
 kylin-cluster01 :
    kylin.storage.hbase.namespace=BIGDATA_KYLIN01
    kylin.storage.hbase.table-name-prefix=KYLIN01_
 kylin-cluster02 :
    kylin.storage.hbase.namespace=BIGDATA_KYLIN02
    kylin.storage.hbase.table-name-prefix=KYLIN02_

Hadoop计算集群相关配置

kylin.env.hdfs-working-dir=hdfs://ns00/user/kylin/kylin_engine/

代码语言:javascript
复制
(1)、 定义:
 - kylin.env.hdfs-working-dir 指定 Kylin 服务所用的 HDFS 路径,每个Kylin集群的此配置值也尽量不要相同。当然每个集群真实的工作目录还会拼接上 kylin.storage.hbase.cluster-fs的值,参考kylin.storage.hbase.cluster-fs配置。配置相同对集群运维可能会造成一些不必要的麻烦。
 - kylin.env.hdfs-working-dir可能还会作为kylin.env.hdfs-metastore-bigcell-dir值,如果kylin.env.hdfs-metastore-bigcell-dir没有配置值的话,但是会把schemal自动换成存储集群的。

(2)、配置例子:
kylin-cluster01 配置的值可为 hdfs://ns00/user/kylin/kylin_cluster01/
kylin-cluster02 配置的值可为 hdfs://ns00/user/kylin/kylin_cluster02/

kylin.engine.livy-conf.livy-key.file=hdfs://ns00/user/kylin/kylin_engine/BIGDATA_KYLIN-kylin_meadata_test/livy/kylin-job-3.0.0-1-SNAPSHOT.jar

代码语言:javascript
复制
(1)、定义:
kylin.engine.livy-conf.livy-key.file 当需要使用spark livy 构建时,配置kylin 构建jar包在HDFS上的位置。此处的jar包配置需要每个集群互不影响,配置不同的目录,否则升级会互相影响,不用spark livy构建可以忽略此配置。
(2)、配置例子:
kylin-cluster01 配置的值可为 hdfs://ns00/user/kylin/kylin_cluster00/ /BIGDATA_KYLIN-kylin_meadata_test/livy/kylin-job-3.0.0-1-SNAPSHOT.jar
kylin-cluster02 配置的值可为 hdfs://ns00/user/kylin/kylin_cluster02/ /BIGDATA_KYLIN-kylin_meadata_test/livy/kylin-job-3.0.0-1-SNAPSHOT.jar

kylin.source.hive.database-for-flat-table=bigdata_kylin kylin.source.hive.databasedir-for-flat-table=hdfs://ns00/user/prod_kylin/kylin/hive/bigdata_kylin

代码语言:javascript
复制
(1)、定义:
a、kylin.source.hive.database-for-flat-table为构建时flat-table的hive database name,两个集群需要使用不同的database;
b、kylin.source.hive.databasedir-for-flat-table 对应的hive database在hdfs上的路径,根据实际路径填写,由于database不同,此路径肯定也不相同。
(2)、配置例子:
kylin-cluster01 :
kylin.source.hive.database-for-flat-table=bigdata_kylin01
kylin.source.hive.databasedir-for-flat-table=hdfs://ns00/user/prod_kylin/kylin/hive/bigdata_kylin01
kylin-cluster02 :
kylin.source.hive.database-for-flat-table=bigdata_kylin02
kylin.source.hive.databasedir-for-flat-table=hdfs://ns00/user/prod_kylin/kylin/hive/bigdata_kylin02

Zookeeper相关配置

kylin.env.zookeeper-base-path=/kylin

代码语言:javascript
复制
(1)、定义:
kylin.env.zookeeper-base-path Kylin 服务所用的 ZooKeeper 父路径,默认值为 /kylin,两个集群一定要不相同相同,否则运维起来比较麻烦。另外每个集群真实的zookeeper的路径还会拼接上kylin.server.cluster-name的值。
(2)、配置例子:
kylin-cluster01 :
kylin.env.zookeeper-base-path=/kylin01

kylin-cluster02 :
kylin.env.zookeeper-base-path=/kylin02

Kylin集群相关配置

kylin.server.cluster-name=BIGDATA_KYLIN:kylin_meadata

代码语言:javascript
复制
(1)、定义:
Kyllin集群的名称,如果不配做则获取kylin.metadata.url @前半部分的值,建议明确配置且每个集群配置不要一样。此值除了会作为集群名称标识外,还会作为zookeeper的一部分具体见kylin.env.zookeeper-base-path配置。
(2)、配置例子:
kylin-cluster01 :
kylin.server.cluster-name=BIGDATA_KYLIN:kylin_cluster01_meadata

kylin-cluster02 :
kylin.server.cluster-name=BIGDATA_KYLIN:kylin_cluster02_meadata

后续在持续更新其他配置,上面的这些配置是在多Kylin集群共享同一个Hbase存储和Hadoop集群时需要注意的配置,希望对大家Kylin集群运维有所帮助。

References

[1] https://4vq.cn/UBNzQv

版权声明:

本文为《大数据真好玩》整理,原作者独家授权。未经原作者允许转载追究侵权责任。

编辑|冷眼丶

微信公众号|大数据真好玩