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.制表符控制的简单显示
- 可以使用%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等学习教材及实战资料