1.概述

  在大数据应用场景中,处理数据分析方面,由于开发者的水平不一样,使用的编程语言也不尽相同,可能会涉及到R、Python、Java、Scala等,数据计算模型也估计不一样,可能涉及的有Spark、Hive、Flink、Kylin等等。本篇博客笔者给大家介绍的内容并不是告诉大家如何去使用。在《Zeppelin使用心得》中有介绍如何使用,这里就不多做赘述了,今天主要是给大家剖析Zeppelin的源码模块。

2.内容

  目前Zeppelin官方已经发布版本为0.7.3,源码带托管在Github上,大家可以先将Zeppelin的源码在Github上下载下来。Zeppelin的项目结构是以Maven的形式存在的,由多个Module构成,分为框架核心Module和其他Interpreter Module,源码结构如下图所示:

  从截图中可以看出,其实Zeppelin到目前为止,集成了很多插件,比如Beam、HBase、ES、Flink、Kylin、Pig等,这些都是平时大数据场景下常用的。

2.1 模块分析

  Zeppelin的入口是ZeppelinServer(在zeppelin-server模块下)这个类下的Main函数,通过Jetty内嵌服务器提供WebSocket服务和Restful服务,还基于Shiro提供了权限认证和用户校验功能,都是使用Java编程语言实现的。在zeppelin-zengine模块下,实现Notebook的持久化和检索功能,同样使用Java语言实现。在zeppelin-interpreter模块下,通过调用zeppelin-zengine中的Thrift服务,来实现解释器的交互功能。在zeppelin-web模块下,用于脚本语言编写以及数据的可视化,使用AngularJS前端框架实现。其他模块详见下表。

名称 说明 实现语言
zeppelin-server 整个系统入口,提供服务器功能、权限认证以及用户校验等功能 Java
zeppelin-zengine 实现Zeppelin中Notebook的持久化和检索功能 Java
zeppelin-interpreter 执行解释器 Java
zeppelin-web 业务脚本语言编写、数据分析界面、数据可视化与结果导出 AngularJS
zeppelin-display 让前端的AngularJS元素与后台数据进行绑定,进行数据交互 Scala
zeppelin-distribution 用于存放编译后的二进制安装包    
zeppelin-examples 示例代码,用于测试  
helium-dev 新特性,让解释器,存储插件加入到Zeppelin中时,不需要重启Zeppelin服务 Java

  Zeppelin项目运用了许多编程语言和框架,属于一个混合项目。

3.源码调试

  明白Zeppelin各个模块的功能和作用后,我们可以尝试去调试一下Zeppelin的源码,这里我们将Zeppelin的源码导入到 IDEA 编辑器,然后找到ZeppelinServer启动,如下图所示:

  然后选择“Run 'ZeppelinServer.main()'”命令即可,等待服务启动完成,启动成功后,会在编辑器控制台打印日志,如下图所示:

  这里,在启动端口默认是8080,在ZeppelinConfiguration类下可以进行编辑,如下图所示:

  然后,我们可以到浏览器预览调试结果,如下图所示:

  一般在二次开发完成Zeppelin的功能后,我们会将源代码重新编译打包,可以使用Maven打包命令,如下所示:

mvn clean package -Pbuild-distr -Dcheckstyle.skip=true -DskipTests

  打包完成后,会在zeppelin-distribution的target目录下生成一个二进制的软件安装包。

4.关系图

  这里笔者给大家整理了Zeppelin-0.7.3的各个Module之间的关系图,如下所示:

5.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉。

Zeppelin源码的更多相关文章

  1. 一文读懂,硬核 Apache DolphinScheduler3.0 源码解析

    ​ 点亮 ️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 本文目录 1 DolphinScheduler的设计与策略 1.1 分布 ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  3. C# ini文件操作【源码下载】

    介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...

  4. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  5. 从源码看Azkaban作业流下发过程

    上一篇零散地罗列了看源码时记录的一些类的信息,这篇完整介绍一个作业流在Azkaban中的执行过程,希望可以帮助刚刚接手Azkaban相关工作的开发.测试. 一.Azkaban简介 Azkaban作为开 ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  9. SDWebImage源码解读之SDWebImageDownloaderOperation

    第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...

随机推荐

  1. [js高手之路]Node.js模板引擎教程-jade速学与实战1

    环境准备: 全局安装jade: npm install jade -g 初始化项目package.json: npm init --yes 安装完成之后,可以使用 jade --help 查看jade ...

  2. pip install python 如何快速安装模块

    之前python安装模块要在网络上下载,从python2.7.9之后,以及python3,python就自带pip 这个命令,能够快速的安装模块 1,  首先打开python的主文件夹 2.在主文件夹 ...

  3. 团队作业4——第一次项目冲刺(Alpha版本)4.23

    ·本次会议为第二次Scrum Meeting会议~ ·本次会议项目经理召开时间为17:00,在教学楼教室召开,召开时长约30分钟,探讨了昨日任务的进展.查重功能.今日要做的任务以及后续所要开展的工作. ...

  4. 201521123092《java程序设计》第二周学习总结

    1. 本周学习总结 (1)学习了string的类型: (2)学习了java数组的使用: (3)学习了容器的概念: (4)解决一些pta编程时遇到的困难. 2. 书面作业 (1)使用Eclipse关联j ...

  5. evak购物车--团队博客

    1. 团队名称.团队成员介绍(需要有照片) 团队名称:evak 团队成员介绍:陈凯欣,计算机工程学院网络工程1512,学号为201521123034:邱晓娴,计算机工程学院网络工程1512,学号为20 ...

  6. Linux系统常用的文件查看及处理命令

    常用的文本查看及处理命令 1.cat命令 (1).作用 连接文件并打印到标准输出设备上,cat经常用来显示文件的内容. (2).用法 1):用法:cat  (参数) 文件 2):常用参数 -n或-nu ...

  7. HTTP请求的header头解析

    Request Headers: 下图是我访问一个URL:http://www.hzau.edu.cn的一个header,根据具体实例来分析一下各部分的功能及其作用. Accept 作用: 浏览器端可 ...

  8. python读取外部文件

    >>> pd.read_excel('c://111.xlsx') 年度排名 历史排名 电影名称 总票房 总人次 总场次 上映年份 操作 0 1 1 美人鱼 NaN -- -- 20 ...

  9. SSH复用代码最终版

    web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="h ...

  10. servlet_2

    package com.atguigu.servlet; import java.io.IOException; import javax.servlet.Servlet;import javax.s ...