基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(五)

发布于:2025-07-31 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

五、Hue、Zeppelin 比较

1. Zeppelin 简介

2. Zeppelin 安装配置

(1)安装环境

(2)Zeppelin 及其相关组件

(3)配置 Zeppelin

(4)启动 Zeppelin

(5)测试

3. 在 Zeppelin 中添加 MySQL 翻译器

(1)编译 MySQL Interpreter 源代码

(2)部署二进制包

(3)重启 Zeppelin

(4)加载 MySQL Interpreter

(5)测试

4. Hue 与 Zeppelin 比较

(1)功能

(2)架构

(3)使用场景


五、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

NameNodeSpark Master

nbidc-agent-04

SecondaryNameNode

nbidc-agent-11

ResourceManagerDataNodeNodeManagerSpark Worker

nbidc-agent-12

DataNodeNodeManagerSpark Worker

nbidc-agent-13

DataNodeNodeManagerSpark Worker

nbidc-agent-14

DataNodeNodeManagerSpark Worker

nbidc-agent-15

DataNodeNodeManagerSpark Worker

nbidc-agent-18

DataNodeNodeManagerSpark Worker

nbidc-agent-19

DataNodeNodeManagerSpark Worker

nbidc-agent-20

DataNodeNodeManagerSpark Worker

nbidc-agent-21

DataNodeNodeManagerSpark Worker

nbidc-agent-22

DataNodeNodeManagerSpark 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 需要能够连接互联网。

  1. 安装 Git:在 nbidc-agent-04 上执行下面的指令。
    yum 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
  2. 安装 Java:在 nbidc-agent-03 机器上执行下面的指令拷贝 Java 安装目录到 nbidc-agent-04机器上。
    scp -r jdk1.7.0_75 nbidc-agent-04:/home/work/tools/
  3. 安装 Apache Maven:在 agent-04 上执行下面的指令。
    cd /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
  4.  安装 Hadoop 客户端:在 nbidc-agent-03 机器上执行下面的指令拷贝 Hadoop 安装目录到 nbidc-agent-04 机器上。
    scp -r hadoop nbidc-agent-04:/home/work/tools/
  5. 安装 Spark 客户端:在 nbidc-agent-03 机器上执行下面的指令拷贝 Spark 安装目录到 nbidc-agent-04 机器上。
    scp -r spark nbidc-agent-04:/home/work/tools/
  6. 安装 Hive 客户端:在 nbidc-agent-03 机器上执行下面的指令拷贝 Hive 安装目录到 nbidc-agent-04 机器上。
    scp -r hive nbidc-agent-04:/home/work/tools/
  7. 安装 phantomjs:在 nbidc-agent-04 上执行下面的指令。
    cd /home/work/tools/  
    tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
  8. 下载最新的 zeppelin 源码:在 nbidc-agent-04 上执行下面的指令。
    cd /home/work/tools/  
    git clone https://github.com/apache/incubator-zeppelin.git
  9. 设置环境变量:在 nbidc-agent-04 上编辑 /home/work/.bashrc 文件。
    vi /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
  10. 编译 zeppelin 源码:在 nbidc-agent-04 上执行下面的指令。
    cd /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

  1. 配置 zeppelin-env.sh 文件:在 nbidc-agent-04 上执行下面的命令。
    cp /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
  2. 配置 zeppelin-site.xml 文件:在 nbidc-agent-04 上执行下面的命令。
    cp /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>
  3. 将 hive-site.xml 拷贝到 Zeppelin 的配置目录下:在 nbidc-agent-04 上执行下面的指令。
    cd /home/work/tools/incubator-zeppelin  
    cp /home/work/tools/hive/conf/hive-site.xml .

(4)启动 Zeppelin

        在 nbidc-agent-04 上执行下面的命令。

zeppelin-daemon.sh start

(5)测试

        从浏览器输入 http://nbidc-agent-04:9090/,如下图所示。

        点击‘Interpreter’菜单,配置并保存spark解释器,如下图所示。

        配置并保存 hive 解释器,如下图所示。

        点击‘NoteBook’->‘Create new note’子菜单项,建立一个新的查询并执行,结果如下图所示。

        说明:这是一个动态表单 SQL,SparkSQL 语句为:

%sql  
select * from wxy.t1 where rate > ${r} 

        第一行指定解释器为 SparkSQL,第二行用 ${r} 指定一个运行时参数,执行时页面上会出现一个文本编辑框,输入参数后回车,查询会按照指定参数进行,如图会查询 rate > 100 的记录。

3. 在 Zeppelin 中添加 MySQL 翻译器

        数据可视化的需求很普遍,如果常用的如 MySQL 这样的关系数据库也能使用 Zeppelin 查询,并将结果图形化显示,那么就可以用一套统一的数据可视化方案处理大多数常用查询。Zeppelin 本身还不带 MySQL 翻译器,幸运的是已经有 MySQL 翻译器插件了。下面说明该插件的安装步骤及简单测试。

(1)编译 MySQL Interpreter 源代码

cd /home/work/tools/
git clone https://github.com/jiekechoo/zeppelin-interpreter-mysql
mvn clean package

(2)部署二进制包

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

zeppelin-daemon.sh restart

(4)加载 MySQL Interpreter

        打开主页 http://nbidc-agent-04:9090/,‘Interpreter’ -> ‘Create’,完成类似下图的页面,完成点击‘Save’ 。

(5)测试

  • 创建名为 mysql_test 的 note,如下图所示。

  • 输入下面的查询语句,按创建日期统计建立表的个数。
%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;

        查询结果的表格表示如下图所示。

        查询结果的柱状图表示如下图所示。

        查询结果的饼图表示如下图所示。

        查询结果的堆叠图表示如下图所示。

        查询结果的线形图表示如下图所示。

        查询结果的散点图表示如下图所示。

        报表模式的饼图表示如下图所示。

        可以点击如下图所示的链接单独引用此报表。

        单独的页面能根据查询的修改而实时变化,比如将查询修改为:

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 协同工作。

网站公告

今日签到

点亮在社区的每一天
去签到