背景

为了应对各种数据需求,通常,我们的做法是这样的:

  1. 对于临时性的数据需求:写HQL到Hive里去查一遍,然后将结果转为excel发送给需求人员。
  2. 对于周期性的、长期性的数据需求:编写脚本,结合Hive跑出结果,将结果写入对应DB库,然后开发前端页面对结果进行展现。

这样做简洁明了,但是,有很明显的问题:

  1. 开发成本太高。每来一个需求,不管是临时需求还是长期需求,都需要进行定制开发,这种情况下,我们的人力深陷其中。
  2. 使用不灵活。一个报表,只能进行展示,没有分析功能,如果要进行分析,需要将数据复制到excel里,利用excel进行处理分析,而我们的数据使用人员不一定具备这种能力。
  3. 维护成本高。太多人开发报表,没有统一口径,没有详细文档,没有人能接手。
  4. 资源浪费。不同人员开发的报表,很多情况下存在很多重复计算。

在这种情况下,开始考虑构建一个多维分析平台,提供平台和基础数据,数据需求方通过托拉拽的形式获取需要的数据。本文主要记录这方面的一些探索。

Saiku

首先,选择使用 Saiku 作为我们的数据分析平台,下面是 Saiku 官网对 Saiku 的介绍:

Saiku allows business users to explore complex data sources, using a familiar drag and drop interface and easy to understand business terminology, all within a browser. Select the data you are interested in, look at it from different perspectives, drill into the detail. Once you have your answer, save your results, share them, export them to Excel or PDF, all straight from the browser.

Saiku 是基于 Mondrian 开发的,Mondrian 是一款开源的 OLAP 引擎,能提供对大量数据的处理分析,但是,Mondrian 并没有提供友好的界面,而Saiku作为另一个开源产品,很好的充当了这个角色。

Saiku 提供JDBC 和 ODBC 接口,可以连接很多的数据源,既可以连接 MySQL、SQL Server、Oracle DB 等传统关系型数据库,也可以连接 Hive、Spark、Impala等 Big Data 平台。

Saiku + MySQL

首先,我们用 Saiku+MySQL很快搭建了测试平台,可以实现基本的多维分析,但是,仅适用于小数据量的分析,否则会有很严重的性能问题。

Saiku + Spark

由于 Saiku+MySQL 的性能问题,又尝试了 Saiku+Spark 的方案,数据存储于 Hive,分析引擎使用 Spark,在这种情况下,可以处理大数据量的查询分析,大部分查询都会在几十秒到几分钟内返回结果,如果数据量太大,也会存在执行失败的情况。所以,开始探索其他方案。

Kylin

Apache Kylin™ is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Hadoop supporting extremely large datasets, original contributed from eBay Inc.

Kylin 相对于其他OLAP分析引擎,一个重要特点是采用空间换时间,根据定义的cube进行预计算,并将计算结果存储到Hbase中,在进行查询时,直接查询Hbase,所以,Kylin 的查询可以到毫秒级,性能完全不是问题。

Kylin 提供 ANSI SQL 接口来对数据进行查询,没有可视化操作,所以,有一定的使用门槛。同时,由于Kylin 提供的 ANSI SQL接口,Kylin 也就可以和BI平台进行对接,比如,Kylin 已经支持 Tableau 等BI工具,奈何 Tableau 是商业软件,so…

Saiku + Kylin 实现多维分析  https://github.com/mustangore/kylin-mondrian-interaction

Saiku 根据用户在页面的操作,生成 MDX,然后,Mondrian根据MDX生成查询语句SQL,而 Kylin 可以根据SQL 查询 cube,快速得到结果,所以,如果 Saiku 和 Kylin 中定义了相同的 cube,那么,就可以通过Saiku 来查询 Kylin了,从而将 Saiku 的操作页面和 Kylin 的高性能查询能力结合起来。

Google 一下,Github 已经有人这么做了,按照该项目说明就可以轻松搭建 Saiku+Kylin 多维分析平台。

Saiku+Kylin 的分析平台能实现的分析能力,很大程度取决于 Kylin 支持的 SQL 和 Mondrian 生成的 SQL的共通点,经过测试,Kylin 能对绝大多数 SQL 提供友好支持,可以和 Saiku 进行完美结合。

总结

Saiku 作为分析平台,提供可视化的操作,能方便的对数据进行查询、分析,并提供图形化显示,但是,Saiku 有一定的使用门槛,特别是对国内的使用者来说,所以,可能需要一些定制开发。

Kylin 作为分析引擎,根据空间换时间的思想,对数据进行预计算,从而提供极高的查询性能,并且提供 ANSI SQL 接口,可以极大程度满足日常查询需求。但是,Kylin 对 Hadoop 生态版本有较高的要求,所以,尽量按照官方推荐版本安装配置。

PS:本文采用 Saiku 3.7.4 和 Kylin 1.2。

Saiku + Kylin 多维分析平台探索的更多相关文章

  1. 【转】Kylin系列-使用Saiku+Kylin构建多维分析OLAP平台

    关于Kylin的介绍和使用请参考之前的文章 <分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例> Kylin对外提供的是SQL查询接口,基于Kylin构建OL ...

  2. Saiku_学习_03_Saiku+Kylin构建多维分析OLAP平台

    一.技术选型 参见:Saiku+Kylin多维分析平台探索 1.saiku Saiku 作为分析平台,提供可视化的操作,能方便的对数据进行查询.分析,并提供图形化显示 2.kylin Kylin 作为 ...

  3. Saiku资源帖

    一.精选 1.李秋 随笔分类 - pentaho 二.概述 1.Saiku + Kylin 多维分析平台探索 三.Saiku+Kylin 1.使用Saiku+Kylin构建多维分析OLAP平台 2.使 ...

  4. Saiku_00_资源帖

    一.精选 1.李秋 随笔分类 - pentaho 二.概述 1.Saiku + Kylin 多维分析平台探索 三.Saiku+Kylin 1.使用Saiku+Kylin构建多维分析OLAP平台 2.使 ...

  5. Apache Kylin学习资料

    官方文档: http://kylin.apache.org/cn/docs/tutorial/web.html kylin对接hive实现实时查询:https://www.cnblogs.com/65 ...

  6. druid与知乎平台

    背景 知乎作为知名中文知识内容平台,业务增长和产品迭代速度很快,如何满足业务快速扩张中的灵活分析需求,是知乎数据平台组要面临的一大挑战. 知乎数据平台团队基于开源的 Druid 打造的业务自助式的数据 ...

  7. 大数据下的数据分析平台架构zz

    转自http://www.cnblogs.com/end/archive/2012/02/05/2339152.html 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海 ...

  8. 国外物联网平台(2):微软Azure IoT

    国外物联网平台(2)——微软Azure IoT 马智 平台定位 连接设备.其它 M2M 资产和人员,以便在业务和操作中更好地利用数据. 连接 IoT 设备 将所有设备连接到云,从这些设备接收大规模数据 ...

  9. 国外物联网平台初探(二) ——微软Azure IoT

    平台定位 连接设备.其它 M2M 资产和人员,以便在业务和操作中更好地利用数据. 连接 IoT 设备 将所有设备连接到云,从这些设备接收大规模数据,以及管理这些设备的授权和限制. 在将设备连接到云和处 ...

随机推荐

  1. python-面向对象-04_面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  2. 接口测试工具-Jmeter使用笔记(四:响应断言)

    Jmeter中断言的类型有许多,我不在这里一一列举,只说下我用到的---响应断言. 作用:一个HTTP请求发出去,怎么判断执行的任务是否成功呢?通过检查服务器响应数据,是否返回预期想要的数据,如果是, ...

  3. mysql在linux上的安装

    前提: 环境:workstation 11 + CentOS 7 + mysql-5.6.40 安装前先查看服务器里是否有老版本的mysql已经被安装了 rpm -qa|grep mysql 如果有就 ...

  4. 数据库---mysql的介绍和安装

    MySQL数据库 一.简介: mysql是数据库管理软件:套接字:服务端,客户端 支持并发:操作得是共享得数据 处理锁,数据安全,性能 用别人得软件,得照着别人得规范,组织自己得语法规则 二.概述: ...

  5. 设置 matlab 画图格式

    1:设置 matlab 画图格式 clear;clc; % load("array.mat"); % Bestallarray=array; % rllofcircle(Besta ...

  6. [css]table的拆分

    https://blog.csdn.net/qq_35415600/article/details/70237433 <body> <table border="1&quo ...

  7. (转)MySQL排序原理与案例分析

    前言      排序是数据库中的一个基本功能,MySQL也不例外.用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct ...

  8. asp.net几个重要对象

    DataSet是用来做连接sql的一种方法,意思是把数据库的副本存在应用程序里,应用程序开始运行时,把数据库相关数据保存到DataSet.DataTable表示内存中数据的一个表.常和DefaultV ...

  9. iText实现导出pdf文件java代码实现例子

    ///////////////////////////////////主类////////////////////////////////////////// package com.iText; i ...

  10. nodejs 模块moment格式化时间,获取当前时间的前一天时间

    var moment = require('moment'); moment.locale('zh-cn'); var today = {}; var _today = moment(); today ...