Apache Zeppelin体系及可视化插件介绍

1. 基本介绍

1.1 Zeppelin是什么?

  • Zeppelin是一个基于Web的notebook,提供交互数据分析和可视化。后台支持接入多种数据处理引擎,如spark,hive等。支持多种语言:Scala(Apache Spark)、Python(Apache Spark)、SparkSQL、 Hive、 Markdown、Shell等。

2.基本特点

2.1多种语言支持

  • 2.1.1 zeppelin支持支持很多解释性程序,包括Apache Spark, Python, JDBC, Markdown and Shell。
  • 2.1.2 zeppelin很好的整合了spark,不需要额外的模块,依赖,插件等。

2.2数据可视化

  • 2.2.1 一些基本的图表包括柱状图、饼图、折线图、饼图等。、
  • 2.2.2 zeppelin没有被限制在Spark SQL query,任何来自zeppelin支持的后台语言的输出都能被识别并可视化。
  • 2.2.3 动态地在笔记本中创建一些输入表单
  • 2.2.4通过分享笔记和图表进行相互协作
  • 2.2.5完全开源

3.zeppelin主要模块

3.1解释器

  • 当前zeppelin上有20多种解释器可用。

3.2展示系统

  • 1.基本的展示系统:Text, HTML, Table 都是可用的。
  • 2.AngularAPI。提供了zeppelin前后端可用的API。
    • Angular (backend API)
    • Angular (frontend API)

3.3笔记存储

  • 存储笔记到外部的存储系统
  • Git Storage
  • S3 Storage
  • Azure Storage
  • ZeppelinHub Storage

3.4 REST API

  • Interpreter API
  • Notebook API
  • Notebook Repository API
  • Configuration API
  • Credential API
  • Helium API

3.5 Security:可用的安全支持

  • Authentication for NGINX
  • Notebook Authorization
  • Data Source Authorization
  • HTTP Security Headers
  • Helium Authorization

3.6 高级选项

  • Apache Zeppelin on Vagrant VM
  • Zeppelin on Spark Cluster Mode (Standalone via Docker)
  • Zeppelin on Spark Cluster Mode (YARN via Docker)
  • Zeppelin on Spark Cluster Mode (Mesos via Docker)
  • Zeppelin on CDH (via Docker)

4. Quick Start

4.1安装

  • 注意:使用二进制包安装时可选带所有解释器的和所有解释器两种选项。

4.2运行Zeppelin

4.2.1常规操作

  • 1.开启:bin/zeppelin-daemon.sh start(for win: bin\zeppelin.cmd)
  • 2.关闭:bin/zeppelin-daemon.sh stop
  • 3.访问:http://localhost:8080

4.2.2 使用服务管理器开启Zeppelin

  • 1.创建/etc/init/zeppelin.conf
  • 2.zeppelin.conf
description "zeppelin" start on (local-filesystems and net-device-up IFACE!=lo) stop on shutdown
 # Respawn the process on unexpected termination respawn 
 # respawn the job up to 7 times within a 5 second period.
 # If the job exceeds these values, it will be stopped and marked as failed. respawn limit 7 5 
 # zeppelin was installed in /usr/share/zeppelin in this example chdir /usr/share/zeppelin exec bin/zeppelin-daemon.sh upstart
  • 3.命令行操作
sudo service zeppelin start 
sudo service zeppelin stop 
sudo service zeppelin restart
或者bin/zeppelin-daemon.sh upstart

4.3 Zeppelin Configuration

  • 4.3.1 环境变量
    conf/zeppelin-env.sh(conf\zeppelin-env.cmd for Windows)。
  • 4.3.2 其他属性
    conf/zeppelin-site.xml。
    • c. 如果这两中都配置了,那么环境变量的优先级更高。
    • d. 配置文件的写法可以参考conf目录下的xxx.template文件。

4.4 Zeppelin UI

  • 4.4.1 Main home
    创建的笔记默认保存在$ZEPPELIN_HOME/notebook目录下
    在这里插入图片描述

  • 4.4.2 Menus

    • 菜单页面
      在这里插入图片描述

    • 可以配置存在的interpreter instance

    • 添加/移除interpreter instance
      在这里插入图片描述

4.5 布局

  • 1.每一个zeppelin笔记由n个段落组成
  • 2.每个段落的布局结构

5. 从源码构建Zeppelin项目

  • 5.1从源码构建项目需要的环境
    Git(Any Version)
    Maven3.1.x or higher
    JDK1.7
  • 5.2开始构建
git clone https://github.com/apache/zeppelin.git
Build source
mvn clean package -DskipTests [Options]

在这里插入图片描述在这里插入图片描述

  • 当你不确定Options选项时,使用下列命令构建官方的二进制包
# update all pom.xml to use scala 2.11 ./dev/change_scala_version.sh 2.11 # build zeppelin with all interpreters and include latest version of Apache spark support for local mode. mvn clean package -DskipTests -Pspark-2.0 -Phadoop-2.4 -Pyarn -Ppyspark -Psparkr -Pr -Pscala-2.11

6.解释器

6.1 Zeppelin Interpreter

它是一个插件系统,它能够使Zeppelin用户使用某一种语言/数据处理器。
例如,在Zeppelin中使用Scala代码,你需要%spark解释器。
创建Interpreters
在这里插入图片描述

6.2 Interpreter原理

  • 6.2.1 Interpreter原理图
    在这里插入图片描述
  • 6.2.2 Interpreter接口中最重要的方法是open,close,interpert三个方法,另外还有cancel,gerProgress,completion等方法。
  • 6.2.3 Open 是初始化部分,只会调用一次。 Interpret 会运行一段代码并返回结果,同步执行方式。 Cancel可选的接口,用于结束interpret方法 getPregress 方法获取interpret的百分比进度 completion 基于游标位置获取结束列表,实现这个接口可以实现自动结束。Open方法中,会初始化SparkContext,SQLContext,ZeppelinContext;Close 是关闭释放资源的接口,只会调用一次

6.3 解释器设置

  • Zeppelin server上给定解释器的配置
    比如设定hive jdbc解释器来连接到Hive服务
    在这里插入图片描述

  • 由大写字母、数字和下划线组成的Property将被导出作为property name,其他的properties设置将被作为JVM property。

  • 每一个notebook能被绑定到多个解释器上
    notebook的解释器绑定设置
    在这里插入图片描述

6.4 Interpreter group

  • 1.每一个解释器都属于一个解释器组。解释器组是一个开启/停止解释器单元。
  • 2.默认情况下,每一个解释器都属于单个组,解释器组可以包含多个解释器。
例:Spark interpreter group
Spark support
pySpark
Spark SQL
the dependency loader
  • 3.来自相同组的解释器运行在相同的JVM上。

6.5解释器绑定模式

  • 每一个解释器的设置都有‘shared’,‘scoped’,‘isolated’三种模式。
    ‘shared’模式:每一个绑定到解释器的notebook都会共享一个解释器实例。
    ‘scoped’模式:每一个notebook将创建新的解释器实例,在相同的解释器进程中。
    ‘isolated’模式:每一个notebook将创建新的解释器进程。
    在这里插入图片描述
    在这里插入图片描述

6.6连接存在的远程解释器

  • 在自己的服务中创建远程服务器并开启它
RemoteInterpreterServer interpreter=new RemoteInterpreterServer(3678); // Here, 3678 is the port on which interpreter will listen. 
interpreter.start()

在这里插入图片描述

6.7 解释器安装

  • 社区管理的解释器 netinst二进制安装包或第三方的解释器二进制安装包下载。
    使用相应的安装命令进行安装。
  • 参考:http://zeppelin.apache.org/docs/0.7.3/manual/interpreterinstallation.html

6.8解释器管理

  • 解释器加载依赖
    在这里插入图片描述

  • 为依赖添加仓库
    在这里插入图片描述

7. Zeppelin-Helium

7.1 基本介绍

  • 1.Zeppelin Visualization 是一个可插拔的包,它能够在运行期间通过Zeppelin中的Helium框架加载或卸载。
  • 2.javaScript npm package,用户能够使用他们就像其他那些内置在notebook中的可视化插件一样。
  • 3.从注册表中加载Helium包文件
    • 1.Zeppelin默认从从本地注册表(local registry,by default helium/directory)搜索Helium package file
    • 2.Helium package file 提供像name、artifact等信息。它与npm包中的package.json类似。
例子:helium/zeppelin-example-horizontalbar.json
{ "type" : "VISUALIZATION", "name" : "zeppelin_horizontalbar", "description" : "Horizontal Bar chart (example)", "artifact" : "./zeppelin-examples/zeppelin-example-horizontalbar", "license" : "Apache-2.0", "icon" : "<i class='fa fa-bar-chart rotate90flipX'></i>" }
  • 4.创建Helium package file : 该文件是一个提供应用信息的json文件
type : 当你创建一个可视化插件时,“type”应当是“VISUALIZATION”。
name : 可视化插件的名字。这个名字应当唯一的。Allows [A-Za-z90-9_]
description : 一个对可视化插件的简单描述。
artifact : 可视化插件 npm包的坐标位置。
artifact存在于npm仓库时:
artifact: "my-visualiztion@1.0.0"
artifact存在于本地文件系统时:
artifact: "/path/to/my/visualization"
license :  license: "Apache-2.0"
icon : 图表将被用在可视化插件的选择按钮上。将被绑定到一个HTML标签上。
icon: "<i class='fa fa-coffee'></i>"
  • 5.使包可用(Enable packages)
    • 一旦Zeppelin从本地注册表中加载Helium package files ,可用的包将被展示在Helium菜单上。然后点击enable按钮。
  • 6.运行可视化插件。
    • 当我们添加额外的可视化插件包,并且可用时,会显示对应的点击按钮,这时点击它就像点击其他内建的可视化插件的图标一样。
      内嵌的可视化插件
      在这里插入图片描述

    • 新增的可视化插件
      在这里插入图片描述

7.1 写可视化插件(write new Visualization)

  • 1.基本步骤
1.	创建npm  package(Create a npm package)
2.	创建package.json文件在新的可视化插件目录中。
3.package.json文件中可以添加需要的依赖。然而Zeppelin 可视化插件只容许两个依赖。zeppelin-vis and zeppelin-tabledata。
4.	example : 
{ "name": "zeppelin_horizontalbar", "description" : "Horizontal Bar chart", "version": "1.0.0", "main": "horizontalbar", "author": "", "license": "Apache-2.0", "dependencies": { "zeppelin-tabledata": "*", "zeppelin-vis": "*" } }
  • 2.创建自己的可视化插件(Create your own visualization)
    • 为了创建自己的可视化插件,需要创建一个js文件,该文件中导入t Visualization class from zeppelin-vis package and extend the class. zeppelin-tabledata package。这两个包能够提供一些有用的变换,比如旋转。
  • 3.对于可视化类,有些方法需要覆盖和实现。
    打印Hello World的可视化插件简单例子。
import Visualization from 'zeppelin-vis' import PassthroughTransformation from 'zeppelin-tabledata/passthrough' export default class helloworld extends Visualization { constructor(targetEl, config) { super(targetEl, config) this.passthrough = new PassthroughTransformation(config); } render(tableData) { this.targetEl.html('Hello world!') } getTransformation() { return this.passthrough } }
  • 4.可视化类编写可以学习 visualization.js.
    也可参考样例 here.
    在这里插入图片描述

  • 5.Helium package file文件编写参考Helium在Zeppelin中的工作细节。
    也可参考内嵌可视化插件的写法 built-in visualizations 。
    安装使用

1.	Run in dev mode
1.Helium package file放入本地注册表中(ZEPPELIN_HOME/helium)
2.	运行Zeppelin-web在可视化插件开发模式(visualization dev mode)

8.展示系统

8.1 基本介绍

  • Angular display system 把输出作为AngularJS视图模板。它在Zeppelin中编译并展示他们。Zeppelin在你的解释器和编译的AngularJS view模板间提供一个网关。因此,你不仅可以在你运行在JVM process上的解释器中更新你的scope variables,也可以在解释器中观察这些变量。

8.2 基本的展示系统

  • 1.Text
    默认的情况下,Zeppelin打印解释器的简单文本响应使用text展示系统
    默认text显示
    在这里插入图片描述

显式text显示
在这里插入图片描述

  • 2.HTML

    • 1.使用HTML展示系统
    • 2.HTML还可以用来展示数学表达式
      在这里插入图片描述
  • 3.Table
    1.可以使用制表符控制表的输出。

row separated by \n and column separated by \t

2.制表符控制的简单显示
在这里插入图片描述

  1. 可以使用%table展示系统连带显示出Zeppelin的内嵌可视化插件
    在这里插入图片描述

8.3 Angular API

  • 1.Angular(Backend API) 后端API
    为了使用angular展示系统,应当以%angular开始。为了使用angular展示系统,应当以%angular开始。。

  • 2.绑定或解绑变量
    通过 ZeppelinContext,你可以绑定或解绑变量到AngularJS view。它只在Spark interpreter(scala)中工作。
    在这里插入图片描述


// bind my 'object' as angular scope variable 'name' in current notebook. 
z.angularBind(String name, Object object) 
// bind my 'object' as angular scope variable 'name' in all notebooks related to current interpreter. 
z.angularBindGlobal(String name, Object object) 
// unbind angular scope variable 'name' in current notebook. 
z.angularUnbind(String name) 
// unbind angular scope variable 'name' in all notebooks related to current interpreter. 
z.angularUnbindGlobal(String name)
  • 3.例子,将“word”绑定到name上。
    在这里插入图片描述

  • 4.可见/不可见变量
    同样依赖于ZeppelinContext。

// register for angular scope variable 'name' (notebook) 
z.angularWatch(String name, (before, after) => { ... }) 
// unregister watcher for angular variable 'name' (notebook) 
z.angularUnwatch(String name) 
// register for angular scope variable 'name' (global) 
z.angularWatchGlobal(String name, (before, after) => { ... }) 
// unregister watcher for angular variable 'name' (global) 
z.angularUnwatchGlobal(String name)
  • 5.z.angularBind(“run”,0)把run初始化为0。然后它被应用到z.angularWatch()里的run变量。当点击button时,可以看到run和numWatched都会加1。
    在这里插入图片描述

8.4 Angular Display System更加容易和直观的展示

  • 1.Import
    注意notebook域和paragraph域的区别
// In notebook scope import org.apache.zeppelin.display.angular.notebookscope._ import AngularElem._ // In paragraph scope import org.apache.zeppelin.display.angular.paragraphscope._ import AngularElem._

  • 2.Display Element
    自动转换成String 并使用%angular展示系统在前端打印。
// automatically convert to string and print with %angular display system directive in front. <div></div>.display
  • 3.Event Handler
// on click <div></div>.onClick(() => { my callback routine }).display // on change <div></div>.onChange(() => { my callback routine }).display // arbitrary event <div></div>.onEvent("ng-click", () => { my callback routine }).display
  • 4.Bind Model
// bind model <div></div>.model("myModel").display 
// bind model with initial value <div></div>.model("myModel", initialValue).display
  • 5.Interact with Model
// read model AngularModel("myModel")() 
// update model AngularModel("myModel", "newValue")

例子
在这里插入图片描述

  • 6.Angular(frontend API) 前端API
    • 1.除了后端API来处理Angular objects的绑定外,Zeppelin也在前端暴露了一个简单AngularJS z object提供了相同的能力。这个z对象在每个分离的段落域中都是可以访问的。
    • 2.Bind/Unbind Variables
      通过z对象,可以将变量绑定或解绑到AngularJS view。
      例子
%angular <form class="form-inline"> <div class="form-group"> <label for="superheroId">Super Hero: </label> <input type="text" class="form-control" id="superheroId" placeholder="Superhero name ..." ng-model="superhero"></input> </div> <button type="submit" class="btn btn-primary" ng-click="z.angularBind('superhero',superhero,'20160222-232336_1472609686')"> Bind</button> </form>


注意:z.angularBind('superhero',superhero,'20160222-232336_1472609686')方法将superhero对象绑定的了指定paragraphId。z.angularBind方法后面的ID参数必须有,否则会报错。
%angular <form class="form-inline"> <button type="submit" class="btn btn-primary" ng-click="z.angularUnbind('superhero','20160222-232336_1472609686')"> UnBind</button> </form>
  • 3.Run Paragraph
    可以通过执行z.runParagraph()触发指定段落的运行
    触发段落运行的例子。
    在这里插入图片描述

扫码关注公众号

  • 后台回复“Hadoop”、“Hbase”、“Spark”等免费获取更多Hadoop、Hbase、Spark等学习教材及实战资料在这里插入图片描述
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值