交互式数据分析工具之Apache Zeppelin
Apache Zeppelin 是什么?
Apache Zeppelin,是基于 Web 的笔记本,可通过SQL,Scala 等实现数据驱动的交互式数据分析和协作文档。
主要功能包含:
资料摄取
数据发现
数据分析
数据可视化与协作
Apache Zeppelin 的特性
多语言后端
Apache Zeppelin 解释器概念允许将任何语言/数据处理后端插入 Zeppelin。目前,Apache Zeppelin 支持许多解释器,例如 Apache Spark,Python,JDBC,Markdown 和 Shell。
支持多用户
多用户使用 Shiro 身份验证登录/注销
管理笔记本权限
如何设置模拟解释器
使用解释器绑定模式,每个用户/注释的上下文不同
笔记本中的段落可以个性化
通过 Websocket 实时传播笔记本中的更改
集成 Apache Spark
Apache Zeppelin 提供了内置的 Apache Spark 集成,用户无需为其构建单独的模块,插件或依赖库。
Apache Zeppelin 与 Spark 集成提供如下功能:
SparkContext 和 SQLContext 自动注入
从本地文件系统或 Maven 存储库加载运行时 jar 依赖项。
取消作业并显示其进度
Zeppelin 中支持的 SQL
Zeppelin 提供了 JDBC 解释器,可以无缝连接任何 JDBC 数据源
Postgres
MySQL
MariaDB
AWS Redshift
Apache Hive
Apache Phoenix
Apache Drill
Apache Tajo
...
数据可视化
Apache Zeppelin 中已经包含一些基本图表。可视化不仅限于 SparkSQL 查询,任何语言后端的任何输出都可以被识别和可视化。
数据透视图表
Apache Zeppelin 汇总值并通过简单的拖放将其显示在数据透视图中,这样用户可以轻松地创建具有多个汇总值的图表,包括总和、计数、平均值、最小值、最大值。
动态表单
Apache Zeppelin 可以在笔记本中动态创建一些输入表单。
通过共享的笔记本和段落进行协作
用户的笔记本 URL 可以在协作者之间共享,然后,Apache Zeppelin 将实时广播所有更改,就像 Google 文档中的协作一样。
Apache Zeppelin 解释器(Interpreter)
Apache Zeppelin 解释器是一种语言后端。例如,要在 Zeppelin 中使用 Scala 代码,需要一个 Scala 解释器。每个口译员都属于一个 InterpreterGroup。同一 InterpreterGroup 中的口译员可以相互引用。例如,当SparkSqlInterpreter 在同一组中时,可以引用SparkInterpreter 从中获取 SparkContext。
架构图如下:
InterpreterSetting 是给定 InterpreterGroup 和启动/停止解释器单元的配置。同一 InterpreterSetting 中的所有解释器都在一个单独的 JVM 进程中启动。解释器通过 Thrift 与Zeppelin 引擎进行通信。在创建新的解释器时,可以在“解释器设置”菜单上看到的“针对每个独立的解释器(作用域/隔离)”模式下,将为每个音符创建新的解释器实例。但是,当它们位于相同的 InterpreterSettings 中时,它仍然可以在相同的 JVM 上运行。
支持的解释器类型
Spark |
JDBC |
Python |
Alluxio |
Beam |
BigQuery |
Cassandra |
Elasticsearch |
Flink |
Geode |
Groovy |
HBase |
HDFS |
Hive |
Ignite |
Kylin |
Lens |
Livy | Markdown |
Neo4j |
Pig |
Postgresql |
HAWQ |
R |
Scalding |
Scio | Shell |
自定义解释器
创建一个新的解释器非常简单,只需扩展 org.apache.zeppelin.interpreter 抽象类并实现一些方法即可。在你的项目中,你需要将 interpreter-parent 设置为你的父工程项目并使用插件 maven-enforcer-plugin,maven-dependency-plugin 和 maven-resources-plugin。
以下是一个示例 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>interpreter-parent</artifactId>
<groupId>org.apache.zeppelin</groupId>
<version>0.8.0-SNAPSHOT</version>
<relativePath>../interpreter-parent</relativePath>
</parent>
...
<dependencies>
<dependency>
<groupId>org.apache.zeppelin</groupId>
<artifactId>zeppelin-interpreter</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在此,应该将org.apache.zeppelin:zeppelin-interpreter:[VERSION] 解释器的依赖项包含在中pom.xml。将 jars 放在特定目录名称的解释器目录下,Zeppelin 服务按照递归的方式读取解释器目录,并初始化包括自定义的解释器。可以在三个位置存储解释器组,名称和其他信息,Zeppelin 服务尝试在下面找到位置,接下来,Zeppelin 尝试在自定义的 interpreter jar 中查找 interpreter-setting.json。
{ZEPPELIN_INTERPRETER_DIR}/{YOUR_OWN_INTERPRETER_DIR}/interpreter-setting.json
以下是一个自定义的解释器的 interpreter-setting.json 示例。
[
{
"group": "your-group",
"name": "your-name",
"className": "your.own.interpreter.class",
"properties": {
"properties1": {
"envName": null,
"propertyName": "property.1.name",
"defaultValue": "propertyDefaultValue",
"description": "Property description",
"type": "textarea"
},
"properties2": {
"envName": PROPERTIES_2,
"propertyName": null,
"defaultValue": "property2DefaultValue",
"description": "Property 2 description",
"type": "textarea"
}, ...
},
"editor": {
"language": "your-syntax-highlight-language",
"editOnDblClick": false,
"completionKey": "TAB"
}
},
{
...
}
]
Zepplin 部署模式
Standalone
YARN
Mesos
Notebook 存储
使用本地文件系统,并使用本地 Git 存储库对其进行版本控制 - GitNotebookRepo(默认)
所有笔记都保存在本地文件系统的笔记本文件夹中 - VFSNotebookRepo
所有笔记都保存在hadoop兼容文件系统中的笔记本文件夹中 - FileSystemNotebookRepo
使用 Amazon S3服务进行存储 - S3NotebookRepo
使用 Azure 服务进行存储 - AzureNotebookRepo
使用 Google 云端存储进行存储 - GCSNotebookRepo
使用 MongoDB 存储 - MongoNotebookRepo
使用 GitHub 进行存储 - GitHubNotebookRepo
Apache Zeppelin 中的基本显示系统
基本显示系统包含:
文本
HTML
数学表达式
表
网络
1、文本
默认情况下,Zeppelin 使用 text 显示系统将解释器响应打印为纯文本。
2、HTML
使用 %html 指令,Zeppelin 将输出视为 HTML。
3、数学表达式
HTML 显示系统使用 MathJax 自动格式化数学表达式,可以使用 \\( INLINE EXPRESSION \\)和$$ EXPRESSION $$ 格式化。
4、表
如果有以 \n(换行) 分隔行且以 (制表符) 分隔列 \t 且第一行为标题行的数据。
只需使用 %table 显示系统即可利用 Zeppelin 的内置可视化效果。
5、网络
使用 %network 指令,Zeppelin 将输出视为图形,Zeppelin 可以利用属性图模型。
什么是标签属性图模型?
标签属性图是具有这些元素的曲线图:
一组顶点
每个顶点都有一个唯一的标识符。
每个顶点都有一组输出边。
每个顶点都有一组传入边。
每个顶点都有一个由键到值的映射定义的属性集合。
一组边缘
每个边都有唯一的标识符。
每个边缘都有一个向外的尾顶点。
每个边都有一个传入的头顶点。
每个边都有一个标签,指示其两个顶点之间的关系类型。
每个边都有从键到值的映射定义的属性集合。
实战应用
以 Presto 为例
应用前提:已经部署 Presto 和 Zepplin。
1、创建解释器
在 Presto 解释器中指定 Presto 的驱动类型、url、依赖jar。
2、创建笔记本
输入笔记本名称,解释器类型。
3、在笔记本中执行查询任务
4、导出数据
选择导出数据的文件类型、字段等。
5、查看任务的执行状态
总结
Zeppelin 作为一个完全开源的可视化界面查询工具,为开发者提供了操作的便捷性,开发者在此基础上可以根据业务需求做个性化改造。Zeppelin 的查询结果以表格、图形等多种模式输出,实用且酷炫,相比其它的同类型的框架,有其独特的优势。
对技术感兴趣的朋友,可以通过下面的二维码关注我,谢谢!