Kylin亚秒级查询

1 概述

Apache Kylin 是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。

1.1 Kylin是什么

• 可扩展超快OLAP引擎: 

Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计

• Hadoop ANSI SQL 接口: 

Kylin为Hadoop提供标准SQL支持大部分查询功能

• 交互式查询能力: 

通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能

• 多维立方体(MOLAP Cube):

用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体

• 与BI工具无缝整合:

Kylin提供与BI工具,如Tableau,的整合能力,即将提供对其他工具的整合

• 其他特性: 
  • Job管理与监控
  • 压缩与编码
  • 增量更新
  • 利用HBase Coprocessor
  • 基于HyperLogLog的Dinstinc Count近似算法
  • 友好的web界面以管理,监控和使用立方体
  • 项目及立方体级别的访问控制安全
  • 支持LDAP

1.2 技术架构

在这里插入图片描述
以上图表勾勒出Cube构建引擎(Cube Build Engine)是如何以离线处理方式将关系型数据转化成键-值型数据的。其中的黄线部分还表现出在线分析数据的处理流程。数据请求可以利用基于SQL的工具由SQL提交而产生,或者利用第三方应用程序通过Kylin的RESTful服务来实现。RESTful服务会调用Query Engine,后者则检测对应的目标数据集是否真实存在。如果确实存在,该引擎会直接访问目标数据并以次秒级延迟返回结果。如果目标数据集并不存在,该引擎则会根据设计将无匹配数据集的查询路由至Hadoop上的SQL处、即交由Hive等Hadoop集群负责处理。

• Kylin核心: Kylin OLAP引擎基础框架,包括元数据(Metadata)引擎,查询引擎,Job引擎及存储引擎等,同时包括REST服务器以响应客户端请求
• 扩展: 支持额外功能和特性的插件
• 整合: 与调度系统,ETL,监控等生命周期管理系统的整合
• 用户界面: 在Kylin核心之上扩展的第三方用户界面
• 驱动: ODBC 和 JDBC 驱动以支持不同的工具和产品,比如Tableau

数据处理流程:
在面对极大数据时,简单问题也将带来涵盖巨大数据量的表内容扫描,给出应答的延时状况也会变得无法接受,每一次运行查询时所需要的值是固定的,因此我们完全可以预先进行计算并对结果加以存储、以备日后随时调用,从关系型到键-值型(Relational to Key—Value,简称KV)处理,处理过程将生成所有维度组合并将测得值显示出来,Kylin的构建正是以为基础,而且在对大规模数据进行处理时充分发挥了Hadoop生态系统的强大能力
1. 从Hive当中读取数据(这些数据被保存在HDFS之上)
2. 运行Map Reduce任务以实现预计算
3. 将cube数据保存在HBase当中
4. 利用Zookeeper进行任务协调
5. 通过restful API、JDBC、ODBC等进行外部访问

1.3 适用场景

1. kylin的响应时间和实际返回条数成正比,在单维度查询下,没有较大的优势,kylin更适合高度范化的聚合数据查询,专门负责处理规模极端庞大的数据集
2. 完全基于Hadoop生态系统下的大数据量秒级多维分析
3. 维度和指标等数据结构变化不大的应用环境,一次构建,多次使用

2 安装部署
    2.1 前期准备
        2.1.1 Kylin运行环境要求

Hadoop集群环境:
• Hadoop: 2.4+
• Hive: 0.13+
• HBase: 0.98+
• JDK: 1.7+
Kylin Server(–)
• Tomcat
• Mysql

1. 安装tomcat  
2. 将apache-tomcat-7.0.79.tar.gz 解压到/app
3. https://pan.baidu.com/s/1i4G7xFf 密码:aj01
4. tar -zxvf apache-tomcat-7.0.69.tar.gz
5. cd apache-tomcat-7.0.69/bin/
6. /startup.sh
7. 必须关掉Linux中的防火墙或者开放8080端口,我在这里采用开放端口的方法。
8. /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
9. 通过命令查看当前端口的监听是否已经打开:
10. netstat -ano | grep 8080
11. 访问http://你的ip地址:8080

2.1.2 测试集群环境说明
我们使用3台服务器(IBM X3650 1台【8core,16G RAM】,IBM X3850 2台【32core,128G RAM】及CM 5.4.2(CDH 5.4.2)搭建的大数据平台其对应ip分别为:192.168.1.20(DataNode), 192.168.1.21(DataNode), 192.168.1.22(Namenode)。

2.2 安装部署

2.2.1 22主机安装

12. 确保机器上已经安装并启动 HDFS HBASE HIVE MR ZOOKEEPER服务
13. 上传安装包apache-kylin-1.2-bin.tar 到22节点,解压到目录 /home/kylin/apache-kylin-1.2-bin (cdh用apache-kylin-2.1.0-bin-cdh57.tar.gz)
14. 修改etc/profile,添加export KYLIN_HOME=/home/kylin/apache-kylin-1.2-bin 修改PATH 添加$KYLIN_HOME/bin

在这里插入图片描述
15. 使环境变量生效,source /etc/profile
16. 修改${KYLIN_HOME}/conf下的kylin.properites 添加以下配置
#部署服务器ip,便于其他机器访问
kylin.rest.servers=192.168.1.22:7070
#kylin在hdfs存储路径(可以提前创建)
kylin.hdfs.working.dir=/data1/dfs/dn

2.2.2 20、21主机安装

1. 部署安装同上,分别部署在21/20
2. 修改${KYLIN_HOME}/conf下的kylin.properites(每台)
#部署服务器ip,便于其他机器访问,保持状态同步
kylin.rest.servers=192.168.1.22:7070,192.168.1.20:7070,192.168.1.21:7070
#kylin在hdfs存储路径
kylin.hdfs.working.dir=/data1/dfs/dn
#kylin工作模式
#22主机,集群中仅有一台设置为all或者job
kylin.server.mode=all
#21主机
kylin.server.mode=query
#20主机

kylin.server.mode=query

2.2.3 多节点部署说明

基于负载平衡的考虑,可以启动多个实例共享相同的元数据。每个kylin实例在conf/kylin.properties目录下都有一个配置文件kylin.server.mode。修改配置文件分别对应三种模式选项:1、“job”只负责job引擎的运行 2、“query”只负责query引擎的运行 3、“all” 两个均可运行。注意只有一个服务器可以运行job引擎(“job”模式或“all”模式),其它必须是“query”模式。

2.3 注意事项

• kylin运行需要依赖hadoop环境,部署需提前部署HDFS/HBASE/HIVE/ZOOKEEPER/MR

• 需用hdfs用户解压安装apache-kylin-1.2-bin.tar

• 由于主机的系统时间不同步,启动HBASE服务会出错,修改节点时间,22节点,操作/home/haohl/modtime.sh,同步修改集群所有节点

3 操作使用
    3.1 启动

使用hdfs用户,在命令行任意位置下执行 kylin.sh start
可以通过 netstat -anp | grep 7070 查看(kylin默认使用7070端口),也可以 tail -f /home/kylin/apache-kylin-1.2/tomct/logs 查看启动信息
启动成功后,访问 http://192.168.1.22:7070/kyliln/ 用户名 ADMIN 密码 KYLIN
3.2 Kylin Cube 创建
Kylin web界面:
在这里插入图片描述
3.2.1 新建一个项目
1. 由顶部菜单栏进入Query页面,然后点击Manage Projects
2. 点击+ Project按钮添加一个新的项目
3. 填写下列表单并点击submit按钮提交请求
4. 成功后,底部会显示通知
3.2.2 同步一张表
1. 在顶部菜单栏点击Tables,然后点击+ Sync按钮加载hive表元数据。
2. 输入表名并点击Sync按钮提交请求。
3.2.3 新建一个cube
首先,在顶部菜单栏点击Cubes。然后点击+Cube按钮进入cube designer页面。
3.2.3.1 Cube信息
填写cube基本信息。点击Next进入下一步。
你可以使用字母、数字和“_”来为你的cube命名(注意名字中不能使用空格)。
3.2.3.2 维度
1. 建立事实表
2. 点击+Dimension按钮添加一个新的维度
3. 可以选择不同类型的维度加入一个cube,从查找表获取维度。
4. 用户可以在保存维度后进行编辑
3.2.3.3 度量
1. 点击+Measure按钮添加一个新的度量。
2. 根据它的表达式共有5种不同类型的度量:SUM、MAX、MIN、COUNT和COUNT_DISTINCT。请谨慎选择返回类型,它与COUNT(DISTINCT)的误差率相关。

            3.2.3.4 过滤器

这一步骤是可选的。你可以使用SQL格式添加一些条件过滤器。
3.2.3.5 更新设置
这一步骤是为增量构建cube而设计的。
3.2.3.6 高级设置
3.2.3.7 概览 & 保存
你可以概览你的cube并返回之前的步骤进行修改。点击Save按钮完成cube创建。
3.2.4 Kylin Cube 建立和Job监控教程
3.2.4.1 Cube建立
1. 确认你拥有你想要建立的cube的权限
2. 在Cubes页面中,点击cube栏右侧的Action下拉按钮并选择Build操作
3. 选择后会出现一个弹出窗口。点击END DATE输入框选择增量构建这个cube的结束日期
4. 点击Submit提交请求。提交请求成功后,你将会看到Jobs页面新建了job
5. 如要放弃这个job,点击Discard按钮
3.2.4.2 Job监控
1. 在Jobs页面,点击job详情按钮查看显示于右侧的详细信息
2. job详细信息为跟踪一个job提供了它的每一步记录。你可以将光标停放在一个步骤状态图标上查看基本状态和信息。
3. 点击每个步骤显示的图标按钮查看详情:Parameters、Log、MRJob、EagleMonitoring。

    3.3 结果测试
        3.3.1 大数据量汇总

千万级数据量,维度3个,指标2个,构建cube耗时20分钟左右

每次查询耗时:
kylin:
0.7秒左右
hive:
36秒左右
3.3.2 多表关联汇总
源表三张,主表数据量在1000条,维度8个,指标1个,两张副表采用内关联。构建cube耗时6分钟左右

每次查询耗时:
kylin:
0.2秒左右
hive:
每次查询均耗时在30秒左右

4 发展规划

计划后续支持如下的功能:
• 在高基数维度上支持TopN算法(即对大量对象进行排序并从中选取前N位结果):目前的MOLAP技术在高基数维度上进行查询时的表现尚算不上完美——例如对单一列中的数百万个不同值进行TopN运算。与各类搜索引擎类似(正如众多研究人员所指出),倒排索引是此类预构建结果的理想匹配机制。
• 支持混合OLAP(简称HOLAP):MOLAP在历史数据查询领域拥有出色的实际表现,但由于越来越多数据需要以实时方式加以处理,因此我们需要尽快将实时/近实时处理结果与历史结果结合起来、以作为业务决策中的参考信息。很多内存内技术方案已经能够以关系型OLAP(简称ROLAP)的方式满足上述需求。而Kylin的下一代版本将成为混合OLAP(简称HOLAP),即结合MOLAP与ROLAP双方的优势以带来单一一套面向前端查询的入口点方案。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值