Apache kylin 入门
本篇文章就概念、工作机制、数据备份、优势与不足4个方面详细介绍了Apache Kylin。
Apache Kylin 简介
1. Apache kylin 是一个开源的海量数据分布式预处理引擎。它通过 ANSI-SQL 接口,提供基于 hadoop 的超大数据集(TB-PB 级)的多维分析(OLAP)功能。
2. kylin 可实现超大数据集上的亚秒级(sub-second latency)查询。
1)确定 hadoop 上一个星型模式的数据集。
2)构建数据立方体 cube。
3)可通过 ODBC, JDBC,RESTful API 等接口在亚秒级的延迟内查询相
Apache Kylin 核心概念
1. 表(Table ):表定义在 hive 中,是数据立方体(Data cube)的数据源,在 build cube 之前,必须同步在 kylin 中。
2. 模型(model): 模型描述了一个星型模式的数据结构,它定义了一个事实表(Fact Table)和多个查找表(Lookup Table)的连接和过滤关系。
3. 立方体(Cube):它定义了使用的模型、模型中的表的维度(dimension)、度量(measure , 一般指聚合函数,如:sum、count、average 等)、如何对段分区( segments partition)、合并段(segments auto-merge)等的规则。
4. 立方体段(Cube Segment):它是立方体构建(build)后的数据载体,一个 segment 映射 hbase 中的一张表,立方体实例构建(build)后,会产生一个新的 segment,一旦某个已经构建的立方体的原始数据发生变化,只需刷新(fresh)变化的时间段所关联的 segment 即可。
5. 作业(Job):对立方体实例发出构建(build)请求后,会产生一个作业。该作业记录了立方体实例 build 时的每一步任务信息。作业的状态信息反映构建立方体实例的结果信息。如作业执行的状态信息为 RUNNING 时,表明立方体实例正在被构建;若作业状态信息为 FINISHED ,表明立方体实例构建成功;若作业状态信息为 ERROR ,表明立方体实例构建失败!作业的所有状态如下:
1)NEW - This denotes one job has been just created.
2)PENDING - This denotes one job is paused by job scheduler and waiting for resources.
3)RUNNING - This denotes one job is running in progress.
4)FINISHED - This denotes one job is successfully finished.
5)ERROR - This denotes one job is aborted with errors.
6)DISCARDED - This denotes one job is cancelled by end users.
Apache Kylin 工作机制
1. Apache kylin 能提供低延迟(sub-second latency)的秘诀就是预计算,即针对一个星型拓扑结构的数据立方体,预计算多个维度组合的度量,然后将结果保存在 hbase 中,对外暴露 JDBC、ODBC、Rest API 的查询接口,即可实现实时查询。数据立方体一般由 Hive 中的一个事实表, 多个查找表组成。预计算的过程在 kylin 中就是 Cube 的 build 过程,如下图:
2. 当前 Apache kylin 构建(build)数据立方体,采用逐层算法(By Layer Cubing)。未来的发布中将采用快速立方体算法(Fast Cubing)。
下面简单介绍一下逐层算法:
一个完整的数据立方体,由 N-dimension 立方体,N-1 dimension 立方体,N-2 维立方体,0 dimension 立方体这样的层关系组成,除了 N-dimension 立方体,基于原数据计算,其他层的立方体可基于其父层的立方体计算。所以该算法的核心是 N 次顺序的 MapReduce 计算。
在 MapReduce 模型中,key 由维度的组合的构成,value 由度量的组合构成,当一个 Map 读到一个 key-value 对时,它会计算所有的子立方体(child cuboid),在每个子立方体中,Map 从 key 中移除一个维度,将新 key 和 value 输出到 reducer 中。直到当所有层计算完毕,才完成数据立方体的计算。过程如下图:
3. 在数据立方体计算完毕后,有一个任务(Convert Cuboid Data to HFile),其职责是将 reduce 输出的运算结果(Cuboid Data)转化成 Hbase 中的存储载体(HFile),最终将 HFile 加载到 Hbase 表中便于查询。其中表的 rowkey 由维度组合而成,维度组合对应的度量值构成了 column family,为了查询减少存储空间,会对 RowKey 和 column family 的值进行编码,默认编码是 Snappy。
4. 整个数据立方体的构建流程如下:
5. Apache kylin 架构如下:
6. 核心组件:
1)数据立方体构建引擎(Cube Build Engine):当前底层数据计算引擎支持 MapReduce1、MapReduce2、Spark 等。
2)Rest Server:当前 kylin 采用的 rest API、JDBC、ODBC 接口提供 web 服务。
3)查询引擎(Query Engine):Rest Server 接收查询请求后,解析 sql 语句,生成执行计划,然后转发查询请求到 Hbase 中,最后将结构返回给 Rest Server。
Apache Kylin 元数据备份
1. 备份元数据
Kylin 将它全部的元数据(包括 cube 描述和实例、项目、倒排索引描述和实例、任务、表和字典)组织成层级文件系统的形式。然而,Kylin 使用 hbase 来存储元数据,而不是一个普通的文件系统。如果你查看过 Kylin 的配置文件(kylin.properties),你会发现这样一行:
## The metadata store in hbase
kylin.metadata.url=kylin_metadata@hbase
这表明元数据会被保存在一个叫作 “kylin_metadata” 的 htable 里。你可以在 hbase shell 里 scan 该 htbale 来获取它。
2. 使用二进制包来备份 Metadata Store 有时你需要将 Kylin 的 Metadata Store 从 hbase 备份到磁盘文件系统。在这种情况下,假设你在部署 Kylin 的 hadoop 命令行(或沙盒)里,你可以到 KYLIN_HOME 并运行:
./bin/metastore.sh backup
来将你的元数据导出到本地目录,这个目录在 KYLIN_HOME/metadata_backps 下,它的命名规则使用了当前时间作为参数:KYLIN_HOME/meta_backups/meta_year_month_day_hour_minute_second 。
3. 使用二进制包来恢复 Metatdara Store
万一你发现你的元数据被搞得一团糟,想要恢复先前的备份:
首先,重置 Metatdara Store(这个会清理 Kylin 在 hbase 的 Metadata Store 的所有信息,请确保先备份):
./bin/metastore.sh reset
然后上传备份的元数据到 Kylin 的 Metadata Store:
./bin/metastore.sh restore $KYLIN_HOME/meta_backups/meta_xxxx_xx_xx_xx_xx_xx
4. 在开发环境备份 / 恢复元数据在开发调试 Kylin 时,典型的环境是一台装有 IDE 的开发机上和一个后台的沙盒,通常你会写代码并在开发机上运行测试案例,但每次都需要将二进制包放到沙盒里以检查元数据是很麻烦的。这时有一个名为 SandboxMetastoreCLI 工具类可以帮助你在开发机本地下载 / 上传元数据。
5. 从 Metadata Store 清理无用的资源
随着运行时间增长,类似字典、表快照的资源变得没有用(cube segment 被丢弃或者合并了),但是它们依旧占用空间,你可以运行命令来找到并清除它们:
首先,运行一个检查,这是安全的因为它不会改变任何东西:
./bin/metastore.sh clean
将要被删除的资源会被列出来:
接下来,增加 “–delete true” 参数来清理这些资源;在这之前,你应该确保已经备份 metadata store:
./bin/metastore.sh clean --delete true
Apache Kylin 的优势与不足
1. 性能非常稳定。因为 Kylin 依赖的所有服务,比如 Hive、HBase 都是非常成熟的,Kylin 本身的逻辑并不复杂,所以稳定性有一个很好的保证。目前在生产环境中,稳定性可以保证在 99.99% 以上。同时查询时延也比较理想。
2. 特别重要的一点,就是数据的精确性要求。其实现在能做到的只有 Kylin,在这一点上也没有什么太多其他的选择。
3. 从易用性上来讲,Kylin 也有非常多的特点。首先是外围的服务,不管是 Hive 还是 HBase,只要大家用 Hadoop 系统的话基本都有了,不需要额外工作。在部署运维和使用成本上来讲,都是比较低的。Kylin 有一个通用的 Web Server 开放出来,所有用户都可以去测试和定义,只有上线的时候需要管理员再 review 一下,这样体验就会好很多。
4. 查询灵活性。经常有业务方问到,如果 Cube 没定义的话怎么办?现在当然查询只能失败。这个说明有的查询模式不是那么固定的,可能突然要查一个数,但以后都不会再查了。实际上在需要预定义的 OLAP 引擎上,这种需求普遍来讲支持都不是太好。 从维度的角度来看,一般维度的个数在 5-20 个之间,相对来说还是比较适合用 Kylin 的。另一个特点是一般都会有一个日期维度,有可能是当天,也有可能是一个星期,一个月,或者任意一个时间段。另外也会有较多的层次维度,比如组织架构从最上面的大区一直到下面的蜂窝,就是一个典型的层次维度。 从指标的角度来讲,一般情况下指标个数在 50 个以内,相对来说 Kylin 在指标上的限制并没有那么严格,都能满足需求。其中有比较多的表达式指标,在 Kylin 里面聚合函数的参数只能是单独的一列,像 sum(if…) 这种就不能支持,因此需要一些特别的解决方法。另外一个非常重要的问题是数据的精确性,目前在 OLAP 领域,各个系统都是用 hyperloglog 等近似算法做去重计数,这主要是出于开销上的考虑,但业务场景有时要求数据必须是精确的。因此这也是要重点解决的问题
【本文转载自小米运维】
Apache kylin 入门的更多相关文章
- 【转】使用Apache Kylin搭建企业级开源大数据分析平台
http://www.thebigdata.cn/JieJueFangAn/30143.html 本篇文章整理自史少锋4月23日在『1024大数据技术峰会』上的分享实录:使用Apache Kylin搭 ...
- 使用Apache Kylin搭建企业级开源大数据分析平台
转:http://www.thebigdata.cn/JieJueFangAn/30143.html 我先做一个简单介绍我叫史少锋,我曾经在IBM.eBay做过大数据.云架构的开发,现在是Kylige ...
- 《基于Apache Kylin构建大数据分析平台》
Kyligence联合创始人兼CEO,Apache Kylin项目管理委员会主席(PMC Chair)韩卿 武汉市云升科技发展有限公司董事长,<智慧城市-大数据.物联网和云计算之应用>作者 ...
- Apache Kylin 部署之不完全指南
1. 引言 Apache Kylin(麒麟)是由eBay开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据.底层存储用的是HBase,数据输入与cu ...
- Apache Maven 入门篇 ( 上 )
作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法. 这个入门篇分上下两篇.本文着重动手,用 mav ...
- [转]Apache Maven 入门篇 ( 上 )
原文地址:Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这 ...
- [转]Apache Maven 入门篇(下)
原文地址: Apache Maven 入门篇(下) 作者:George Ma 第一篇文章大概的介绍了一下Apache Maven以及它的下载和安装,并且运行了一个简单的示例.那么在对maven有了一点 ...
- Apache Maven 入门
Apache Maven 入门篇 ( 上 ) Apache Maven 入门篇 ( 下 ) ~$mvn archetype:generate -DgroupId=com.mycompany.hello ...
- 大数据分析神兽麒麟(Apache Kylin)
1.Apache Kylin是什么? 在现在的大数据时代,越来越多的企业开始使用Hadoop管理数据,但是现有的业务分析工具(如Tableau,Microstrategy等)往往存在很大的局限,如难以 ...
随机推荐
- 【原创】单片系统SoC
人们根据需要把一些功能模块(蓝牙.GPRS.TCP/IP通信模块等等)与MCU进行有机的结合,制造出集成度更高的系统级的芯片. SoC是System on Chip的缩写,直译是“芯片级系统” ...
- 【杂谈】tocmat是何时写回响应数据报的
疑问的产生 这个疑问是我在写文件下载的时候产生的,我是用HttpServletResponse获取到Outputstream,然后利用OutputStream直接写数据的.当时我就想这个OutputS ...
- 【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版
原文链接: https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html 原文内容也一并附加在本文最 ...
- selenium缺少chromedriver解决方法
1.安装好selenium,运行一段测试代码: from selenium import webdriver brower = webdriver.Chrome() brower.get('www.b ...
- ZooKeeper系列(5):ZooKeeper的日志和快照
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper有两种日志.一种快照.日志分为事务日志和Zoo ...
- DNS域名解析之搭建公司内部域--技术流ken
什么是DNS DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换 ...
- 结构型---桥接模式(Bridge Pattern)
定义 桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化.桥接模式的目的就是使两者分离,根据面向对象的封装变化的原则,我们可以把实现部分的变化封装到另外一个类中,这样的一个思路也就是桥接模式的实现 ...
- c# 创建,加载,修改XML文档
using System.Xml.Linq; static void Main(string[] args) { XDocument xDocument = new XDocument(new XEl ...
- 1.写页面 2.css的继承属性有哪些 3.margin对布局的影响
1. sparent 透明的 2. placeholder 提示语 写页面 1.搞清结构层次 2. 保证模块化 让它们之间不能收到影响. (1) 元素性质 (2)标准流 浮动带来的脱离文档流撑不起父级 ...
- angular post 带参数 导出excel
原文地址:http://www.cnblogs.com/xujanus/p/5985644.html html <button class="btn btn-info" ng ...