Kylin 初入门,从下载安装到体验查询
本文旨在为 kylin 新手用户提供一份从下载安装到体验亚秒级查询的完整流程。文章分为两个部分,分别介绍了有 hadoop 环境(基于 hadoop 环境的安装)和没有 hadoop 环境(从 docker 镜像安装)两种场景下 kylin的安装使用,用户可以根据自己的环境选择其中的任意一种方式。
用户可以按照文章里的步骤对 kylin 进行初步的了解和体验,掌握 kylin 的基本使用技能,然后结合自己的业务场景使用 kylin 来设计模型,加速查询。
01 从 docker 镜像安装使用 kylin
为了让用户方便地试用 kylin,蚂蚁金服的朱卫斌同学向社区贡献了「kylin docker image」。该镜像中,kylin 依赖的各个服务均已正确的安装及部署,包括:
- jdk 1.8
- hadoop 2.7.0
- hive 1.2.1
- hbase 1.1.2
- spark 2.3.1
- zookeeper 3.4.6
- kafka 1.1.1
- mysql
- maven 3.6.1
我们已将面向用户的 kylin 镜像上传至 docker 仓库,用户无需在本地构建镜像,只需要安装 docker,就可以体验 kylin 的一键安装。
step 1.
首先执行以下命令从 docker 仓库 pull 镜像:
docker pull apachekylin/apache-kylin-standalone:3.0.1
此处的镜像包含的是 kylin 最新版本 kylin v3.0.1。由于该镜像中包含了所有 kylin 依赖的大数据组件,所以拉取镜像需要的时间较长,请耐心等待。pull 成功后显示如下:
step 2.执行以下命令来启动容器:
docker run -d \ -m 8g \ -p 7070:7070 \ -p 8088:8088 \ -p 50070:50070 \ -p 8032:8032 \ -p 8042:8042 \ -p 16010:16010 \ apachekylin/apache-kylin-standalone:3.0.1
容器会很快启动,由于容器内指定端口已经映射到本机端口,可以直接在本机浏览器中打开各个服务的页面,如:
- kylin 页面:http://127.0.0.1:7070/kylin/
- hdfs namenode 页面:http://127.0.0.1:50070
- yarn resourcemanager 页面:http://127.0.0.1:8088
- hbase 页面:http://127.0.0.1:60010
容器启动时,会自动启动以下服务:
- namenode, datanode
- resourcemanager, nodemanager
- hbase
- kafka
- kylin
并自动运行 $kylin_home/bin/sample.sh 及在 kafka 中创建 kylin_streaming_topic topic 并持续向该 topic 中发送数据。这是为了让用户启动容器后,就能体验以批和流的方式的方式构建 cube 并进行查询。用户可以通过 docker exec 命令进入容器,容器内相关环境变量如下:
- java_home=/home/admin/jdk1.8.0_141
- hadoop_home=/home/admin/hadoop-2.7.0
- kafka_home=/home/admin/kafka_2.11-1.1.1
- spark_home=/home/admin/spark-2.3.1-bin-hadoop2.6
- hbase_home=/home/admin/hbase-1.1.2
- hive_home=/home/admin/apache-hive-1.2.1-bin
- kylin_home=/home/admin/apache-kylin-3.0.0-alpha2-bin-hbase1x
登陆 kylin 后,用户可以使用 sample cube 来体验 cube 的构建和查询,也可以按照下面“基于 hadoop 环境安装使用 kylin ”中从 step 8 之后的教程来创建并查询属于自己的 model 和 cube。
02 基于 hadoop 环境安装使用 kylin
对于已经有稳定 hadoop 环境的用户,可以下载 kylin 的二进制包将其部署安装在自己的 hadoop 集群。安装之前请根据以下要求进行环境检查。
环境检查
(1)前置条件:
kylin 依赖于 hadoop 集群处理大量的数据集。你需要准备一个配置好 hdfs,yarn,mapreduce,hive, hbase,zookeeper 和其他服务的 hadoop 集群供 kylin 运行。
kylin 可以在 hadoop 集群的任意节点上启动。方便起见,你可以在 master 节点上运行 kylin。但为了更好的稳定性,我们建议你将 kylin 部署在一个干净的 hadoop client 节点上,该节点上 hive,hbase,hdfs 等命令行已安装好且 client 配置(如 core-site.xml,hive-site.xml,hbase-site.xml及其他)也已经合理的配置且其可以自动和其它节点同步。
运行 kylin 的 linux 账户要有访问 hadoop 集群的权限,包括创建/写入 hdfs 文件夹,hive 表, hbase 表和提交 mapreduce 任务的权限。
(2)硬件要求:
运行 kylin 的服务器建议最低配置为 4 core cpu,16 gb 内存和 100 gb 磁盘。
(3)操作系统要求:
centos 6.5+ 或 ubuntu 16.0.4+
(4)软件要求:
hadoop 2.7+,3.0-3.1
hive 0.13+,1.2.1+
hbase 1.1+,2.0(从 kylin 2.5 开始支持)
jdk: 1.8+
建议使用集成的 hadoop 环境进行 kylin 的安装与测试,比如 hortonworks hdp 或 cloudera cdh ,kylin发布前在 hortonworks hdp 2.2-2.6 and 3.0, cloudera cdh 5.7-5.11 and 6.0,aws emr 5.7-5.10,azure hdinsight 3.5-3.6 上测试通过。
安装使用
当你的环境满足上述前置条件时 ,你可以开始安装使用 kylin。
step 1. 下载 kylin 压缩包
从 https://kylin.apache.org/download/ 下载一个适用于你的 hadoop 版本的二进制文件。目前最新版本是 kylin 3.0.1和 kylin 2.6.5,其中 3.0 版本支持实时摄入数据进行预计算的功能。如果你的 hadoop 环境是 cdh 5.7,可以使用如下命令行下载 kylin 3.0.0:
cd /usr/local/ wget http://apache.website-solution.net/kylin/apache-kylin-3.0.0/apache-kylin-3.0.0-bin-cdh57.tar.gz
step 2. 解压 kylin
解压下载得到的 kylin 压缩包,并配置环境变量 kylin_home 指向解压目录:
tar -zxvf apache-kylin-3.0.0-bin-cdh57.tar.gz cd apache-kylin-3.0.0-bin-cdh57 export kylin_home=`pwd`
step 3. 下载 spark
由于 kylin 启动时会对 spark 环境进行检查,所以你需要设置 spark_home:
export spark_home=/path/to/spark
如果你没有已经下载好的 spark 环境,也可以使用 kylin 自带脚本下载 spark:
$kylin_home/bin/download-spark.sh
脚本会将解压好的spark放在 $kylin_home 目录下,如果系统中没有设置 spark_home,启动 kylin 时会自动找到 $kylin_home 目录下的 spark。
step 4. 环境检查
kylin 运行在 hadoop 集群上,对各个组件的版本、访问权限及 classpath 等都有一定的要求,为了避免遇到各种环境问题,你可以运行 $kylin_home/bin/check-env.sh 脚本来进行环境检测,如果你的环境存在任何的问题,脚本将打印出详细报错信息。如果没有报错信息,代表你的环境适合 kylin 运行。
step 5. 启动 kylin
运行 $kylin_home/bin/kylin.sh start 脚本来启动 kylin,如果启动成功,命令行的末尾会输出如下内容:
a new kylin instance is started by root. to stop it, run 'kylin.sh stop' check the log at /usr/local/apache-kylin-3.0.0-bin-cdh57/logs/kylin.log web ui is at http://<hostname>:7070/kylin
kylin 启动的默认端口是 7070,可以使用 $kylin_home/bin/ kylin-port-replace-util.sh set number 来修改端口,修改后的端口是 7070+number。
step 6. 访问 kylin
kylin 启动后,你可以通过浏览器 http://:port/kylin 进行访问。其中 为具体的机器名、ip 地址或域名,port 为 kylin 端口,默认为 7070。初始用户名和密码是 admin/kylin。服务器启动后,可以通过查看 $kylin_home/logs/kylin.log 获得运行时日志。
step 7. 创建 sample cube
kylin 提供了一个创建样例 cube 的脚本,以供用户快速体验 kylin。在命令行运行
$kylin_home/bin/sample.sh
完成后登陆 kylin,点击 system->configuration->reload metadata 来重载元数据。
元数据重载完成后,你可以在左上角的 project 中看到一个名为 learn_kylin 的项目,它包含 kylin_sales_cube 和 kylin_streaming_cube, 它们分别为 batch cube 和 streaming cube。你可以直接对 kylin_sales_cube 进行构建,构建完成后就可以查询。对于 kylin_streaming_cube,需要设置 kafka_home,然后执行 ${kylin_home}/bin/sample-streaming.sh,该脚本会在 localhost:9092 broker 中创建名为 kylin_streaming_topic 的 kafka topic,它也会每秒随机发送 100 条 messages 到 kylin_streaming_topic,然后你可以对 kylin_streaming_cube 进行构建。
关于 sample cube,可以参考http://kylin.apache.org/cn/docs/tutorial/kylin_sample.html。
当然,你也可以根据下面的教程来尝试创建自己的 cube。
step 8. 创建 project
登陆 kylin 后,点击左上角的 + 号来创建 project。
step 9. 加载 hive 表
点击 model->data source->load table from tree,kylin 会读取到 hive 数据源中的表,并以树状方式显示出来,你可以选择自己要使用的表,然后点击 sync 进行将其加载到 kylin。
随后,它们会出现在 data source 的 tables 目录中
step 10. 创建模型
点击 model->new->new model:
输入 model name 点击 next 进行下一步,选择 fact table 和 lookup table,添加 lookup table 时需要设置与事实表的 join 条件。
然后点击 next 到下一步选择 dimension:
next 下一步选择 measure:
next 下一步设置时间分区列和过滤条件,时间分区列用于增量构建时选择时间范围,如果不设置时间分区列则代表该 model 下的 cube 都是全量构建。过滤条件会在打平表时用于 where 条件。
然后点击 save 保存模型。
step 11. 创建 cube
model->new->new cube
点击 next 到下一步添加 dimension,lookup table 的维度可以设置为 normal(普通维度)或者 derived(衍生维度)两种类型,默认设置为衍生维度,衍生维度代表该列可以从所属维度表的主键中衍生出来,所以实际上只有主键列会被 cube 加入计算。
点击 next 到下一步,点击 +measure 来添加需要预计算的度量。kylin 会默认创建一个 count(1) 的度量。kylin 支持 sum、min、max、count、count_distinct、top_n、extended_column、percentile 八种度量。请为 count_distinct 和 top_n 选择合适的返回类型,这关系到 cube 的大小。添加完成之后点击 ok,该 measure 将会显示在 measures 列表中。
添加完所有 measure 后,点击 next 进行下一步,这一页是关于 cube 数据刷新的设置。在这里可以设施自动合并的阈值(auto merge thresholds)、数据保留的最短时间(retention threshold)以及第一个 segment 的起点时间。
点击 next 跳转到下一页高级设置。在这里可以设置聚合组、rowkeys、mandatory cuboids、cube engine 等。关于高级设置的详细信息,可以参考 http://kylin.apache.org/cn/docs/tutorial/create_cube.html 页面中的步骤 5,其中对聚合组等设置进行了详细介绍。关于更多维度优化,可以阅读http://kylin.apache.org/blog/2016/02/18/new-aggregation-group/。
对于高级设置不是很熟悉时可以先保持默认设置,点击 next 跳转到 kylin properties 页面,你可以在这里重写 cube 级别的 kylin 配置项,定义覆盖的属性,配置项请参考:http://kylin.apache.org/cn/docs/install/configuration.html。
配置完成后,点击 next 按钮到下一页,这里可以预览你正在创建的 cube 的基本信息,并且可以返回之前的步骤进行修改。如果没有需要修改的部分,就可以点击 save 按钮完成 cube 创建。之后,这个 cube 将会出现在你的 cube 列表中。
step 12. 构建 cube
上一个步骤创建好的cube只有定义,而没有计算好的数据,它的状态是“disabled”,是不可以查询的。要想让 cube 有数据,还需要对它进行构建。cube 的构建方式通常有两种:全量构建和增量构建。点击要构建的 cube 的 actions 列下的 action 展开,选择 build,如果 cube 所属 model 中没有设置时间分区列,则默认全量构建,点击 submit 直接提交构建任务。如果设置了时间分区列,则会出现如下页面,在这里你要选择构建数据的起止时间:
设置好起止时间后,点击 submit 提交构建任务。然后你可以在 monitor 页面观察构建任务的状态。kylin 会在页面上显示每一个步骤的运行状态、输出日志以及 mapreduce 任务。可以在 ${kylin_home}/logs/kylin.log 中查看更详细的日志信息。
任务构建完成后,cube 状态会变成 ready,并且可以看到 segment 的信息。
step 13. 查询 cube
cube 构建完成后,在 insight 页面的 tables 列表下面可以看到构建完成的 cube 的 table,并可以对其进行查询。查询语句击中 cube 后,会返回存储在 hbase 中的预计算结果。
恭喜,进行到这里你已经具备了使用 kylin 的基本技能,可以去发现和探索更多更强大的功能了。
下一篇: 一条sql造成死锁