Apache Kylin的安装和使用
官网 | GitHub | 文档 | 下载
目录
- 1 概览
- 1.1 Kylin是什么
- 1.2 Kylin的特性
- 1.3 使用 Apache Kylin 的典型场景
- 1.4 Kylin 支持多大的数据量表? 性能怎么样?
- 1.5 维度和度量
- 1.6 事实表和维表
- 2 部署
- 2.1 软件要求
- 2.2 硬件要求
- 2.3 下载并解压
- 2.4 环境变量和 Spark
- 2.5 检查运行环境
- 2.6 配置Kylin参数
- 2.7 启动和停止Kylin
- 2.8 报错问题解决
- 2.9 启动后的HDFS目录结构
- 3 使用
- 3.1 准备数据
- 3.2 构建Cube
- 3.3 对构建好的Cube进行查询
1 概览
1.1 Kylin是什么
- 可扩展超快的基于大数据的OLAP引擎:Kylin是为减少在Hadoop/Spark上百亿规模数据查询延迟而设计;
- Hadoop ANSI SQL 接口:作为一个OLAP引擎,Kylin为Hadoop提供标准SQL支持大部分查询功能;
- 交互式查询能力:通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能;
- 多维立方体(MOLAP Cube):用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体;
- 实时 OLAP:Kylin可以在数据产生时进行实时处理,用户可以在秒级延迟下进行实时数据的多维分析;
- 与BI工具无缝整合:Kylin提供与BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet。
1.2 Kylin的特性
- Job管理与监控
- 压缩与编码
- 增量更新
- 利用HBase Coprocessor
- 基于HyperLogLog的Dinstinc Count近似算法
- 友好的web界面以管理,监控和使用立方体
- 项目及表级别的访问控制安全
- 支持LDAP、SSO
1.3 使用 Apache Kylin 的典型场景
1.4 Kylin 支持多大的数据量表? 性能怎么样?
1.5 维度和度量
1.6 事实表和维表
事实表是用来记录事件的,包含了每个事件的具体要素,以及具体发生的事情。维表则是对事实表中事件的要素的描述信息。
2 部署
本次安装部署Apache Kylin 版本为 2.6.3。Kylin的安装方式有多种,常见的主要有如下几种:
单实例部署方式。在Hadoop的一个节点上部署,然后启动Kylin,这种部署方式简单快捷,但是当并发请求比较多(QPS>50)时将会产生性能瓶颈。
下面我们主要演示Kylin的使用,因此我们的部署采用第一种方式部署。
2.1 软件要求
- Hadoop: 2.7+, 3.1+ (since v2.5)
- Hive: 0.13 - 1.2.1+
- HBase: 1.1+, 2.0 (since v2.5)
- Spark (可选) 2.3.0+
- Kafka (可选) 1.0.0+ (since v2.5)
- JDK: 1.8+ (since v2.5)
- OS: Linux only, CentOS 6.5+ or Ubuntu 16.0.4+
2.2 硬件要求
在正式生产环境运行 Kylin 的服务器的最低配置为 4 core CPU,16 GB 内存和 100 GB 磁盘。 对于高负载的场景,建议使用 24 core CPU,64 GB 内存或更高的配置。
2.3 下载并解压
# 1 下载。可以访问 https://kylin.apache.org/download/ 下载适合您版本的二级制文件
# 例如因为前面换进中Hadoop 为3.1.2 ,所以这里下载基于Hadoop 3 的二进制包
wget http://mirrors.tuna.tsinghua.edu.cn/apache/kylin/apache-kylin-2.6.3/apache-kylin-2.6.3-bin-hadoop3.tar.gz -P /opt/# 2 解压
tar -zxf /opt/apache-kylin-2.6.3-bin-hadoop3.tar.gz -C /opt
cd /opt/apache-kylin-2.6.3-bin-hadoop3# 3 查看目录。如果没有可以使用这个命令安装:yum -y install tree
# 目录的详细说明如下:
# bin: shell 脚本,用于启动/停止 Kylin,备份/恢复 Kylin 元数据,以及一些检查端口、获取 Hive/HBase 依赖的方法等;
# conf: Hadoop 任务的 XML 配置文件,这些文件的作用可参考配置页面
# lib: 供外面应用使用的 jar 文件,例如 Hadoop 任务 jar, JDBC 驱动, HBase coprocessor 等.
# meta_backups: 执行 bin/metastore.sh backup 后的默认的备份目录;
# sample_cube 用于创建样例 Cube 和表的文件。
# tomcat: 自带的 tomcat,用于启动 Kylin 服务。
# tool: 用于执行一些命令行的jar文件。
tree -L 1.├── bin├── commit_SHA1 (文件)├── conf├── lib├── LICENSE (文件)├── NOTICE (文件)├── README.md (文件)├── sample_cube├── tomcat└── tool
2.4 环境变量和 Spark
配置Kylin环境变量 vim /etc/profile,添加如下
export KYLIN_HOME=/opt/apache-kylin-2.6.3-bin-hadoop3
从 v2.6.1 开始,Kylin 不再包含 Spark 二进制包; 我们需要另外下载 Spark,然后设置SPARK_HOME
系统变量(一定要设置)到 Spark 安装目录:
# 下载Spark
wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.3.4/spark-2.3.4-bin-hadoop2.7.tgz# 解压
tar -zxvf spark-2.3.4-bin-hadoop2.7.tgz -C $KYLIN_HOME# 重命名spark文件
mv $KYLIN_HOME/spark-2.3.4-bin-hadoop2.7 $KYLIN_HOME/spark# Remove unused components in Spark
rm -rf $KYLIN_HOME/spark/lib/spark-examples-*
rm -rf $KYLIN_HOME/spark/examples
rm -rf $KYLIN_HOME/spark/data
rm -rf $KYLIN_HOME/spark/R
也可以执行Kylin自带的脚本,这种方式会下载Spark 2.3.2、 Hadoop的版本是Hadoop 2.7,如果网络有限制或者版本有要求,不推荐用这种方式的。
# 执行脚本下载 spark-2.3.2-bin-hadoop2.7.tgz
#
# 这种方式会将Spark下载到 /tmp/spark_package
# 会自动访问 http://archive.apache.org/dist/spark/spark-2.3.2/spark-2.3.2-bin-hadoop2.7.tgz
$KYLIN_HOME/bin/download-spark.sh
2.5 检查运行环境
# 检查运行环境
$KYLIN_HOME/bin/check-env.sh# 检查Kylin依赖的 HBase 是否完整
$KYLIN_HOME/bin/find-hbase-dependency.sh# 检查Kylin依赖的 Hive 是否完整
$KYLIN_HOME/bin/find-hive-dependency.sh
2.6 配置Kylin参数
[root@cdh1 conf]# tree -L 1.├── kylin_hive_conf.xml # 该文件包含了 Hive 任务的配置项├── kylin_job_conf_inmem.xml # 该文件包含了 MapReduce 任务的配置项。当执行 In-mem Cubing 任务时,需要在改文件中为 mapper 申请更多的内存├── kylin_job_conf.xml # 该文件包含了 MapReduce 任务的配置项。├── kylin-kafka-consumer.xml # 该文件包含了 Kafka 任务的配置项。├── kylin.properties # 该文件是 Kylin 使用的全局配置文件。├── kylin-server-log4j.properties # 该文件包含了 Kylin 服务器的日志配置项。├── kylin-spark-log4j.properties├── kylin-tools-log4j.properties # 该文件包含了 Kylin 命令行的日志配置项。└── setenv.sh # 该文件是用于设置环境变量的 shell 脚本,可以通过 KYLIN_JVM_SETTINGS 调整 Kylin JVM 栈的大小,且可以设置 KAFKA_HOME 等其他环境变量。
Kylin的配置文件主要是 kylin.properties,重要的配置如下,其它配置可以查看官方的配置文档。
# 同一个Metadata表。默认HBase表为kylin_metadata。主要用来保存元数据
kylin.metadata.url=kylin_metadata@hbase
# 指定 Kylin 服务所用的 HDFS 路径,默认值为 /kylin
kylin.env.hdfs-working-dir=/kylin
# 指定 Kylin 部署的用途,参数值可选 DEV。可选参数:DEV、QA、PROD
# DEV will turn on some dev features, QA and PROD has no difference in terms of functions.
# 在 DEV 模式下一些开发者功能将被启用
kylin.env=DEV
# 指定 Kylin 服务所用的 ZooKeeper 路径,默认值为 /kylin
kylin.env.zookeeper-base-path=/kylin
# 指定 Kylin 实例的运行模式,参数值可选 all, job, query,默认值为 all
# job 模式代表该服务仅用于任务调度,不用于查询;
# query 模式代表该服务仅用于查询,不用于构建任务的调度;
# all 模式代表该服务同时用于任务调度和 SQL 查询。
# all表示既可以运行job引擎,又可以运行query引擎。在一个Kylin引擎下只能运行一个Job引擎
kylin.server.mode=all
# 指定集群名称
kylin.server.cluster-name=my-kylin
# List of web servers in use, this enables one web server instance to sync up with other servers.
kylin.server.cluster-servers=cdh1:7070
# 指定 Kylin 的 REST 服务所使用的时区,默认值为 GMT+8,(默认东八区,?)
kylin.web.timezone=GMT+8
# 是否支持跨域访问,默认值为 TRUE
kylin.web.cross-domain-enabled=true
# 是否启用 Dashboard,默认值为 FALSE
kylin.web.dashboard-enabled=true#### JOB ###
# 作业失败时最大尝试的次数,默认为0,不进行尝试
kylin.job.retry=3
# 作业的最大并行度,默认为10
kylin.job.max-concurrent-jobs=10### 邮件通知设置
## If true, will send email notification on job complete
##kylin.job.notification-enabled=true
##kylin.job.notification-mail-enable-starttls=true
##kylin.job.notification-mail-host=smtp.office365.com
##kylin.job.notification-mail-port=587
##kylin.job.notification-mail-username=kylin@example.com
##kylin.job.notification-mail-password=mypassword
##kylin.job.notification-mail-sender=kylin@example.com#### ENGINE ###
# reduce阶段默认输入的大小,默认为500MB
kylin.engine.mr.reduce-input-mb=500#### SOURCE ###
# Kylin作业工程中产生的中间表存放在Hive的库名,默认在 default
kylin.source.hive.database-for-flat-table=default
# Hive client类型, valid value [cli, beeline]
# 如果系统支持持beeline,可以修改为beeline
kylin.source.hive.client=cli
# Parameters for beeline client, only necessary if hive client is beeline
# 当使用beeline时需要配置此参数
#kylin.source.hive.beeline-params=-n root --hiveconf hive.security.authorization.sqlstd.confwhitelist.append='mapreduce.job.*|dfs.*' -u jdbc:hive2://localhost:10000#### STORAGE ###
# The storage for final cube file in hbase
kylin.storage.url=hbase
# htable表的压缩编解码方式 , valid value [none, snappy, lzo, gzip, lz4]
kylin.storage.hbase.compression-codec=none
# HBase的region切分大小,默认为5GB
kylin.storage.hbase.region-cut-gb=5
# HBase表的底层存储的HFile大小,越小的HFile,导致转换HFile的MR就会有更多的reduces,并且处理的速度更快
# 如果设置为0,则取消这个优化策略。默认为2GB
kylin.storage.hbase.hfile-size-gb=2
2.7 启动和停止Kylin
# 启动
$KYLIN_HOME/bin/kylin.sh start# 关闭
$KYLIN_HOME/bin/kylin.sh stop# 查看Kylin后台进程
ps -ef | grep kylin
启动成功后控制台会打印如下信息,此时我们可以看到Kylin的Web UI信息。
Retrieving hadoop conf dir...
KYLIN_HOME is set to /opt/apache-kylin-2.6.3-bin-hadoop3
Retrieving hive dependency...
Retrieving hbase dependency...
Retrieving hadoop conf dir...
Retrieving kafka dependency...
Retrieving Spark dependency...
Start to check whether we need to migrate acl tables
Retrieving hive dependency...
Retrieving hbase dependency...
Retrieving hadoop conf dir...
Retrieving kafka dependency...
Retrieving Spark dependency...
……A new Kylin instance is started by root. To stop it, run 'kylin.sh stop'
Check the log at /opt/apache-kylin-2.6.3-bin-hadoop3/logs/kylin.log
Web UI is at http://node1:7070/kylin
2.8 报错问题解决
初次安装可能会出现一些问题,不要慌张,通过查看日志信息可以找到对应的解决方法,这里列出来常见的几个错误的解决,有些错误也是笔者踩过的巨坑,希望大家不要走了弯路。
错误1:如果启动时报无法通过指定的URL找到Kylin在HBase的元信息表:
Exception in thread "main" java.lang.IllegalArgumentException: Failed to find metadata store by url: kylin_metadata@hbaseat org.apache.kylin.common.persistence.ResourceStore.createResourceStore(ResourceStore.java:99)at org.apache.kylin.common.persistence.ResourceStore.getStore(ResourceStore.java:111)at org.apache.kylin.rest.service.AclTableMigrationTool.checkIfNeedMigrate(AclTableMigrationTool.java:99)at org.apache.kylin.tool.AclTableMigrationCLI.main(AclTableMigrationCLI.java:43)
Caused by: java.lang.reflect.InvocationTargetExceptionat 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:92)... 3 more
# 进入 zkCli.sh ,对znode进行操作
[root@cdh1 logs]# zkCli.sh# 删除如下信息
[zk: localhost:2181(CONNECTED) 1] rmr /kylin/kylin_metadata
[zk: localhost:2181(CONNECTED) 2] rmr /hbase/table/kylin_metadata
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failedat org.apache.catalina.connector.Connector.initInternal(Connector.java:995)at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)... 18 more
Caused by: java.lang.IllegalArgumentException: /opt/apache-kylin-2.6.3-bin-hadoop3/tomcat/conf/.keystore (没有那个文件或目录)at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:115)at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:86)at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:244)at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1087)at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:265)at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:68)at org.apache.catalina.connector.Connector.initInternal(Connector.java:993)... 19 more
# 1 进入到 conf 目录下
[root@node1 conf]# cd /opt/apache-kylin-2.6.3-bin-hadoop3/tomcat/conf/# 1.1 查看信息,发现这个目录下的文件下权限不够,因此赋予权限
[root@node1 conf]# ll
总用量 252
drwxr-xr-x 3 root root 23 10月 6 03:16 Catalina
-rw-r--r-- 1 root root 13548 6月 27 19:25 catalina.policy
-rw-r--r-- 1 root root 7746 6月 27 19:25 catalina.properties
-rw-r--r-- 1 root root 7746 6月 27 19:25 catalina.properties.bak
-rw-r--r-- 1 root root 1534 6月 27 19:25 context.xml
-rw-r--r-- 1 root root 1338 6月 27 19:25 context.xml.bak
-rw-r--r-- 1 root root 1149 6月 27 19:25 jaspic-providers.xml
-rw-r--r-- 1 root root 2313 6月 27 19:25 jaspic-providers.xsd
-rw-r--r-- 1 root root 3622 6月 27 19:25 logging.properties
-rw-r--r-- 1 root root 7157 6月 27 19:25 server.xml
-rw-r--r-- 1 root root 7511 6月 27 19:25 server.xml.bak
-rw-r--r-- 1 root root 7157 6月 27 19:25 server.xml.init
-rw-r--r-- 1 root root 2164 6月 27 19:25 tomcat-users.xml
-rw-r--r-- 1 root root 2633 6月 27 19:25 tomcat-users.xsd
-rw-r--r-- 1 root root 169322 6月 27 19:25 web.xml[root@cdh1 conf]# cd ..
# 1.2 conf先的文件权限赋为 755
[root@cdh1 tomcat]# chmod 755 -R ./conf
重启后再次访问Web UI看是否可能正常访问,如果还是无法正常访问,可以修改Kylin自带的Tomcat的配置文件,将https相关的配置注释掉。
# 2 去掉Kylin自带的Tomcat配置文件中的htts
vim $KYLIN_HOME/tomcat/conf/server.xml# 2.1 搜做https并将其注释掉
<!--<Connector port="7443" protocol="org.apache.coyote.http11.Http11Protocol"maxThreads="150" SSLEnabled="true" scheme="https" secure="true"keystoreFile="conf/.keystore" keystorePass="changeit"clientAuth="false" sslProtocol="TLS" />--># 2.2 再次重启
java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConfat org.apache.kylin.source.hive.HiveClientFactory.getHiveClient(HiveClientFactory.java:27)at org.apache.kylin.source.hive.RedistributeFlatHiveTableStep.computeRowCount(RedistributeFlatHiveTableStep.java:40)at org.apache.kylin.source.hive.RedistributeFlatHiveTableStep.doWork(RedistributeFlatHiveTableStep.java:91)at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:167)at org.apache.kylin.job.execution.DefaultChainedExecutable.doWork(DefaultChainedExecutable.java:71)at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:167)at org.apache.kylin.job.impl.threadpool.DefaultScheduler$JobRunner.run(DefaultScheduler.java:114)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConfat org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1137)... 10 more
# 将hive-common-3.1.1.jar软连接到Kylin的lib下。org/apache/hadoop/hive/conf/HiveConf所在的包
ln -s $HIVE_HOME/lib/hive-common-3.1.1.jar $KYLIN_HOME/lib/hive-common-3.1.1.jar
ln -s $HIVE_HOME/lib/hive-exec-3.1.1.jar $KYLIN_HOME/lib/hive-exec-3.1.1.jar
ln -s $HIVE_HOME/lib/hive-hcatalog-core-3.1.1.jar $KYLIN_HOME/lib/hive-hcatalog-core-3.1.1.jar
ln -s $HIVE_HOME/lib/hive-standalone-metastore-3.1.1.jar $KYLIN_HOME/lib/hive-standalone-metastore-3.1.1.jar
ln -s $HIVE_HOME/lib/libfb303-0.9.3.jar $KYLIN_HOME/lib/libfb303-0.9.3.jar##########
# 一个创建软连接的脚本
##!/bin/bash
#cd $HIVE_HOME/lib
#for a in *.jar;do
#ln -s $HIVE_HOME/lib/$a $KYLIN_HOME/lib/$a
#done
##########################
# 网上提供解决方法
#1 在系统环境配置文件中添加 hive_dependency
#vim /etc/profile
# 添加如下
#export hive_dependency=$HIVE_HOME/conf:$HIVE_HOME/lib/*:$HCAT_HOME/share/hcatalog/hive-hcatalog-core-3.1.1.jar
#2 生效
#source /etc/profile
# 在Kylin启动脚本添加上这个参数,大概在地52行,添加如下代码
#3vim $KYLIN_HOME/bin/kylin.sh#43 #retrive $KYLIN_EXTRA_START_OPTS
#44 if [ -f "${dir}/setenv.sh" ]; then
#45 echo "WARNING: ${dir}/setenv.sh is deprecated and ignored, please remove it and use ${KYLIN_HOME}/conf/setenv.sh instead"
#46 source ${dir}/setenv.sh
#47 fi
#48
#49 if [ -f "${KYLIN_HOME}/conf/setenv.sh" ]; then
#50 source ${KYLIN_HOME}/conf/setenv.sh
#51 fi
#52 export HBASE_CLASSPATH_PREFIX=$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar:$CATALINA_HOME/lib/*:$hive_dependency:$HBASE_CLASSPATH_PREFIX
#53 export HBASE_CLASSPATH_PREFIX=${KYLIN_HOME}/conf:${KYLIN_HOME}/lib/*:${KYLIN_HOME}/ext/*:${HBASE_CLASSPATH_PREFIX}
#54 export HBASE_CLASSPATH=${HBASE_CLASSPATH}:${hive_dependency}:${kafka_dependency}:${spark_dependency}
#55
#56 verbose "HBASE_CLASSPATH: ${HBASE_CLASSPATH}"
#57 }
#################重启Kylin
$KYLIN_HOME/bin/kylin.sh stop
$KYLIN_HOME/bin/kylin.sh start
2.9 启动后的HDFS目录结构
- cardinality: Kylin 加载 Hive 表时,会启动一个 MR 任务来计算各个列的基数,输出结果会暂存在此目录。此目录可以安全清除。
- coprocessor:Kylin 用于存放 HBase coprocessor jar 的目录,请勿删除。
- kylin-job_id: Cube 计算过程的数据存储目录,请勿删除。 如需要清理,请遵循 storage cleanup guide。
- resources:Kylin 默认会将元数据存放在 HBase,但对于太大的文件(如字典或快照),会转存到 HDFS 的该目录下,请勿删除。如需要清理,请遵循 cleanup resources from metadata。
- jdbc-resources:性质同上,只在使用 MySQL 做元数据存储时候出现。
3 使用
#查看样例数据的数据量
[root@node1 conf]# wc -l $KYLIN_HOME/sample_cube/data/*10000 /opt/apache-kylin-2.6.3-bin-hadoop3/sample_cube/data/DEFAULT.KYLIN_ACCOUNT.csv731 /opt/apache-kylin-2.6.3-bin-hadoop3/sample_cube/data/DEFAULT.KYLIN_CAL_DT.csv144 /opt/apache-kylin-2.6.3-bin-hadoop3/sample_cube/data/DEFAULT.KYLIN_CATEGORY_GROUPINGS.csv244 /opt/apache-kylin-2.6.3-bin-hadoop3/sample_cube/data/DEFAULT.KYLIN_COUNTRY.csv9999 /opt/apache-kylin-2.6.3-bin-hadoop3/sample_cube/data/DEFAULT.KYLIN_SALES.csv21118 总用量
3.1 准备数据
3.2 构建Cube
0: jdbc:hive2://localhost:10000> SELECT MIN(part_dt) min_part_dt,MAX(part_dt) max_part_dt FROM kylin_sales;
+--------------+--------------+
| min_part_dt | max_part_dt |
+--------------+--------------+
| 2012-01-01 | 2014-01-01 |
+--------------+--------------+
0: jdbc:hive2://localhost:10000> SHOW tables;
+----------------------------------------------------+
| tab_name |
+----------------------------------------------------+
| kylin_account |
| kylin_cal_dt |
| kylin_category_groupings |
| kylin_country |
| kylin_intermediate_kylin_sales_cube_411503f7_131e_7d0f_7008_b170f894b330 |
| kylin_sales |
+----------------------------------------------------+
7 rows selected (0.171 seconds)
Create and distribute table, cmd:
hive -e "USE default;DROP TABLE IF EXISTS kylin_intermediate_kylin_sales_cube_c2245d04_6204_d762_1458_8af95480fe3c;
CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_kylin_sales_cube_c2245d04_6204_d762_1458_8af95480fe3c
(
`KYLIN_SALES_TRANS_ID` bigint
,`KYLIN_SALES_PART_DT` date
,`KYLIN_SALES_LEAF_CATEG_ID` bigint
,`KYLIN_SALES_LSTG_SITE_ID` int
,`KYLIN_CATEGORY_GROUPINGS_META_CATEG_NAME` string
,`KYLIN_CATEGORY_GROUPINGS_CATEG_LVL2_NAME` string
,`KYLIN_CATEGORY_GROUPINGS_CATEG_LVL3_NAME` string
,`KYLIN_SALES_LSTG_FORMAT_NAME` string
,`KYLIN_SALES_SELLER_ID` bigint
,`KYLIN_SALES_BUYER_ID` bigint
,`BUYER_ACCOUNT_ACCOUNT_BUYER_LEVEL` int
,`SELLER_ACCOUNT_ACCOUNT_SELLER_LEVEL` int
,`BUYER_ACCOUNT_ACCOUNT_COUNTRY` string
,`SELLER_ACCOUNT_ACCOUNT_COUNTRY` string
,`BUYER_COUNTRY_NAME` string
,`SELLER_COUNTRY_NAME` string
,`KYLIN_SALES_OPS_USER_ID` string
,`KYLIN_SALES_OPS_REGION` string
,`KYLIN_SALES_PRICE` decimal(19,4)
)
STORED AS SEQUENCEFILE
LOCATION 'hdfs://node1:8020/kylin/kylin_metadata/kylin-3cc3cb92-73a6-4742-2979-63651c60ddde/kylin_intermediate_kylin_sales_cube_c2245d04_6204_d762_1458_8af95480fe3c';
-- 'auto.purge'='true' 表示数据删除后不会放到回收♻️箱,而是直接删除
ALTER TABLE kylin_intermediate_kylin_sales_cube_c2245d04_6204_d762_1458_8af95480fe3c SET TBLPROPERTIES('auto.purge'='true');
INSERT OVERWRITE TABLE `kylin_intermediate_kylin_sales_cube_c2245d04_6204_d762_1458_8af95480fe3c` SELECT
`KYLIN_SALES`.`TRANS_ID` as `KYLIN_SALES_TRANS_ID`
,`KYLIN_SALES`.`PART_DT` as `KYLIN_SALES_PART_DT`
,`KYLIN_SALES`.`LEAF_CATEG_ID` as `KYLIN_SALES_LEAF_CATEG_ID`
,`KYLIN_SALES`.`LSTG_SITE_ID` as `KYLIN_SALES_LSTG_SITE_ID`
,`KYLIN_CATEGORY_GROUPINGS`.`META_CATEG_NAME` as `KYLIN_CATEGORY_GROUPINGS_META_CATEG_NAME`
,`KYLIN_CATEGORY_GROUPINGS`.`CATEG_LVL2_NAME` as `KYLIN_CATEGORY_GROUPINGS_CATEG_LVL2_NAME`
,`KYLIN_CATEGORY_GROUPINGS`.`CATEG_LVL3_NAME` as `KYLIN_CATEGORY_GROUPINGS_CATEG_LVL3_NAME`
,`KYLIN_SALES`.`LSTG_FORMAT_NAME` as `KYLIN_SALES_LSTG_FORMAT_NAME`
,`KYLIN_SALES`.`SELLER_ID` as `KYLIN_SALES_SELLER_ID`
,`KYLIN_SALES`.`BUYER_ID` as `KYLIN_SALES_BUYER_ID`
,`BUYER_ACCOUNT`.`ACCOUNT_BUYER_LEVEL` as `BUYER_ACCOUNT_ACCOUNT_BUYER_LEVEL`
,`SELLER_ACCOUNT`.`ACCOUNT_SELLER_LEVEL` as `SELLER_ACCOUNT_ACCOUNT_SELLER_LEVEL`
,`BUYER_ACCOUNT`.`ACCOUNT_COUNTRY` as `BUYER_ACCOUNT_ACCOUNT_COUNTRY`
,`SELLER_ACCOUNT`.`ACCOUNT_COUNTRY` as `SELLER_ACCOUNT_ACCOUNT_COUNTRY`
,`BUYER_COUNTRY`.`NAME` as `BUYER_COUNTRY_NAME`
,`SELLER_COUNTRY`.`NAME` as `SELLER_COUNTRY_NAME`
,`KYLIN_SALES`.`OPS_USER_ID` as `KYLIN_SALES_OPS_USER_ID`
,`KYLIN_SALES`.`OPS_REGION` as `KYLIN_SALES_OPS_REGION`
,`KYLIN_SALES`.`PRICE` as `KYLIN_SALES_PRICE`FROM `DEFAULT`.`KYLIN_SALES` as `KYLIN_SALES`
INNER JOIN `DEFAULT`.`KYLIN_CAL_DT` as `KYLIN_CAL_DT`
ON `KYLIN_SALES`.`PART_DT` = `KYLIN_CAL_DT`.`CAL_DT`
INNER JOIN `DEFAULT`.`KYLIN_CATEGORY_GROUPINGS` as `KYLIN_CATEGORY_GROUPINGS`
ON `KYLIN_SALES`.`LEAF_CATEG_ID` = `KYLIN_CATEGORY_GROUPINGS`.`LEAF_CATEG_ID` AND `KYLIN_SALES`.`LSTG_SITE_ID` = `KYLIN_CATEGORY_GROUPINGS`.`SITE_ID`
INNER JOIN `DEFAULT`.`KYLIN_ACCOUNT` as `BUYER_ACCOUNT`
ON `KYLIN_SALES`.`BUYER_ID` = `BUYER_ACCOUNT`.`ACCOUNT_ID`
INNER JOIN `DEFAULT`.`KYLIN_ACCOUNT` as `SELLER_ACCOUNT`
ON `KYLIN_SALES`.`SELLER_ID` = `SELLER_ACCOUNT`.`ACCOUNT_ID`
INNER JOIN `DEFAULT`.`KYLIN_COUNTRY` as `BUYER_COUNTRY`
ON `BUYER_ACCOUNT`.`ACCOUNT_COUNTRY` = `BUYER_COUNTRY`.`COUNTRY`
INNER JOIN `DEFAULT`.`KYLIN_COUNTRY` as `SELLER_COUNTRY`
ON `SELLER_ACCOUNT`.`ACCOUNT_COUNTRY` = `SELLER_COUNTRY`.`COUNTRY`
WHERE 1=1 AND (`KYLIN_SALES`.`PART_DT` >= '2012-01-01' AND `KYLIN_SALES`.`PART_DT` < '2013-01-01')
;
# 启动 jobhistory。访问 http://node1:19888/jobhistory
#$HADOOP_HOME/bin/mapred historyserver >/dev/null 2>&1 &
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
WARNING: Use of this script to start the MR JobHistory daemon is deprecated.
WARNING: Attempting to execute replacement "mapred --daemon start" instead.
启动之后访问这个页面,可以看到Kylin构建Cube中执行的MapReduce作业。
如果想放弃这个Job,单击Job选项的Actions下拉框中的Discard按钮。Job成功执行完毕后如下图所示:
3.3 对构建好的Cube进行查询
切换到 Kylin 的 Insight 页面,这个页面提供了交互式的SQL查询。将下面的sql写入到New Query
中,然后点击右下角的Submit提交SQL查询,如下图所示。
SELECT PART_DT,SUM(PRICE) AS total_selled, COUNT(DISTINCT SELLER_ID) AS sellers
FROM KYLIN_SALES GROUP BY PART_DT ORDER BY PART_DT;
很快执行就成功了,在页面下面可以看到0.33秒就返回了结果,结果如下图所示。
为了感受这个速度,和结果的准确性,我们同样可以在Hive里执行以下,查看下结果和执行的速度,两个对比一下。
-- 1 查看表默认库下的表。可以看到前面表名很长的表已经不在了
+---------------------------+
| tab_name |
+---------------------------+
| kylin_account |
| kylin_cal_dt |
| kylin_category_groupings |
| kylin_country |
| kylin_sales |
| person |
+---------------------------+
6 rows selected (3.409 seconds)-- 2 执行同样的 SQL
-- 这里只展示结果表前面一部分的数据。从执行的结果可以看到,Hive执行的结果和Kylin执行的结果一模一样。
-- 但是从执行速度上看,Hive用了65秒钟执行完毕,Kylin只用了0.33秒就查询到了结果。
-- 所有从这里可以看到Kylin经过Cube构建,经过预计算后的查询速度非常快。
0: jdbc:hive2://localhost:10000> SELECT PART_DT,SUM(PRICE) AS total_selled, COUNT(DISTINCT SELLER_ID) AS sellers
. . . . . . . . . . . . . . . .> FROM KYLIN_SALES GROUP BY PART_DT ORDER BY PART_DT;
+-------------+---------------+----------+
| part_dt | total_selled | sellers |
+-------------+---------------+----------+
| 2012-01-01 | 466.9037 | 12 |
| 2012-01-02 | 970.2347 | 17 |
| 2012-01-03 | 917.4138 | 14 |
| 2012-01-04 | 553.0541 | 10 |
| 2012-01-05 | 732.9007 | 18 |
| 2012-01-06 | 296.3882 | 9 |
| 2012-01-07 | 1184.1870 | 23 |
| 2012-01-08 | 541.7355 | 14 |
| …… | …… | …… |
+-------------+---------------+----------+
731 rows selected (65.254 seconds)
Apache Kylin的安装和使用相关推荐
- 大数据开发平台:数仓组件Apache Kylin详细安装暨使用教程
前言: Kylin依赖于Hive和Hbase,所以必须保证Hive和Hbase能够正常使用. Hive安装教程[传送门] Hbase安装教程[传送门] 简介: Apache Kylin是一个开源的分布 ...
- 一文读懂Apache Kylin(麒麟)
"麒麟出没,必有祥瑞." -- 中国古谚语 Kylin思维导图 前言 随着移动互联网.物联网等技术的发展,近些年人类所积累的数据正在呈爆炸式的增长,大数据时代已经来临.但是海量数据 ...
- 一文读懂Apache Kylin
感谢分享. http://www.jianshu.com/p/abd5e90ab051?utm_campaign=maleskine&utm_content=note&utm_medi ...
- Apache Kylin
"麒麟出没,必有祥瑞." -- 中国古谚语 Kylin思维导图 前言 随着移动互联网.物联网等技术的发展,近些年人类所积累的数据正在呈爆炸式的增长,大数据时代已经来临.但是海量数据 ...
- Apache Kylin | 麒麟出没,必有祥瑞
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! ...
- 关于apache kylin 安装32位linux办法
最近公司在使用apache kylin做实时开发访问,但是自己集群是linux32 只能安装JDK32位的受限只能3G多内存,而apachekylin 默认是4G内存,需要JDK64位支持. 解决办法 ...
- 分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例
原文地址:http://lxw1234.com/archives/2016/04/643.htm Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(O ...
- 分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例【转】
Kylin 麒麟官网:http://kylin.apache.org/cn/download/ 关键字:olap.Kylin Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的 ...
- 大数据之CDH5.8.3集成安装Apache Kylin与探索使用
博文目录 0. Kylin概览(官方) 1. Kylin特性 3. Kylin生态圈 3. Kylin集成前环境准备 4. 安装部署 4.1 下载Kylin 4.2 部署Kylin 4.3 启动Kyl ...
最新文章
- 顺F速运,你被爱加M坑了
- 在Sql Server 2005使用公用表表达式CTE简化复杂的查询语句
- DllImport的用法
- Delphi WebService 的编写、调试、发布(IIS)、调用
- 魅族前副总裁李楠谈“苹果对5G判断”,理解万岁!
- 布鲁斯的秘密-序章:我是布鲁斯
- dlib+VS2019生成踩坑记录(Windows10环境)
- 抖音无水印视频批量下载助手
- 怎样帮宝宝起个好名字?起名必备的五大招在这里了
- 数论-------数的倍数
- Python 的文件定位
- 使用OneDNS完美解决办公网络优化问题
- learning java AWT Pannel
- Centos7配置 yum代理
- 开源一个win10二十四节气壁纸自动更换的程序
- Day19 - 摄像、拍照,滤镜中文指南
- KVM is required to run this AVD /dev/kvm permission denied Ubuntu Android Studio
- 一个高性能无锁非阻塞链表队列
- Uedit32-视图-查看方式(高亮),显示失效.
- java 自定义注解以及注解的实现原理