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等学习教材及实战资料