首页 > 自考资讯 > 自考资讯

魔古街主:三外教你一些可以安装X的Kirin入门教程

2024-10-09

很多朋友对于魔古街主:三外教你一些可以安装X的Kirin入门教程和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

今天我想和大家介绍一下麒麟。

由于工作需要,前段时间简单的开始了kylin的入门,现在准备写一些笔记(我的话也许对你入门kylin有帮助,至少读完这篇文章你应该知道kylin是做什么的)。

BB不多,开始吧

kylin介绍

kylin是我们中国人主导的开源项目,为Apache基金会做出贡献,所以我们会有中文文档可供研究:

http://kylin.apache.org/cn/

我们可以看到官方对kylin的介绍:Apache Kylin是一个开源的分布式分析数据仓库,在Hadoop/Spark上提供SQL查询接口和多维分析(OLAP)能力,支持超大规模数据。最初由eBay 开发并贡献给开源社区,它可以在亚秒内查询巨大的表。

看完这个介绍,我只能用两个字来形容Kylin:牛逼。厉害之处在哪里?下面我们就来说一下

乍一看,有些同学可能不知道什么是OLAP。下面我简单解释一下。 (Hadoop/Spark/SQL/Big Data这些词你每天都会看到,即使你不明白它们的原理,你也知道这些东西是用来做什么的,对吧?)

看到OLAP,就不得不提到它的兄弟OLTP。我们简单看一下他们的全名和中文翻译:

OLTP:On-Line TransactionProcessing(在线事务处理) OLAP:On-LineAnalyticalProcessing(在线分析处理) 中文翻译我们怕看不懂,但是可以发现它们的区别是“交易”。一是“分析”

从应用层面,我们可以简单认为OLTP主要应用于业务系统,对交易的要求比较高,比如下单/交易(银行转账等服务)。 OLAP主要应用于数据仓库系统,支持复杂的分析操作,侧重于决策支持,提供直观易懂的查询结果。

我再画一张思维导图给你看,你就基本明白了:

至此,您应该对OLAP有了基本的了解。我们回到上面那句话:多维分析(OLAP)能力可以支持超大规模的数据。你的第一反应是什么?

三外首先想到的是Hive(Hive的底层是HDFS:支持极大规模的数据)。

现在我们谈论Hive,你会发现在Kylin的前半句话中,Hive似乎能够支持几乎所有的东西,除了最后一句“它可以在亚秒内查询巨大的表”。

没错,到这里你就可以知道kylin的用途了:可以在亚秒级的时间内查询巨大的表,完成数据分析和决策

每次我们运行Hive的时候,可能都要运行几分钟(如果我SQL写不好的话,运行半个小时是常有的事)。从业务角度来说,我们希望用于分析的数据能够运行得更快。为了支持这种需求,Kylin 开始流行起来。

我用Hive来指代kylin。除了麒麟就没有别的选择了吗?显然事实并非如此。

当我刚加入公司时,我抱怨Hive 运行得太慢。隔壁小伙告诉我:用presto,这是我们大数据平台支持的。

OLAP提供的工具框架还是很多的。让我们简单地看一下它们。

众所周知,执行Hive实际上意味着运行Map-Reduce任务从HDFS获取数据。执行过程涉及计算和存储。

有些人认为在Hive上运行Map-Reduce计算的过程太慢,因此不使用Map-Reduce而使用其他计算引擎,例如MPP架构,但存储没有改变.

有些人认为检索存储在HDFS 中的数据太慢,因此他们应该更改存储位置而不是从HDFS 检索数据.

有些人认为这是一件糟糕的事情。我改变了计算和存储。我可以用我的框架一站式为你解决.

有人认为Hadoop生态系统还可以。我先汇总一下。检查的时候可以直接拿到聚合后的数据,也很快……

由于每个公司的业务场景和背景不同,每个OLAP框架的强项也不同,所以有那么多闪闪发光的OLAP技术……

Kylin入门

我们已经知道为什么有这么多OLAP 技术。本质上,我们想要分析数据,以便我们可以更快地检查它,而Kylin 就是这些技术之一。

从上图也可以看出kylin完全依赖于Hadoop生态系统。那么kylin是如何实现提速的呢?答案是:预聚合

魔古街主:三外教你一些可以安装X的Kirin入门教程

假设我们从MySQL 中检索日期大于2020-10-20 的所有数据。只要我们给日期列添加索引,就可以快速找到相关数据。

但如果我们从MySQL中检索出日期大于2020-10-20的所有数据以及每个用户在这段时间消费了多少xxxx,只要数据量大,无论你怎么建索引,查询速度会不尽如人意。

那么如果我先按照天维度对每个用户进行统计,写入到一个表中,用户按日期检索的时候是不是很快(因为我已经按天聚合过一次数据了,这个表更快比原来的原始表数量会大大减少)

Kylin利用预聚合的思想来提高查询的速度,使其能够实现亚秒级的查询响应。

那么我们使用kylin有哪些步骤呢?官方已经给了我们答案:

在数据集上定义星形或雪花模型。在定义的数据表上构建一个立方体。使用标准SQL 通过ODBC、JDBC 或RESTFUL API 进行查询。只需亚秒级响应时间即可获得查询结果。以上步骤是: 一些你可能不太理解的单词包括下面的星形模型、雪花模型、立方体。下面我来简单解释一下:

在数据仓库领域,我们的主表称为事实表,而事实表的外键所依赖的表称为维度表。

“星型模型”:所有维度表都直接连接到事实表。 (如上图)

“雪花模型”:当一个或多个维度表不直接与事实表连接,而是需要通过其他维度表与事实表连接时(下)

在kylin中,分析数据的视角称为“维度”,分析的指标称为“度量”

好吧,我们来看看cube是什么意思:

多维数据集称为OLAP Cube:我们可以将上面的二维表组成一个数据立方体,这个数据立方体就是一个Cube

一个Cube 可以从不同的角度观察,并且看起来这些多个角度是从一个完整的Cube 中分割出来的,例如:

结合上面说的:Cube其实就是数据集中不同维度构建的立方体(虽然图中的数字都是三维的,但是你构建的Cube可以远远不止三维)

Kylin 从Cube 获取数据。官方的说法很明确,可以通过JDBC/RESTful来获取数据。

那么kylin把聚合后的数据存储在哪里(肯定有存储的地方)?在HBase 上。如果你还没有学习HBase,可以先阅读我之前的文章:HBase入门

kylin使用步骤:

首先,你要有数据(一般来自Hive/Kafka),在Kylin上定义相应的数据模型(结构),并通过kylin系统配置需要聚合和统计的字段(这就是上面提到的维度和度量),以及然后构建Out of Cube(这是kylin的预聚合,所有需要统计的维度都被提前定义和计算)kylin会将数据存储在HBase上,你可以通过JDBC/RESTful查询数据。

使用kylin

官网上也列出了比较常见的QA,你可以看一下:http://kylin.apache.org/cn/docs/gettingstarted/faq.html

虽然kylin可以支持多维聚合,但是我们在构建Cube的时候,一般需要对Cube进行剪枝(即减少Cuboid的生成)

假设我们有10 个维度,那么未经任何优化的Cube 将有2 的10 次方=1000+ 个长方体。

Cube的最大物理维度数(不包括派生维度)为63个,但不建议使用超过30个维度的Cube,否则会造成维度灾难。

常用的剪枝方法是利用聚合组(Aggregation group)配置来实现的,而在聚合组中,使用较多的是Mandatory(强制维度)。

比如本来我有A、B、C三个维度,如果我不做任何优化的话,我的组合应该有7个,即(A) (B) (C) (AB) (ABC) (AC ) ( BC),如果我指定尺寸A为强制尺寸,那么最终的组合只有(A)(AB)(ABC)(AC)。强制索引是指:查询条件中必须包含指定字段

除了强制维度(Mandatory)之外,还有层次维度(Hierarchy)和联合维度(Joint)来帮助我们剪枝(即减少Cuboid的生成)。一般情况下,使用较多的是强制尺寸和接头尺寸。

当我们查看kylin数据时,它已经被聚合并存储在HBase中,因此查询速度相当快,但构建Cube的过程实际上相当慢(十几分钟到半个小时是正常的)。

这会带来延迟(Cube需要时间来构建,不可能要求Cube每秒构建一次)。这可以容忍吗?这意味着在调度Cube任务并构建Cube之前无法找到最新数据。

画外音:构建Cube 通常是通过定时任务请求Kylin 的API 来完成的。

Kylin 没有内置的调度功能。您可以通过REST API 从外部调度服务触发Cube 的调度构建,例如Linux 命令crontab、Apache Airflow 等。

但在新的kylin版本中,已经支持realtime_olap了。 Kylin存储实时数据,并合并来自HBase的数据后返回,实现实时性。

用户评论

∞◆暯小萱◆

哇塞!这个标题好有趣!我一直就想学点麒麟知识,但又不知道从哪里开始,感觉蘑菇街大牛这篇文章正好对准我的需求了。“三歪”和“能装X” 这两个词简直太吸引人了,一定要去看看!

    有20位网友表示赞同!

冷青裳

最近在网上逛的比较多,看到很多人都讨论麒麟这个东西,我也想去试试看。 以为麒麟是一种什么稀有的生物呢?没想到是程序啊,感觉有点出乎意料,还是要看看这篇文章了解一下这“三歪”究竟是什么东东!

    有10位网友表示赞同!

浮殇年华

蘑菇街大牛挺厉害的,讲的东西总是能够给我带来一些不一样的视角。“能装X的麒麟入门教程” 这段宣传很成功,一下子就勾起了我的好奇心。

    有6位网友表示赞同!

我没有爱人i

这个标题让我觉得有点搞笑,不过我还是蛮喜欢这种幽默风趣的表达方式,说不定这篇文章讲得还挺有意思的! 对于麒麟入门教程,我倒更希望他能重点讲解麒麟的实际应用场景和使用技巧,这样对我们学习更有帮助。

    有16位网友表示赞同!

抓不住i

我对蘑菇街大牛的文章一直挺有信赖的,他講东西总是那么深入淺出,相信这次的“三歪教你些能装X的麒麟入门教程”也不例外。

    有7位网友表示赞同!

半世晨晓。

我一直觉得软件开发这块的东西太复杂了,看着那些晦涩难懂的代码头疼不已。 这篇文章会不会教一些简单易懂的麒麟基础知识呢?我很期待!

    有19位网友表示赞同!

别留遗憾

“能装X的麒麟入门教程” 这句话很有意思,但是我想说一点,学习技术和是为了用它解决实际问题,还是要注重技术的内涵和应用价值,而不是只是为了“装X”。

    有19位网友表示赞同!

←极§速

我觉得有些文章标题比较哗众取宠,比如这次这个,感觉有点浮夸。 希望这个蘑菇街大牛能讲点有substance的内容,而不是为了吸引眼球而进行一些营销炒作。

    有13位网友表示赞同!

长裙绿衣

麒麟这个东西我还没学过,之前也没听别人提过。 看完这位大佬写的标题感觉好像很有意思的样子啊。

    有5位网友表示赞同!

孤廖

我对编程并不感兴趣,但是最近听说很多人都在学习麒麟,不知道这篇文章讲的“三歪”是什么? 如果能解释清楚的话,或许我可以对这个新事物有一个更全面的了解。

    有12位网友表示赞同!

致命伤

我倒是觉得这样的教程挺好的,反正我一直在学一些高端的技术,看看这种“能装X的”教程也能涨点知识,说不定还能学到一些新花招来唬人了。

    有9位网友表示赞同!

减肥伤身#

这篇文章标题看起来很有趣!总感觉蘑菇街大牛很会玩儿啊。 我已经迫不及待地想去看看他写的麒麟入门教程了,希望能从中收获一些干货!

    有5位网友表示赞同!

|赤;焰﹏゛

“能装X” 这两个字有点搞笑,不过我还是挺想了解一下这位蘑菇街大牛的心得体会,看他写的麒麟入门教程究竟长什么样!

    有7位网友表示赞同!

盲从于你

说实话,我对这样的标题感到有点困惑。 难道学习技术是为了“装X”?我觉得这篇文章的重点应该放在技术本身的价值和意义上,而不是一些虚荣的表象。

    有9位网友表示赞同!

执念,爱

我一直在想办法提升自己的编程水平,希望蘑菇街大牛的这个入门教程能够给我一些启发,让我更快地上手麒麟!

    有8位网友表示赞同!

景忧丶枫涩帘淞幕雨

我觉得学习新的编程语言需要一种认真踏实的态度,不能只看重“装X”的效果。 希望这位作者能够把重点放在技术本身的价值和应用场景上,而不是为了迎合某些人的需求而进行一些刻意炒作!

    有9位网友表示赞同!

凉城°

虽然这个标题有点耸人听闻,但是我对麒麟的技术还是比较感兴趣的,希望这个教程能给我带来一些实用的知识。

    有7位网友表示赞同!

猜你喜欢