kylin的安装

kylin集群模式

1.Kylin 实例是无状态的服务,运行时的状态信息存储在 HBase metastore 中。配置 Kylin 节点的运行模式 kylin.server.mode,参数值可选 all, job, query 中的一个,默认值为 all。job 模式代表该服务仅用于任务调度,不用于查询;query 模式代表该服务仅用于查询,不用于构建任务的调度;all 模式代表该服务同时用于任务调度和 SQL 查询。
2.麒麟中有哪些调度程序
3.1版本后存在三种Job Scheduler,它们的实现类是DefaultScheduler,DistributedScheduler和CuratorScheduler。
用户可以通过将参数kylin.job.scheduler.default配置 为不同的值来选择要使用的调度程序 。默认情况下,kylin.job.scheduler.default = 0,将DefaultScheduler用作作业调度程序。当配置为2,使用DistributedScheduler,当配置为100,使用CuratorScheduler。
3.不同的工作计划者之间有什么区别?

3.1 DefaultScheduler

默认的作业调度程序,它的核心逻辑是初始化两个线程池。一个线程池ScheduledExecutorService用于获取kylin中的所有作业信息,而另一个线程池JobRunner用于执行特定的作业。

ScheduledExecutorService将定期获取的所有任务的状态信息。当任务的状态为Ready时,表示可以安排任务执行,并将任务移交给JobRunner进行执行。

DefaultScheduler是调度程序的独立版本,在同一元数据下只能有一个作业服务器。

如果kylin.server.mode = all或job,则在Kylin Server进程启动时,它将初始化DefaultScheduler并锁定作业服务器。锁的实现类是ZookeeperJobLock,它是通过使用zookeeper的临时节点来实现的。

一旦作业服务器持有该锁,在作业服务器进程完成之前,其他任何作业服务器都无法获得该锁。
在kylin.properties不用特别指定。该调度默认只有一个节点上可以设置kylin.server.mode = all或job

3.2分布式调度程序

使用DistributedScheduler作为作业调度程序,您可以在同一元数据下拥有多个kylin作业服务器。

与DefaultScheduler相比,DistributedScheduler减小了锁定粒度,从锁定整个作业服务器到锁定段。

实现类是ZookeeperDistributedLock,它也通过使用zookeeper的临时节点来实现。

当提交段构建作业并计划执行该作业时,jobId将被拼写在zookeeper的临时节点路径中,并且该节点将被锁定。当整个作业的最终状态变为SUCCEED,ERROR和DISCARDED时,锁定将被释放。
在kylin.properties中指定
kylin.job.scheduler.default=2
kylin.job.lock=org.apache.kylin.storage.hbase.util.ZookeeperJobLock

3.3 CuratorScheduler

kylin v3.0.0-alpha开始受支持。CuratorScheduler是主从模式。它从所有作业节点中选择一个领导者来安排任务。

馆长选举有两种实现方式,即LeaderSelector和LeaderLatch。

LeaderSelector 是所有尚存的客户轮流担任领导者,而领导者在执行takeLeaderShip方法后释放领导者。

LeaderLatch 是一旦选出领导者,除非有客户挂断并再次触发选举,否则领导者将不会移交。

启动kylin作业服务器时,将从该作业服务器初始化jobClient。jobClient调用start()方法启动。一旦开始,jobClient将参加领导者选举。

具有相同元数据的所有作业服务器将参加领导者选举。只有一台作业服务器成为领导者,其他作业服务器成为参与者。

成为领导者的作业节点将执行takeLeaderShip方法,该方法调用DefaultScheduler的初始化方法,然后该方法调用一个无限循环,也就是说,该节点将始终负责调度和执行kylin任务。

一旦出现异常,该过程将结束并且DefaultScheduler将终止。节点将移交领导者,然后从所有作业服务器中重新选择领导者。
在kylin.properties中指定
kylin.job.scheduler.default=100
kylin.server.self-discovery-enabled=true
在这里插入图片描述

安装前提

Kylin 节点上要有 Hadoop,Hive,HBase的 client 端。kylin会去读取 core-site.xml,hive-site.xml,hbase-site.xml及其他。运行 Kylin 的 Linux 账户要有访问 Hadoop 集群的权限,包括创建/写入 HDFS 文件夹,Hive 表,HBase 表和提交 MapReduce 任务的权限。

安装kylin之前先安装如下,且都在正常启动:

参考链接:
https://blog.csdn.net/zzh45828/article/details/115585559?spm=1001.2014.3001.5501
https://blog.csdn.net/weixin_42529806/article/details/113758611?spm=1001.2014.3001.5501

Hadoop: 3.1.3

Hive: 3.1.2

HBase: 2.2.2

Spark (可选) :2.4.5

JDK: 1.8+ 

下载地址:

https://kylin.apache.org/download/

下载安装包:

apache-kylin-3.1.1-bin-hadoop3.tar

解压安装:

tar -zxvf apache-kylin-3.1.1-bin-hadoop3.tar -C /opt
mv apache-kylin-3.1.1-bin-hadoop3 kylin

设置环境变量:

export KYLIN_HOME=/opt/kylin
export PATH=$PATH:$KYLIN_HOME/bin

修改配置:

vim /opt/kylin/conf/kylin.properties
#hbase存储kylin  cube的表名称,@hbase代表hbase存储cube
kylin.metadata.url=kylin_metadata@hbase
kylin.server.mode=all
# kylin 集群节点配置
kylin.server.cluster-servers=hadoop-master:7070,hadoop-node1:7070,hadoop-node2:7070
# 定义 kylin 用于 MRjobs 的 job.jar 和 hbase 的协处理 jar,用于提升性能(添加项),可以不添加
kylin.job.jar=/opt/kylin/lib/kylin-job-3.1.1.jar
kylin.coprocessor.local.jar=/opt/kylin/lib/kylin-coprocessor-3.1.1.jar

详细配置可以参考官网
在这里插入图片描述

复制配置到其他节点:

scp ./* root@hadoop-node1:/opt/kylin/conf/

修改属组属主:

chown -R henghe:henghe /opt/kylin

检查配置:使用自带的脚本检查环境变量。

# 执行下面的检查命令会在 hdfs 上创建 kylin 目录,需要使用有hdfs权限的用户,会在hdfs上创建/kylin
./check-env.sh
# 检查数据源 hive 和数据存储 hbase
./find-hive-dependency.sh
./find-hbase-dependency.sh

如果出现Could not find or load main class org.apache.hadoop.hbase.util.GetJavaProperty错误,需要修改kylin所在机器上的hbase配置。即使没出现这个额错误,最好也加上,当kylin需要hbase的依赖包时会自动加载,避免拷贝jar到kylin/lib/下。
vi /opt/hbase/bin/hbase, 增加 :/opt/hbase/lib/*

# CLASSPATH initially contains $HBASE_CONF_DIR
CLASSPATH="${HBASE_CONF_DIR}"
CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar:/opt/hbase/lib/*

启动命令:初始密码为ADMIN/KYLIN,都是大写。

~]$ kylin.sh start
...
A new Kylin instance is started by hadoop. To stop it, run 'kylin.sh stop'
Check the log at /usr/local/kylin/logs/kylin.log
Web UI is at http://hadoop-master:7070/kylin

web页面:

每个节点都可以查看对应的 WEB UI:http://ip:7070/kylin

http://192.168.0.54:7070/kylin

Kylin 测试

启动 kylin 之后运行 sample.sh 脚本(任意集群节点运行都可以)

./sample.sh

导入 sample 数据,模型,cube 成功之后系统会提示重启 kylin 或重新加载元数据让数据生效

启动遇见的问题

1.web页面404

在这里插入图片描述
查看kylin/log/kylin.log


Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/metastore/api/NoSuchObjectException
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.getDeclaredMethods(Class.java:1975)
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)
	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524)
	at org.springframework.core.MethodIntrospector.selectMethods(MethodIntrospector.java:68)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:230)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:214)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:184)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:127)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
	at org.springframework.beans

解决方案:

cp $HIVE_HOME/lib/hive-exec-*.jar $KYLIN_HOME/lib/

2.启动不起来,查看hbase启动有问题

Exception in thread "main" java.lang.IllegalArgumentException: Failed to find metadata store by url: kylin_metadata@hbase
        at org.apache.kylin.common.persistence.ResourceStore.createResourceStore(ResourceStore.java:101)
        at org.apache.kylin.common.persistence.ResourceStore.getStore(ResourceStore.java:113)
        at org.apache.kylin.rest.service.AclTableMigrationTool.checkIfNeedMigrate(AclTableMigrationTool.java:100)
        at org.apache.kylin.tool.AclTableMigrationCLI.main(AclTableMigrationCLI.java:43)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.apache.kylin.common.persistence.ResourceStore.createResourceStore(ResourceStore.java:94)
        ... 3 more
Caused by: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=2, exceptions:
Wed Aug 04 13:56:13 CST 2021, RpcRetryingCaller{globalStartTime=1628056573383, pause=100, maxAttempts=2}, org.apache.hadoop.hbase.PleaseHoldException: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
        at org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2867)
        at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:2067)
        at org.apache.hadoop.hbase.master.MasterRpcServices.createTable(MasterRpcServices.java:524)
        at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:413)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:133)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:338)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:318)

解决:
重启了下hbase

3.加载hive表,缺少依赖

在这里插入图片描述
在这里插入图片描述
原因是hive的lib没有加载进来
解决方案
拷贝hive/lib/ 到 kylin/lib/下,我尝试拷贝所有的jar过去,但是kylin web界面打不开404错误

antlr-runtime-3.5.2.jar
datanucleus-api-jdo-4.2.4.jar
datanucleus-core-4.1.17.jar
datanucleus-rdbms-4.1.19.jar
hive-exec-3.1.2.jar
javax.jdo-3.2.0-m3.jar
libfb303-0.9.3.jar
mysql-connector-java-5.1.45.jar
hive-hcatalog-core-3.1.2.jar
hive-hcatalog-server-extensions-3.1.2.jar

或者
在HBASE_CLASSPATH_PREFIX把hive_dependency 加上(我配置了,但是没生效,大家可以试试,找到原因,麻烦可以告诉我下)。

export HBASE_CLASSPATH_PREFIX=${KYLIN_HOME}/conf:${KYLIN_HOME}/lib/*:${KYLIN_HOME}/ext/*:${hive_dependency}:${HBASE_CLASSPATH_PREFIX}
export HBASE_CLASSPATH=${HBASE_CLASSPATH}:${hive_dependency}:${kafka_dependency}:${spark_dependency}

4 .Caused by: java.lang.NoClassDefFoundError: org/apache/commons/configuration/ConfigurationException

拷贝到/opt/kylin4.0.0/tomcat/webapps/kylin/WEB-INF/lib下
commons-collections-3.2.2.jar
commons-configuration-1.30.jar

下载地址

https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar

https://repo1.maven.org/maven2/commons-configuration/commons-configuration/1.3/commons-configuration-1.3.jar

5 guava包版本冲突

hadoop-3.1.3(路径:hadoop\share\hadoop\common\lib)中该jar包为 guava-27.0-jre.jar;而hive-3.1.2(路径:hive/lib)中该jar包为guava-19.0.1.jar,已经升级了hive的guava版本。而kylin中的guava版本为19,所以需要统一。可以修改源码guava改为27,然后重新编译。
或者
下载guava-28.0-jre.jar, 将其放到$KYLIN_HOME/tool/ 和 $KYLIN_HOME/tomcat/lib/目录下,然后重启kylin。这是官网给出一个方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个操蛋的人生!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值