功能需求(拟定)

  • 实时监控并展示服务器中的Hadoop集群运行状况,包括节点进程的运行与通信日志(报错的捕捉与报警)、存储空间的变化、配置文件信息等。
  • 数据信息的图形化展示,展示数据库与数据表的信息(比如),
  • 交互式的数据分析,封装好一些常用的SQL查询,能够在图形化界面操作直接展示表格与图形结果;封装一些数据分析算法并提供数据输入和参数设定的接口,能根据不同的数据源和参数选择实时运行出不同的实验结果。
  • 提供自定义代码入口,在以后的研究中可以随时添加尚未封装进去的新的数据分析功能。

大数据VS传统可视化

  • 面向的数据对象:大数据可视化工具必须能够处理半结构化和非结构化数据(大数据通常具有这种格式)

  • 维度选择:需要做到精确,如果减小维度以使可视化程度降低,则可能最终会丢失有用的模式,但是如果使用所有维度,最终可能会导致可视化过于密集而无法用于可视化。

  • 实时性:必须适应大数据的爆炸式增长需求,必须快速地收集分析数据、并对数据信息进行实时更新。

  • 多种数据集成支持方式:大数据的数据来源不仅仅局限于数据库,数据可视化工具需要能够支持团队协作数据、数据仓库、文本等多种方式,并能够通过互联网进行展现。

数据可视化工具

汇总

参考来源

开源工具 商业工具
Processing Tableau
Many Eyes Spotfire(TIBCO)
D3.js QlikView
R(基础包、lattice、ggplot2) FineBI
ECharts SAS Visual Analytics
Google Charts Adobe Illustrator
Flot HighCharts
Gephi iCharts
Envision.js Jolicharts
Prefuse Dundas Chart
Arbor.js LightningChart
Chart.js Microsoft Excel
Paper.js
NodeBox

部分开源工具

D3.js

优点:免费的JavaScript库,可以将任意数据连接到HTML的文档对象模型(DOM),然后将数据驱动的转换应用于文档,通过DOM编程API可以将文档作为对象访问。支持用于交互和动画的大型数据集和动态行为,开发时可以通过浏览器的内置元素检查器进行调试。

缺点:入门需要花费的时间较多

适用于擅长JavaScript,SVG或DOM的开发人员。

plotly

优点:用于创建图表和基于浏览器的开源Python图形库。可称为高级图表库,因为它是内置于D3.js库的顶部。可以使用该工具通过上载CSV文件或连接到SQL数据库来创建D3.js图表和地图。导出图片的质量较高,图形界面完全交互式。Plotly可以提供比较少见的图表,比如等高线图、烛台图(K线图)和3D图表,而大多数工具都没有这些图表。此外,Plotly的团队还维护着增长飞快的R、Python以及JavaScript的开源可视化库。

缺点:它不涉及jQuery,仅限于原始的JavaScript,需要API密钥和注册而不是pip安装。

适用于擅长Python的开发人员

RawGraphs

优点:目标是构建电子表格和矢量图形编辑器之间的链接,可以可视化TSV,CSV,DSV或JSON数据,有助于将数据转换为图表。数据导入的过程像复制粘贴一样简单,上传到RAW的数据将仅由Web浏览器处理,保证数据安全。

缺点:大多数图表的目的不明确(没有基本的线条图),需要开发人员来开发自定义图表。

Candela

带有一个标准化API,可用于实际数据科学应用程序,并且可以通过Resonant平台使用。

Sigmajs

Sigmajs是一个交互式可视化JavaScript函数库,专门用于制作关系网络图。Sigmajs可以在网页上显示社交关系脉络,在大数据社交网络可视化中非常重要。Sigmajs还支持展示从Gephi导出的图表,可以使用Sigmajs将这些图表直接展示在网页上。

AntV

是蚂蚁集团研发的一个可视化控件解决方案,包括了可视化图形语法、可视化引擎、图分析工具和地理空间数据的可视化框架等。从它的官网可以了解到现在阿里系的产品(支付宝、淘宝等)里的可视化都基于AntV开发。

ECharts

基于Canvas的纯Javascript的图表库,提供直观、生动、可交互、可个性化定制的数据可视化图表。ECharts 提供了常规的折线图柱状图散点图饼图K线图,用于统计的盒形图,用于地理数据可视化的地图热力图线图,用于关系数据可视化的关系图treemap旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图仪表盘,并且支持图与图之间的混搭。并且有深度的交互式数据探索,可以对数据进行多维度数据筛取、视图缩放、展示细节等交互操作。与D3.js相比,ECharts由百度团队研发,中文文档比较清晰,相对来说上手难度更低一点。

D3.js与ECharts的对比

这两个工具是目前各大公司的大数据平台最流行使用的图形库。

D3.js(基于SVG)

  • 太底层,学习成本大

  • 兼容到IE9以上以及所有的主流浏览器

  • D3.js通过svg来绘制图形

  • 可以自定义事件

  • SVG:不依赖分辨率;基于xml绘制图形,可以操作dom;支持事件处理器;但复杂度高,会减慢页面的渲染速度。

ECharts(基于canvas)

  • 封装好的方法直接调用
  • 兼容到ie6以及以上的所有主流浏览器
  • echarts通过canvas来绘制图形
  • 封装好的,直接用,不能修改
  • canvas:依赖分辨率;基于js绘制图形;不支持事件处理器;能以png或者jpg的格式保存图片

总结

一般的数据交互,后台返回数据,前端将数据通过图表的形式展示给用户,对于这种只是展示数据的话较常用的是ECharts。而像一些鼠标、键盘、触屏事件操作的话,是用D3.js实现的。

部分互联网公司的商用产品

RayData

腾讯开发的大数据可视交互系统,核心技术基于Ventuz开发。

Sugar

百度开发的自助BI报表分析和制作可视化数据大屏的强大工具,组件丰富,无需SQL和任何编码。

DataV

阿里开发的用于实时数据大屏追踪业务全貌的可视化产品,属于拖拽式可视化工具,专精于业务数据与地理信息融合的大数据可视化。核心技术采用了Blink(是阿里巴巴内部的Apache Flink版本代号)。在GitHub上有同款的开源的Vue数据可视化组件库

网易有数

网易研发的面向企业客户的可视化敏捷BI产品,在网易系产品里有使用。

FineBI

技术架构:

Java开发

后端:spring mvc + Hibernate

前端:fineui

适用范围

  • 开发/数据人员准备好数据,数据人员/业务人员分析。
  • 业务人员完全可自行分析、制作可视化。整个数据分析流程分工明确。

可视化水平

  • 支持的图表类型多,达47种
  • 图表可视化选项少,例如,数据格式选项偏少,如需添加,需要修改配置文件
  • 可在看板中添加筛选框,支持在不同条件下查看
  • 不支持图表和看板分组管理
  • 没有提供图表的下钻功能,不支持多图表间的复杂联动
  • 不支持跨库的表关联查询

对比

互联网公司的商用产品均大同小异,均有常用的图表和地理信息图。

百度的Sugar提供的行业模板很少,支持的数据源类型较少,尤其不支持静态数据,不方便调试;操作的便捷性上有很多细节需要完善,如不支持元素多选、对齐等操作,无法去掉表格的表头等。在3D方面尚有不足,没有阿里云DataV、腾讯RayData的3D效果突出,但是有ECharts的加持,报表渲染比较流畅。

阿里的DataV常用于数据大屏展示,若没有这个方面需求的话该优势可以忽略。相比之下RayData的大屏产品能力较弱,但有原厂服务+框架服务,优势在于三维城市场景方面。

基于Hadoop的开源可视化项目

Superset

Apache系列里的基于web的开源BI工具,基于python开发的,所以也算是python生态的一员。它的三大特点是:开源、轻量级、图表丰富,需要在网页上创建看板,然后在看板中创建图表,支持连接SQL查询结果来实时展示图形化结果。

数据库支持

Superset 是基于 Druid.io 设计的,但是又支持横向到像 SQLAlchemy 这样的常见Python ORM框架上面。

Druid 是一个基于分布式的快速列式存储,也是一个为BI设计的开源数据存储查询工具。Druid提供了一种实时数据低延迟的插入、灵活的数据探索和快速数据聚合。现有的Druid已经可以支持扩展到TB级别的事件和PB级的数据了,Druid是BI应用的最佳搭档。跟类似产品Hive相比,速度快了很多。

在数据源上:支持各种数据源,包括Hive、Kylin等。

产品结构

开发架构

整个项目的后端是基于Python的,用到了Flask、Pandas、SqlAlchemy。

后端

  • Flask App Builder(鉴权、CRUD、规则)
  • Pandas(分析)
  • SqlAlchemy(数据库ORM)

    前端

  • 借助 FAB 来生成大部分管理界面,而图表或是 SQL 编辑器等对交互性要求很高的界面,则由 React + Redux 来实现
  • Web 服务器是一个标准的 WSGI 应用
  • 用到了npm、react、webpack,意味着可以在手机也可以流畅使用。
  • D3.js(数据可视化)
  • nvd3.org(可重用图表)

    局限性

  • Superset的可视化目前只支持每次可视化一张表,对于多表join的情况还无能为力
  • 依赖于数据库的快速响应,如果数据库本身太慢Superset也没什么办法
  • 语义层的封装还需要完善,因为druid原生只支持部分SQL
  • 页面样式简单,页面的灵活度不高,不能实现二级联动,调用api接口

可视化水平

  • 支持的图表类型多,达47种
  • 图表可视化选项少,例如,数据格式选项偏少,如需添加,需要修改配置文件
  • 可在看板中添加筛选框,支持在不同条件下查看
  • 不支持图表和看板分组管理
  • 没有提供图表的下钻功能,不支持多图表间的复杂联动
  • 不支持跨库的表关联查询
  • 支持其他图标库扩展

支持文档

  • 安装部署和快速入门方面的文档详细
  • 但具体功能和图表制作方面的介绍文档需要搜索资料
  • 整体文档资料相当简陋

适用范围

  • 开发/分析人员做好看板,业务人员浏览看板数据
  • 业务人员可自行编辑图表,查看满足条件的结果

参考

Apache Superset

解密Airbnb 自助BI神器:Superset 颠覆 Tableau

企业对SuperSet的改进

superset整体介绍

Metabase

metabase是一款易用、开源、技术成熟、不断并快速迭代的报表系统。使用metabase可以省去很多前后端的开发工作,只需要进行数据清洗计算转存等相关开发。在目前无开发人力的情况下,这是较为完美的BI系统解决方案。适合查看运行数据,业务人员自己就可以做数据分析。

开发架构

前端

React + Redux等相关框架写的单页应用,基于yarn的开发环境,webpack构建,加上D3.js作图。

后端

Clojure + RING(中间件) + Compojure(路由框架) + Toucan(ORM框架)

数据源

支持数据源少(12种),不支持Hive、Kylin(硬伤)

可视化水平

  • 支持的图表类型不如Superset多,仅14种
  • 图表可视化选项多,例如,提供数据格式多,设置灵活
  • 可在看板中添加筛选框,支持在不同条件下查看
  • 通过创建集合,支持图表、看板、定时任务分组管理
  • 提供图表的简单钻取功能,不支持图表间的复杂联动
  • 不支持跨库的表关联查询

适用范围

界面漂亮、友好,使用体验好,适合业务人员使用。

用户评价

Metabase 的系统切分与模块化做得非常出色,在前端架构方面 Metabase 较为占优。

提供完整 API 文档的项目,这使得开发者即使完全不会 Clojure,依然可以凭借丰富的 API 与文档完成许多二次开发。

部署方面,Metabase 提供了 Jar 文件,Mac 应用程序,Docker 镜像等方式可以让使用者在本地快速尝试该项目。而在生产环境中,它提供了如何在 AWS、Heroku、Kubernetes 上部署的详尽文档,资料较为完善。

参考

Metabase-BI系列01:二次开发环境(windows)搭建

Redash

开发架构

官方文档里的原话是:Redash采用最新的React和Python Flask技术开发,要求开发人员具备React和Python Flask基础;另外由于后台查询运行在RQ异步队列之上,开发人员必须对RQ和Redis有所了解;OLAP采用的是Postgresql分析型数据库;另外对于开发工具,前端React基本都采用VSCODE,后端可以选择VSCODE或PyCharm,开发人员必须对这些IDE有一定的了解。

后端

后端逻辑:

Redash 的服务器端是用 Python 来写的,Web 框架以 Flask 为基础,并充分利用了 Flask 的插件生态圈,主要用了以下的组件:

  • API 框架:Flask-RESTful
  • 数据库:Flask-SQLAlchemy
  • 认证:Flask-Login

前端

Redash 的前端是一个纯的单页应用,用 AngularJS(1.5)实现,结构清晰,代码整洁。但众所周知,AngularJS 在 v2 之后做了巨大的架构调整,所以 AngularJS v1的处境就有些尴尬。这和目前 Python 2 的处境类似。短期内不会有问题,长期来讲是个隐患。

数据源

支持数据源比Superset少,不支持Kylin

可视化水平

  • 支持的图表类型不如Superset多,仅12种
  • 图表可视化选项多
  • 不支持在看板种添加筛选框
  • 不支持图表和看板分组管理
  • 没有提供图表的下钻功能,不支持多图表间的复杂联动
  • 不支持跨库的表关联查询

适用范围

由于是对SQL查询结果进行可视化,需要开发/分析人员做好看板,业务人员浏览看板数据。

技术架构:Python + Flask + AngularJS + SQLAlchemy

参考

Redash——一个开源Flask项目

Redash 二次开发入门

浅析数据查询与可视化工具–Redash

Zeppelin

支持数据驱动、交互式数据分析、协作式文档等特性的基于Web的交互式应用开发引擎,应用以Notebook形式表示,支持Scala、Python、SQL、Markdown、shell等多种语言。严格意义上说,Zeppelin更像是一notebook,而不是一个单纯的BI工具,来自Apache项目。

开发技术架构

交互式数据分析开源框架,支持多种语言, 包括Scala、Python、SparkSQL、Hive、Markdown、Shell等

适用范围

更适合开发人员

可视化

不支持sql查询

可视化思路总结

  • 可以根据开源项目直接进行二次开发,或者仿照开源项目的源码结构自行搭建。
  • 在开源工具基础上自制工具需要先决定整个页面展现的形式,建议基于一个后台管理系统型界面,加入用户权限管理。
  • Hadoop集群运行状况页面:可以采用HUE里的框架,集成服务器里的Hadoop进程的运行状态,在同一个页面里展示。
  • 数据信息的图形化展示页面:参考vue-big-screen里集成DataV的思路,采用ECharts工具,把生成的图表展示到VUE的一个页面里。
  • 交互式的数据分析页面:参考Superset里把SQL查询结果图形化的思路,设定调用SQL的时间间隔并持续更新展示在前端的图表。
  • 自定义代码的功能输入页面:设定一个统一的代码格式,规定输入为xxx数据源,输出为xxx格式的数据表或其他数据结构,在系统中开设一个自定义函数入口。

参考