在大数据领域,有很多新兴或成熟的技术满足了我们对数据处理的各种需求,有专注于文件系统的,有专注于数据存储的,有解决资源协调问题,也有像Apache Kylin[1](下文统称Kylin)这种基于Hadoop的OLAP引擎等。当这些技术满足了我们各个环节的需求把数据处理好后,我们就回到了最初的目标,数据分析。Apache Zeppelin[2](下文统称Zeppelin)即是一个试图在此领域助我们一臂之力的项目。
实际工作中,我们的数据会以多种多样的形式存在,可能存在某个文本中,可能存在Hive表里,也可能存在MySql里等等。面对多种环境,一个数据分析人员需要在各种环境间切换,获取他们想要的数据,数据获取到后觉得不够直观,还需要通过Excel等工具进行处理,做成表格画成图表。有没有这样一个项目,不管后端基于什么语言什么环境,只需要通过一个浏览器登陆一个页面便可获取数据,如果在数据展示方面做的再丰富些那就更好了。Zeppelin便能满足这样的需求。当然,Zeppelin的能力不仅仅这些,本文将侧重介绍Zeppelin与Apache Kylin在数据可视化上面的结合运用。
本文假设读者已经对Apache Kylin有所了解,可以访问Apache Kylin的主页 www.kylin.io 进一步了解,Apache Kylin 是一个开源的分布式查询引擎,提供基于Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区,并于2014年11月加入Apache孵化器项目,于2015年11月正式毕业成为Apache顶级项目。
本文将通过使用Apache Zeppelin查询构建于Apache Kylin中的航班信息数据并可视化来介绍相关内容,特别是Zeppelin和Kylin的整合,二次开发等。
安装Apache Kylin
首先,我们需要把Kylin环境搭建好,已经安装好Kylin的读者可以跳过这步。
Kylin官方网站有非常详细的安装介绍[3],这里针对想要尝试Kylin的读者做个简单介绍。Kylin是运行在hadoop环境上的,简单起见,可以下载Oracle VirtualBox+ Hortonworks Sandbox搭建示例环境。
Kylin是基于Hadoop之上的OLAP分析引擎,所以我们假设您有OLAP相关基础,对星型模型(Star-Schema)这些基本概念都有了解,在搭建好Hadoop环境后,我们需要准备一些测试数据,导入数据源到Hive中。一个简单的办法是把测试数据放到CSV文件中并传到HDFS目录下,然后针对文件创建Hive的external table,确保在Hive中可以查到对应的表和数据。数据准备好后,我们就可以下载Kylin的二进制安装包进行安装,具体请参考安装文档。
接下来在Web端的步骤可概括为
安装Apache Zeppelin
Zeppelin在0.5.5版本之后加进了对Kylin的支持,我们目前可以直接下载Zeppelin v0.5.5的源代码进行编译,或者直接下载二进制包直接运行:
wget https://dist.apache.org/repos/dist/dev/incubator/zeppelin/0.5.5-incubating-rc1/zeppelin-0.5.5-incubating-bin-all.tgz
tar -xvzf zeppelin-0.5.5-incubating-bin-all.tgz
(该版本下载链接如有变动,可关注Zeppelin官网或通过Zeppelin邮件列表获取最新信息,关于如何参与到Zeppelin社区本文末尾会介绍)
运行Zeppelin
解压后对应生成目录 zeppelin-0.5.5-incubating-bin-all,目录下有bin conf logs等子目录,直接通过bin下的zeppelin-damenson.sh脚本便可完成zeppelin的启动和停止。
假设当前在 zeppelin-0.5.5-incubating-bin-all 目录下
启动:bin/zeppelin-daemon.sh start
停止:bin/zeppelin-daemon.sh stop
启动成功后,登陆Zeppelin客户端,地址:
http://{hostname}:8080,可看到下图页面
(注意,如果默认的8080端口已经被占用,启动将会失败,打开页面后右上角也不会出现绿色的Connected 图标。可到logs目录下查看log文件确定失败原因,如果是端口原因,那我们只需要创建并修改下配置文件的端口信息即可。配置也很简单,直接到conf目录下可看到文件 zeppelin-site.xml.template 复制文件,去掉后缀.template 重命名得到zeppelin-site.xml文件,找zeppelin.server.port修改为能用的端口即可。)
Kylin参数配置
Kylin Interpreter已经集成到Zeppelin 0.5.5的主代码中,所以直接在Zeppelin的配置页面可以找到Kylin配置信息。启动Zeppelin后,在主页点击header上的 Interpreter到该页面找到Kylin配置栏填上配置信息。
Kylin Interpreter主要功能是把前台的配置信息和要运行的SQL转换成一个HTTP请求以获取结果,然后按照Zeppelin的规范转换格式,主要就是完成一次HTTP请求,并把自己项目的查询结果按照Zeppelin的规范格式化,这样就能配合前端展示。所以这里的配置参考Kylin Query API即可,默认修改URL,账号,密码,Project信息即可,更多关于Kylin API信息点这里(http://kylin.apache.org/docs/howto/howto_use_restapi.html)。
创建Note
通过header上的NoteBook->Create New Note
在输入框开头加上%kylin,后面空格跟上需要运行SQL即可,可以体验Kylin在超大规模数据集上的查询性能!
多图表演示结果
发布链接
对于查询结果Zeppelin可以将结果发布为一个链接,让你内嵌到其他需要的网页中,这个功能非常实用。实际应用中有很多需求需要把Kylin的查询结果做成Dashboard展示,结合Zeppelin这个功能可以直接省去相关开发工作,更有效的关注在数据及业务上。
就这几步,非常简单,感兴趣的同学可以立刻动手试下。
关于参与到Apache开源社区
Apache Zeppelin的Kylin模块是本人和同事一起合作开发并提交到Zeppelin社区的,可能有很多开发者也很想参与到开源项目中来但是不太熟悉流程,本人结合自己经验简单介绍下希望能够对不熟悉的朋友有所帮助。
所有Zeppelin的项目都放在GitHub上,我们只需要把代码fork过来在本地开发测试好,然后再pull request即可。Zeppelin会有其他开发者一起帮忙review你的代码,代码中的错误,Test Case等都会影响代码的合并。Zeppelin中加入了checkstyle 插件,稍微有点格式不符合定义的规范就无法通过,要把这些基本的配置好,在本地跑maven命令保证编译和测试通过没有错误再pull request。
另外一个好的习惯是订阅Apache项目的邮件列表,这样才能及时看到项目的开发信息,有问题直接在里面提会有很好的响应。关于Apache Kylin的邮件列表这个页面有详细说明(http://kylin.apache.org/community/)。如果想参与到Apache Zeppelin社区,可阅读下这个页面 (https://zeppelin.incubator.apache.org/docs/development/howtocontribute.html)。
关于参与到Apache开源社区的益处有很多,一方面,可以实时看到项目的进展,与核心开发者互动,对项目的了解会更加深入,这种互动的过程是比只看书或网上浏览要好很多,也比通过Google搜索问题要高效很多。其次,所有的交流都是基于英文的,对于国内开发者可以在交流技术的同时把自己的英文也提高,建议不要用中文提问,因为我们面对的是全球各地的开发者,英文可以让更多的人参与进来。
附:
Apache Kylin 主页:https://kylin.apache.org/
Apache Zeppelin主页:https://zeppelin.apache.org/
Apache Kylin Install:http://kylin.incubator.apache.org/docs/install/index.html
CIO之家 www.ciozj.com 公众号:imciow