目录
[五、Hue、Zeppelin 比较](#五、Hue、Zeppelin 比较)
[1. Zeppelin 简介](#1. Zeppelin 简介)
[2. Zeppelin 安装配置](#2. Zeppelin 安装配置)
[(2)Zeppelin 及其相关组件](#(2)Zeppelin 及其相关组件)
[(3)配置 Zeppelin](#(3)配置 Zeppelin)
[(4)启动 Zeppelin](#(4)启动 Zeppelin)
[3. 在 Zeppelin 中添加 MySQL 翻译器](#3. 在 Zeppelin 中添加 MySQL 翻译器)
[(1)编译 MySQL Interpreter 源代码](#(1)编译 MySQL Interpreter 源代码)
[(3)重启 Zeppelin](#(3)重启 Zeppelin)
[(4)加载 MySQL Interpreter](#(4)加载 MySQL Interpreter)
[4. Hue 与 Zeppelin 比较](#4. Hue 与 Zeppelin 比较)
五、Hue、Zeppelin 比较
上一节简单介绍了 Hue 这种 Hadoop 生态圈的数据可视化组件,本节讨论另一种类似的产品 ------ Zeppelin。首先介绍一下 Zeppelin,然后说明其安装的详细步骤,之后演示如何在 Zeppelin 中添加 MySQL 翻译器,最后从功能、架构、使用场景几方面将 Hue 和 Zeppelin 做一个比较。
1. Zeppelin 简介
Zeppelin 是一个基于 Web 的软件,用于交互式地数据分析。一开始是 Apache 软件基金会的孵化项目,2016 年 5 月正式成为一个顶级项目(Top-Level Project,TLP)。Zeppelin 描述自己是一个可以进行数据摄取、数据发现、数据分析、数据可视化的笔记本,用以帮助开发者、数据科学家以及相关用户更有效地处理数据,而不必使用复杂的命令行,也不必关心集群的实现细节。Zeppelin 的架构图如下所示。
从图中可以看到,Zeppelin 具有客户端/服务器架构,客户端一般就是指浏览器。服务器接收客户端的请求,并将请求通过 Thrift 协议发送给翻译器组。翻译器组物理表现为 JVM 进程,负责实际处理客户端的请求并与服务器进行通信。
翻译器是一个插件式的体系结构,允许任何语言/后端数据处理程序以插件的形式添加到 Zeppelin 中。特别需要指出的是,Zeppelin 内建 Spark 翻译器,因此不需要构建单独的模块、插件或库。Spark 翻译器的架构图如下所示。
当前的 Zeppelin 已经支持很多翻译器,如 Zeppelin 0.6.0 版本自带的翻译器有 alluxio、cassandra、file、hbase、ignite、kylin、md、phoenix、sh、tajo、angular、elasticsearch、flink、hive、jdbc、lens、psql、spark 等 18 种之多。插件式架构允许用户在 Zeppelin 中使用自己熟悉的特定程序语言或数据处理方式。例如,通过使用 %spark 翻译器,可以在 Zeppelin 中使用 Scala 语言代码。
在数据可视化方面,Zeppelin 已经包含一些基本的图表,如柱状图、饼图、线形图、散点图等,任何后端语言的输出都可以被图形化表示。
用户建立的每一个查询叫做一个 note,note 的 URL 在多用户间共享,Zeppelin 将向所有用户实时广播 note 的变化。Zeppelin 还提供一个只显示查询结果的 URL,该页不包括任何菜单和按钮。用这种方式可以方便地将结果页作为一帧嵌入到自己的 web 站点中。
2. Zeppelin 安装配置
下面用一个典型的使用场景 ------ 使用 Zeppelin 运行 SparkSQL 访问 Hive 表,在一个实验环境上说明 Zeppelin 的安装配置步骤。
(1)安装环境
12 个节点的 Spark 集群,以 standalone 方式部署,各个节点运行的进程如下表所示。
|----------------|---------------------------------------------------|
| 主机名 | 运行进程 |
| nbidc-agent-03 | NameNode、Spark Master |
| nbidc-agent-04 | SecondaryNameNode |
| nbidc-agent-11 | ResourceManager、DataNode、NodeManager、Spark Worker |
| nbidc-agent-12 | DataNode、NodeManager、Spark Worker |
| nbidc-agent-13 | DataNode、NodeManager、Spark Worker |
| nbidc-agent-14 | DataNode、NodeManager、Spark Worker |
| nbidc-agent-15 | DataNode、NodeManager、Spark Worker |
| nbidc-agent-18 | DataNode、NodeManager、Spark Worker |
| nbidc-agent-19 | DataNode、NodeManager、Spark Worker |
| nbidc-agent-20 | DataNode、NodeManager、Spark Worker |
| nbidc-agent-21 | DataNode、NodeManager、Spark Worker |
| nbidc-agent-22 | DataNode、NodeManager、Spark Worker |
- 操作系统:CentOS release 6.4
- Hadoop 版本:2.7.0
- Hive 版本:2.0.0
- Spark 版本:1.6.0
(2)Zeppelin 及其相关组件
在 nbidc-agent-04 上安装部署 Zeppelin 及其相关组件。前提:nbidc-agent-04 需要能够连接互联网。
-
安装 Git:在 nbidc-agent-04 上执行下面的指令。
bashyum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install gcc perl-ExtUtils-MakeMaker yum remove git cd /home/work/tools/ wget https://github.com/git/git/archive/v2.8.1.tar.gz tar -zxvf git-2.8.1.tar.gz cd git-2.8.1.tar.gz make prefix=/home/work/tools/git all make prefix=/home/work/tools/git install
-
安装 Java:在 nbidc-agent-03 机器上执行下面的指令拷贝 Java 安装目录到 nbidc-agent-04机器上。
bashscp -r jdk1.7.0_75 nbidc-agent-04:/home/work/tools/
-
安装 Apache Maven:在 agent-04 上执行下面的指令。
bashcd /home/work/tools/ wget ftp://mirror.reverse.net/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz tar -zxvf apache-maven-3.3.9-bin.tar.gz
-
安装 Hadoop 客户端:在 nbidc-agent-03 机器上执行下面的指令拷贝 Hadoop 安装目录到 nbidc-agent-04 机器上。
bashscp -r hadoop nbidc-agent-04:/home/work/tools/
-
安装 Spark 客户端:在 nbidc-agent-03 机器上执行下面的指令拷贝 Spark 安装目录到 nbidc-agent-04 机器上。
bashscp -r spark nbidc-agent-04:/home/work/tools/
-
安装 Hive 客户端:在 nbidc-agent-03 机器上执行下面的指令拷贝 Hive 安装目录到 nbidc-agent-04 机器上。
bashscp -r hive nbidc-agent-04:/home/work/tools/
-
安装 phantomjs:在 nbidc-agent-04 上执行下面的指令。
bashcd /home/work/tools/ tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
-
下载最新的 zeppelin 源码:在 nbidc-agent-04 上执行下面的指令。
bashcd /home/work/tools/ git clone https://github.com/apache/incubator-zeppelin.git
-
设置环境变量:在 nbidc-agent-04 上编辑 /home/work/.bashrc 文件。
bashvi /home/work/.bashrc # 添加下面的内容 export PATH=.:$PATH:/home/work/tools/jdk1.7.0_75/bin:/home/work/tools/hadoop/bin:/home/work/tools/spark/bin:/home/work/tools/hive/bin:/home/work/tools/phantomjs-2.1.1-linux-x86_64/bin:/home/work/tools/incubator-zeppelin/bin; export JAVA_HOME=/home/work/tools/jdk1.7.0_75 export HADOOP_HOME=/home/work/tools/hadoop export SPARK_HOME=/home/work/tools/spark export HIVE_HOME=/home/work/tools/hive export ZEPPELIN_HOME=/home/work/tools/incubator-zeppelin # 保存文件,并是设置生效 source /home/work/.bashrc
-
编译 zeppelin 源码:在 nbidc-agent-04 上执行下面的指令。
bashcd /home/work/tools/incubator-zeppelin mvn clean package -Pspark-1.6 -Dspark.version=1.6.0 -Dhadoop.version=2.7.0 -Phadoop-2.6 -Pyarn -DskipTests
(3)配置 Zeppelin
-
配置 zeppelin-env.sh 文件:在 nbidc-agent-04 上执行下面的命令。
bashcp /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh.template /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh vi /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh # 添加下面的内容 export JAVA_HOME=/home/work/tools/jdk1.7.0_75 export HADOOP_CONF_DIR=/home/work/tools/hadoop/etc/hadoop export MASTER=spark://nbidc-agent-03:7077
-
配置 zeppelin-site.xml 文件:在 nbidc-agent-04 上执行下面的命令。
bashcp /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml.template /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml vi /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml # 修改下面这段的value值,设置zeppelin的端口为9090 <property> <name>zeppelin.server.port</name> <value>9090</value> <description>Server port.</description> </property>
-
将 hive-site.xml 拷贝到 Zeppelin 的配置目录下:在 nbidc-agent-04 上执行下面的指令。
bashcd /home/work/tools/incubator-zeppelin cp /home/work/tools/hive/conf/hive-site.xml .
(4)启动 Zeppelin
在 nbidc-agent-04 上执行下面的命令。
bash
zeppelin-daemon.sh start
(5)测试
从浏览器输入 http://nbidc-agent-04:9090/,如下图所示。
点击'Interpreter'菜单,配置并保存spark解释器,如下图所示。
配置并保存 hive 解释器,如下图所示。
点击'NoteBook'->'Create new note'子菜单项,建立一个新的查询并执行,结果如下图所示。
说明:这是一个动态表单 SQL,SparkSQL 语句为:
sql
%sql
select * from wxy.t1 where rate > ${r}
第一行指定解释器为 SparkSQL,第二行用 ${r} 指定一个运行时参数,执行时页面上会出现一个文本编辑框,输入参数后回车,查询会按照指定参数进行,如图会查询 rate > 100 的记录。
3. 在 Zeppelin 中添加 MySQL 翻译器
数据可视化的需求很普遍,如果常用的如 MySQL 这样的关系数据库也能使用 Zeppelin 查询,并将结果图形化显示,那么就可以用一套统一的数据可视化方案处理大多数常用查询。Zeppelin 本身还不带 MySQL 翻译器,幸运的是已经有 MySQL 翻译器插件了。下面说明该插件的安装步骤及简单测试。
(1)编译 MySQL Interpreter 源代码
bash
cd /home/work/tools/
git clone https://github.com/jiekechoo/zeppelin-interpreter-mysql
mvn clean package
(2)部署二进制包
bash
mkdir /home/work/tools/incubator-zeppelin/interpreter/mysql
cp /home/work/tools/zeppelin-interpreter-mysql/target/zeppelin-mysql-0.5.0-incubating.jar /home/work/tools/incubator-zeppelin/interpreter/mysql/
# copy dependencies to mysql directory
cp commons-exec-1.1.jar mysql-connector-java-5.1.6.jar slf4j-log4j12-1.7.10.jar log4j-1.2.17.jar slf4j-api-1.7.10.jar /home/work/tools/incubator-zeppelin/interpreter/mysql/
vi /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml
在 zeppelin.interpreters 的 value 里增加一些内容",org.apache.zeppelin.mysql.MysqlInterpreter",如下图所示。
(3)重启 Zeppelin
bash
zeppelin-daemon.sh restart
(4)加载 MySQL Interpreter
打开主页 http://nbidc-agent-04:9090/,'Interpreter' -> 'Create',完成类似下图的页面,完成点击'Save' 。
(5)测试
- 创建名为 mysql_test 的 note,如下图所示。
- 输入下面的查询语句,按创建日期统计建立表的个数。
sql
%mysql
select date_format(create_time,'%Y-%m-%d') d, count(*) c
from information_schema.tables
group by date_format(create_time,'%Y-%m-%d')
order by d;
查询结果的表格表示如下图所示。
查询结果的柱状图表示如下图所示。
查询结果的饼图表示如下图所示。
查询结果的堆叠图表示如下图所示。
查询结果的线形图表示如下图所示。
查询结果的散点图表示如下图所示。
报表模式的饼图表示如下图所示。
可以点击如下图所示的链接单独引用此报表。
单独的页面能根据查询的修改而实时变化,比如将查询修改为:
sql
select date_format(create_time,'%Y-%m-%d') d, count(*) c
from information_schema.tables
where create_time > '2016-06-07'
group by date_format(create_time,'%Y-%m-%d')
order by d;
增加了 where 子句,在运行此查询,结果如下图所示。
单独链接的页面也随之自动发生变化,如下图所示。
4. Hue 与 Zeppelin 比较
(1)功能
- Zeppelin 和 Hue 都能提供一定的数据可视化的功能,都提供了多种图形化数据表示形式。单从这点来说,个人认为功能类似,大同小异,Hue 可以通过经纬度进行地图定位,这个功能我在 Zeppelin 0.6.0 上没有找到。
- Zeppelin 支持的后端数据查询程序较多,0.6.0 版本缺省有 18 种,原生支持 Spark。而 Hue 的 3.9.0 版本缺省只支持 Hive、Impala、Pig 和数据库查询。
- Zeppelin 只提供了单一的数据处理功能,包括前面提到的数据摄取、数据发现、数据分析、数据可视化等都属于数据处理的范畴。而Hue的功能相对丰富的多,除了类似的数据处理,还有元数据管理、Oozie 工作流管理、作业管理、用户管理、Sqoop 集成等很多管理功能。从这点看,Zeppelin 只是一个数据处理工具,而 Hue 更像是一个综合管理工具。
(2)架构
- Zeppelin 采用插件式的翻译器,通过插件开发,可以添加任何后端语言和数据处理程序。相对来说更独立和开放。
- Hue 与 Hadoop 生态圈的其它组件密切相关,一般都与 CDH 一同部署。
(3)使用场景
- Zeppelin 适合单一数据处理、但后端处理语言繁多的场景,尤其适合 Spark。
- Hue 适合与 Hadoop 集群的多个组件交互、如 Oozie 工作流、Sqoop 等联合处理数据的场景,尤其适合与 Impala 协同工作。