一篇全面的zepplin教程

一篇全面的zepplin教程https www jianshu com p 090f02005e07 Zeppelin 是什么 ApacheZeppel 是一款基于 Web 的 Notebook 类似于 jupyternoteb 支持交互

大家好,欢迎来到IT知识分享网。

https://www.jianshu.com/p/090f02005e07

 

1.Zeppelin是什么?

  • 数据采集
  • 数据发现
  • 数据分析
  • 数据可视化和协作

支持多种语言,默认是Scala(背后是Spark shell),SparkSQL, Markdown ,SQL,Shell,Markdown和Python

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

Apache Spark集成

特别是,Apache Zeppelin提供内置的Apache Spark集成。您不需要为其构建单独的模块,插件或库。

2.Zeppelin特性

2.1 Apache Spark 集成

  • 自动引入SparkContext 和 SQLContext
  • 从本地文件系统或maven库载入运行时依赖的jar包。更多关于依赖载入器
  • 可取消job 和 展示job进度

2.2 数据可视化

一些基本的图表已经包含在Zeppelin中。可视化并不只限于SparkSQL查询,后端的任何语言的输出都可以被识别并可视化。

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

 

3.Zeppelin的快速入门

3.1 安装

Apache Zeppelin下载页面提供了两个二进制包。http://zeppelin.apache.org/download.html

  • all口译包

    只需将其打包在您选择的目录中即可。

  • net-install编译包

    打开包装并按照安装其他编译程序安装解释器。如果您不确定,只需运行./bin/install-interpreter.sh --all并安装所有解释器。

安装与运行请参考:
http://zeppelin.apache.org/docs/0.7.3/install/install.html

 启动Apache Zeppelin bin/zeppelin-daemon.sh start 停止Zeppelin bin/zeppelin-daemon.sh stop 

与service manager一起启动Apache Zeppelin
Apache Zeppelin可以使用初始化脚本作为服务自动启动,使用像upstart这样的服务管理器。这是一个保存的示例upstart脚本,因为/etc/init/zeppelin.conf 这允许使用诸如以下命令来管理服务。

sudo service zeppelin start sudo service zeppelin stop sudo service zeppelin restart 

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.2 配置

3.2.1 Zeppelin Properties

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

3.3 探索Apache Zeppelin UI

首页

你第一次连接到Zeppelin,你将会在主页面上看到下面的截图。

一篇全面的zepplin教程

image.png

 

您可以使用输入文本形式通过名称过滤它们。您还可以创建一个新的笔记,刷新现有笔记的列表(万一手动将其复制到$ZEPPELIN_HOME/notebook文件夹中)并导入笔记。

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

 

菜单

笔记本

Notebook菜单提出与主页中的笔记管理部分几乎相同的功能。从下拉菜单中,您可以:

  1. 打开选定的音符
  2. 按名称过滤节点
  3. 创建一个新的音符  

    一篇全面的zepplin教程

    image.png

设置

此菜单可让您访问设置并显示有关Zeppelin的信息。anonymous如果使用默认的shiro 配置,用户名设置为。如果要设置身份验证,请参阅Shiro身份验证。

一篇全面的zepplin教程

image.png

关于Zeppelin

您可以在此菜单中查看Zeppelin版本。

一篇全面的zepplin教程

image.png

解释器

在此菜单中,您可以:

  1. 配置现有的解释器实例
  2. 添加/删除解释器实例

一篇全面的zepplin教程

image.png

凭据

此菜单允许您保存传递给口译员的数据源的凭据。

一篇全面的zepplin教程

image.png

配置

此菜单显示配置文件中设置的所有Zeppelin配置 $ZEPPELIN_HOME/conf/zeppelin-site.xml

一篇全面的zepplin教程

image.png

注释布局

每个Zeppelin笔记由1 .. N段组成。该笔记可以看作是一个段落容器。

一篇全面的zepplin教程

image.png

段落

每个段落由两部分组成:code section您将源代码放在result section哪里,您可以在其中看到代码执行的结果。

一篇全面的zepplin教程

image.png

在每个段落的右上角都有一些命令:

  • 执行段落代码
  • 隐藏/显示 code section
  • 隐藏/显示 result section
  • 配置段落

要配置段落,只需点击齿轮图标:

一篇全面的zepplin教程

image.png

从这个对话框可以(按降序排列):

  • 找到段落id-_
  • 控制段宽。由于Zeppelin正在使用Twitter Bootstrap的网格系统,因此每段宽度可以从1变为12
  • 移动第1段
  • 将第1段向下移动
  • 创建一个新段落
  • 更改段落标题
  • 显示/隐藏行号 code section
  • 禁用此段落的运行按钮
  • 将当前段落导出为iframe,并在新窗口中打开iframe
  • 清除 result section
  • 删除当前段落

注意工具栏

在笔记的顶部,您可以找到一个显示命令按钮以及配置,安全性和显示选项的工具栏。

一篇全面的zepplin教程

image.png

在最右边显示注释名称,只需点击它即可显示输入表单并进行更新。

在工具栏的中间,您可以找到命令按钮:

  • 执行所有段落顺序,在他们的显示顺序
  • 隐藏/显示code section所有段落
  • 隐藏/显示result section所有段落
  • 清除result section所有段落
  • 克隆当前笔记
  • 将当前注释导出到JSON文件。_Please注意的是,code sectionresult section所有段落将用于出口。如果您在result section某些段落中有重的数据,建议您在导出之前清理它们
  • 提交当前节点内容
  • 删除注释
  • 使用CRON语法调度所有段落的执行

一篇全面的zepplin教程

image.png

在笔记工具栏的右侧,您可以找到配置图标:

  • 显示所有的键盘摇柄
  • 配置解释器绑定到当前注释
  • 配置注释权限
  • 开关之间的节点的显示模式defaultsimplereport

一篇全面的zepplin教程

image.png

3.4 Apache Zeppelin教程

本教程将引导您了解Zeppelin的一些基本概念。我们假设你已经安装了Zeppelin。如果没有,请先看这里。

Zeppelin当前的主要后端处理引擎是Apache Spark。如果您刚刚接触到该系统,您可能希望首先了解如何处理数据以充分利用Zeppelin。

3.4.1 本地文件教程

数据优化

val bankText = sc.textFile("yourPath/bank/bank-full.csv") case class Bank(age:Integer, job:String, marital : String, education : String, balance : Integer) // split each line, filter out header (starts with "age"), and map it into Bank case class val bank = bankText.map(s=>s.split(";")).filter(s=>s(0)!="\"age\"").map( s=>Bank(s(0).toInt, s(1).replaceAll("\"", ""), s(2).replaceAll("\"", ""), s(3).replaceAll("\"", ""), s(5).replaceAll("\"", "").toInt ) ) // convert to DataFrame and create temporal table bank.toDF().registerTempTable("bank") 

数据检索

假设我们想看到年龄分布bank。为此,运行: %sql select age, count(1) from bank where age < 30 group by age order by age 您可以输入框通过更换设置年龄条件30用${maxAge=30}。 %sql select age, count(1) from bank where age < ${maxAge=30} group by age order by age 现在我们要看到具有某种婚姻状况的年龄分布,并添加组合框来选择婚姻状况。跑: %sql select age, count(1) from bank where marital="${marital=single,single|divorced|married}" group by age order by age 

3.4.2 具有流数据的教程

数据优化

由于本教程基于Twitter的示例tweet流,您必须使用Twitter帐户配置身份验证。要做到这一点,看看Twitter Credential Setup。当您得到API密钥,您应填写证书相关的值(apiKeyapiSecretaccessTokenaccessTokenSecret与下面的脚本您的API密钥)。

这将创建一个Tweet对象的RDD 并将这些流数据注册为一个表:

import org.apache.spark.streaming._ import org.apache.spark.streaming.twitter._ import org.apache.spark.storage.StorageLevel import scala.io.Source import scala.collection.mutable.HashMap import java.io.File import org.apache.log4j.Logger import org.apache.log4j.Level import sys.process.stringSeqToProcess / Configures the Oauth Credentials for accessing Twitter */ def configureTwitterCredentials(apiKey: String, apiSecret: String, accessToken: String, accessTokenSecret: String) { val configs = new HashMap[String, String] ++= Seq( "apiKey" -> apiKey, "apiSecret" -> apiSecret, "accessToken" -> accessToken, "accessTokenSecret" -> accessTokenSecret) println("Configuring Twitter OAuth") configs.foreach{ case(key, value) => if (value.trim.isEmpty) { throw new Exception("Error setting authentication - value for " + key + " not set") } val fullKey = "twitter4j.oauth." + key.replace("api", "consumer") System.setProperty(fullKey, value.trim) println("\tProperty " + fullKey + " set as [" + value.trim + "]") } println() } // Configure Twitter credentials val apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxx" val apiSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" val accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" val accessTokenSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" configureTwitterCredentials(apiKey, apiSecret, accessToken, accessTokenSecret) import org.apache.spark.streaming.twitter._ val ssc = new StreamingContext(sc, Seconds(2)) val tweets = TwitterUtils.createStream(ssc, None) val twt = tweets.window(Seconds(60)) case class Tweet(createdAt:Long, text:String) twt.map(status=> Tweet(status.getCreatedAt().getTime()/1000, status.getText()) ).foreachRDD(rdd=> // Below line works only in spark 1.3.0. // For spark 1.1.x and spark 1.2.x, // use rdd.registerTempTable("tweets") instead. rdd.toDF().registerAsTable("tweets") ) twt.print ssc.start() 

数据检索

对于每个以下脚本,每次单击运行按钮,您将看到不同的结果,因为它是基于实时数据。 我们开始提取包含单词girl的最多10个tweets 。 %sql select * from tweets where text like '%girl%' limit 10 这次假设我们想看看在过去60秒内每秒创建的tweet有多少。为此,运行: %sql select createdAt, count(1) from tweets group by createdAt order by createdAt 

您可以在Spark SQL中进行用户定义的功能并使用它们。让我们通过命名函数来尝试sentiment。该功能将返回参数中的三种态度之一(正,负,中性)。

def sentiment(s:String) : String = { val positive = Array("like", "love", "good", "great", "happy", "cool", "the", "one", "that") val negative = Array("hate", "bad", "stupid", "is") var st = 0; val words = s.split(" ") positive.foreach(p => words.foreach(w => if(p==w) st = st+1 ) ) negative.foreach(p=> words.foreach(w=> if(p==w) st = st-1 ) ) if(st>0) "positivie" else if(st<0) "negative" else "neutral" } // Below line works only in spark 1.3.0. // For spark 1.1.x and spark 1.2.x, // use sqlc.registerFunction("sentiment", sentiment _) instead. sqlc.udf.register("sentiment", sentiment _) 
要检查人们如何看待使用sentiment上述功能的女孩,请运行以下操作: %sql select sentiment(text), count(1) from tweets where text like '%girl%' group by sentiment(text) 

3.5 Apache Zeppelin动态表单

Apache Zeppelin动态创建输入表单。根据语言后端,创建动态表单有两种不同的方式。自定义语言后端可以选择要使用哪种类型的表单创建。

 

一篇全面的zepplin教程

image.png

也可以提供默认值,使用${formName=defaultValue}。

 

一篇全面的zepplin教程

image.png

例如:

 

一篇全面的zepplin教程

image.png

此外,您可以使用选项的显示名称和值分隔 ${formName=defaultValue,option1(DisplayName)|option2(DisplayName)…}

 

一篇全面的zepplin教程

image.png

默认情况下更改选择后,段落将自动运行。但是,如果您在一个段落中有多种类型的动态表单,则可能需要在更改所有选项后运行该段落。您可以通过取消选中设置菜单中的以下“ 运行选择更改”选项来控制此选项。即使您取消选中此选项,仍然可以通过按下来运行它Enter。

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

此外,您可以使用以下命令指定分隔符${checkbox(delimiter):formName=…}:

 

一篇全面的zepplin教程

image.png

与选择表单一样,默认情况下更改选择后,段落将自动运行。但是,如果您在一个段落中有多种类型的动态表单,则可能需要在更改所有选项后运行该段落。您可以通过取消选中设置菜单中的以下“ 运行选择更改”选项来控制此选项。即使您取消选中此选项,仍然可以通过按下来运行它Enter

一篇全面的zepplin教程

image.png

 

以编程方式创建

一些语言后端使用编程方式创建表单。例如ZeppelinContext提供了表单创建API

这里有一些例子。

文本输入表单

%spark println("Hello "+z.input("name")) 
%pyspark print("Hello "+z.input("name")) 

一篇全面的zepplin教程

image.png

具有默认值的文本输入表单

%spark println("Hello "+z.input("name", "sun")) 
%pyspark print("Hello "+z.input("name", "sun")) 

一篇全面的zepplin教程

image.png

选择表单

%spark println("Hello "+z.select("day", Seq(("1","mon"), ("2","tue"), ("3","wed"), ("4","thurs"), ("5","fri"), ("6","sat"), ("7","sun")))) 
%pyspark print("Hello "+z.select("day", [("1","mon"), ("2","tue"), ("3","wed"), ("4","thurs"), ("5","fri"), ("6","sat"), ("7","sun")])) 

一篇全面的zepplin教程

image.png

复选框表单

%spark val options = Seq(("apple","Apple"), ("banana","Banana"), ("orange","Orange")) println("Hello "+z.checkbox("fruit", options).mkString(" and ")) 
%pyspark options = [("apple","Apple"), ("banana","Banana"), ("orange","Orange")] print("Hello "+ " and ".join(z.checkbox("fruit", options, ["apple"]))) 

一篇全面的zepplin教程

image.png

3.6 Apache Zeppelin发表你的段落

Apache Zeppelin提供了一个发布笔记本段落结果的功能。使用此功能,您可以在您自己的网站上显示Zeppelin笔记本段落结果。这很简单 只需<iframe>在页面中使用标签。

在您的Zeppelin笔记本中运行一个段落后,点击位于右侧的齿轮按钮。然后,单击链接此段落菜单,如下图所示。

 

一篇全面的zepplin教程

image.png

 

只需复制提供的链接。

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

最后,您可以在您的网站上展示您美丽的可视化结果。

 

一篇全面的zepplin教程

image.png

3.7 自定义Zeppelin主页

Apache Zeppelin允许您使用您创建的笔记之一作为您的Zeppelin主页。为此,您可以对Zeppelin安装进行品牌定制,根据用户需求调整指导,甚至翻译成其他语言。

如何设置笔记作为您的Zeppelin主页

创建主页的过程非常简单,如下所示:

  1. 使用Zeppelin创建一个注释
  2. 在配置文件中设置note id
  3. 重新启动Zeppelin

使用Zeppelin创建一个注释

使用Zeppelin创建一个新的笔记,您可以使用%md解释器进行降价内容或您喜欢的任何其他解释器。您还可以使用显示系统生成文本,html,table或Angular(后端API,前端API)。

运行(shift + Enter)注释并查看输出。(可选)将备注视图更改为报告以隐藏代码段。

在配置文件中设置note id

要在配置文件中设置注释ID,您应该将其从备注URL中的最后一个字中复制。例如:

一篇全面的zepplin教程

image.png

 

将note id设置为ZEPPELIN_NOTEBOOK_HOMESCREEN环境变量或zeppelin.notebook.homescreen属性。

您还可以设置ZEPPELIN_NOTEBOOK_HOMESCREEN_HIDE环境变量或zeppelin.notebook.homescreen.hide属性来从记事列表中隐藏新的记事。

重新启动Zeppelin
重新启动您的Zeppelin服务器

./bin/zeppelin-daemon stop ./bin/zeppelin-daemon start 

而已!打开浏览器并导航到Apache Zeppelin并查看您的自定义主页。

%spark
 
println(
"""%angular
  <div ng-include="'app/home/notebook.html'"></div>
""") 

运行该段后,您将看到与此类似的输出:

 

一篇全面的zepplin教程

image.png

3.8 升级Zeppelin版本

基本上,较新版本的Zeppelin与以前版本的笔记本电脑目录和配置配合使用。所以拷贝notebook和conf目录应该够了。

 

一篇全面的zepplin教程

image.png

4.在Yarn上运行Apache Zeppelin & Spark

参考文献: Zeppelin on Spark Cluster Mode( Spark 集群模式下的 Zeppelin )

默认情况下,Apache Zeppelin启动Spark是以本地模式起的,master的值是local[*],我们可以通过修改conf/zeppelin-env.sh文件里面的MASTER的值如下:

export MASTER= yarn-client export HADOOP_HOME=/home/q/hadoop/hadoop-2.2.0 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/ 

此外,在编译Apache Zeppelin的时候,需要加入对YARN的依赖,解决的办法是可以在编译Apache Zeppelin的时候加上-Pyarn来解决上面的问题:

mvn package -Pspark-1.5 -DskipTests -Dhadoop.version=2.2.0 -Phadoop-2.2 -Pyarn 

然后再启动Apache Zeppelin

bin/zeppelin-daemon.sh start 

这时候,启动的Spark Job就会在YARN上跑。所有的日志可以在logs目录下找,在我的例子里面记录日志的文件是 zeppelin-interpreter-spark-*.log
另外需要注意的是,Apache Zeppelin & Spark在YARN模式上运行只支持yarn-client模式,如果你将MASTER设置成了yarn-cluster,那么将会出现异常。

5.Apache Zeppelin解释器

5.1 概述

Zeppelin解释器的概念允许将任何语言/数据处理后端插入到Zeppelin中。

目前,Zeppelin支持许多解释器,如Scala(使用Apache Spark),Python(带有Apache Spark),Spark SQL,JDBC,Markdown,Shell等。

什么是Zeppelin解释器?

Zeppelin Interpreter是一款插件,可让Zeppelin用户使用特定的语言/数据处理后端。例如,要在Zeppelin中使用Scala代码,您需要%spark解释器。

当您+Create在解释器页面中单击按钮时,解释器下拉列表框将显示您的服务器上的所有可用的解释器。

 

一篇全面的zepplin教程

image.png

什么是解释器设置?

Zeppelin解释器设置是Zeppelin服务器上给定解释器的配置。例如,hive JDBC解释器连接到Hive服务器需要这些属性。

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

什么是解释器组?

每个解释器都属于解释器小组。解释器组是start/stop解释器的单位。默认情况下,每个解释器都属于单个组,但该组可能包含更多的解释器。例如,Spark解释器组包括Spark支持,pySpark,Spark SQL和依赖加载器。

技术上来说,来自同一组的Zeppelin口译员正在运行在同一个JVM中。有关更多信息,请在这里检验。

每个解释器都属于一个单一的团体,并且一起注册。他们的所有属性都列在下面的解释器设置中。

 

一篇全面的zepplin教程

image.png

解释器绑定模式

每个解释器设置可以选择“共享”,“范围”,“隔离”解释器绑定模式之一。在“共享”模式下,绑定到解释器设置的每个笔记本都将共享单个解释器实例。在“范围”模式下,每个笔记本将在相同的解释器过程中创建新的解释器实例。在“隔离”模式下,每个笔记本都会创建新的口译过程。

 

一篇全面的zepplin教程

image.png

连接到现有的远程解释器

Zeppelin用户可以开始在其服务中嵌入解释器线程。这将为用户提供灵活性,以便在远程主机上启动解释器。要与您的服务一起开始解释器,您必须创建一个实例RemoteInterpreterServer并启动它,如下所示:

RemoteInterpreterServer interpreter=new RemoteInterpreterServer(3678); // Here, 3678 is the port on which interpreter will listen. interpreter.start() 

上面的代码将会在您的进程中启动解释器线程。解释器启动后,您可以通过检查连接到现有进程复选框来配置zeppelin连接到RemoteInterpreter ,然后提供如下图所示的解释器进程正在侦听的主机和端口

 

一篇全面的zepplin教程

image.png

5.2 解释器安装

Apache Zeppelin提供了解释器安装机制,为他们下载了Zeppelin netinst二进制包,或者只是想安装另一个第三方解释器。

社区管理解释器

Apache Zeppelin提供了几个解释器作为社区管理解释器。如果您下载了netinst二进制包,则需要使用以下命令进行安装。

安装所有社区管理的解释器

./bin/install-interpreter.sh --all 

安装特定的解释器

./bin/install-interpreter.sh --name md,shell,jdbc,python 

通过运行获得社区管理解释器的完整列表

./bin/install-interpreter.sh --list 

5.3 解释器依赖管理

您可以通过在解释器菜单中设置依赖关系来将外部库包含到解释器中。

当你的代码需要外部库,而不是下载/复制/重新启动Zeppelin,您可以轻松地在此菜单中执行以下作业。

从Maven存储库递归加载库 从本地文件系统加载库 添加额外的maven仓库 自动将库添加到SparkCluster 
加载依赖关系到解释器 点击导航栏中的“解释器”菜单。 点击要加载依赖关系的解释器的“编辑”按钮。 根据需要填写工件和排除字段。您不仅可以输入groupId:artifactId:version,还可以输入工件字段中的本地文件。 按“保存”,使用加载的库重新启动解释器。 

一篇全面的zepplin教程

image.png

添加用于依赖关系解析的存储库 1. 按右上角的“解释器”菜单中的图标。它将显示可用的存储库列表。 2. 如果需要解决来自中央maven仓库或本地〜/.m2仓库的依赖关系,请点击[图片上传失败...(image-76600c-97)] 图标旁边的存储库列表。 3. 填写表单并单击“添加”按钮,您将可以看到添加了新的存储库。 4. 或者,如果您在企业防火墙后面,您还可以指定所有代理设置,以便Zeppelin可以使用给定的凭据下载依赖项 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

5.4 解释器的模拟用户

运行zeppelin解释器进程作为Web前端用户

在shiro.ini中启用shiro auth

[users] user1 = password1, role1 user2 = password2, role2 

为要模拟的用户启用无密码ssh(例如user1)。

adduser user1 #ssh-keygen (optional if you don't already have generated ssh-key. ssh user1@localhost mkdir -p .ssh cat ~/.ssh/id_rsa.pub | ssh user1@localhost 'cat >> .ssh/authorized_keys' 

或者替代无密码,用户可以在zeppelin-env.sh 中覆盖ZEPPELIN IMPERSONATE CMD

export ZEPPELIN_IMPERSONATE_CMD='sudo -H -u ${ZEPPELIN_IMPERSONATE_USER} bash -c ' 

启动zeppelin服务器。

 

一篇全面的zepplin教程

image.png

 

转到解释器设置页面,并在任何解释器(在我的例子中为其解释器)启用“用户模拟”

测试用一个简单的段落

%sh whoami 

请注意,–proxy-user默认情况下,“用户Impersonate”选项的使用将使Spark解释器能够使用当前用户的选项。如果要禁用–proxy-user选项,请参考ZEPPELIN_IMPERSONATE_SPARK_PROXY_USER变量inconf/zeppelin-env.sh

5.5 Elasticsearch 解释器

概述

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速,实时地存储,搜索和分析大量数据。它通常用作为具有复杂的搜索功能和要求的应用程序提供的底层引擎/技术。

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

 

注意#2:如果使用Shield,您可以添加一个名称为shield.user包含名称和密码(格式:)的值的属性username:password。有关Shield配置的更多详细信息,请参阅Shield参考指南。不要忘记,在解释器目录(ZEPPELIN_HOME/interpreters/elasticsearch)中复制屏蔽客户端jar 。
启用弹性搜索解释器
在笔记本中,要启用弹性搜索解释器,请单击齿轮图标,然后选择弹性搜索。

%elasticsearch help Elasticsearch interpreter: General format: <command> /<indices>/<types>/<id> <option> <JSON> - indices: list of indices separated by commas (depends on the command) - types: list of document types separated by commas (depends on the command) Commands: - search /indices/types <query> . indices and types can be omitted (at least, you have to provide '/') . a query is either a JSON-formatted query, nor a lucene query - size <value> . defines the size of the result set (default value is in the config) . if used, this command must be declared before a search command - count /indices/types <query> . same comments as for the search - get /index/type/id - delete /index/type/id - index /index/type/id <json-formatted document> . the id can be omitted, elasticsearch will generate one 
%elasticsearch get /index/type/id 

一篇全面的zepplin教程

image.png

搜索

使用该search命令,您可以向Elasticsearch发送搜索查询。有两种查询格式:

  • 您可以提供JSON格式的查询,这正是您在使用Elasticsearch的REST API时提供的。
    • 有关搜索查询的内容的详细信息,请参阅Elasticsearch搜索API参考文档。
  • 您还可以提供a的内容query_string
    • 这是一个查询的快捷方式: { "query": { "query_string": { "query": "__HERE YOUR QUERY__", "analyze_wildcard": true } } }
    • 有关此类查询的内容的详细信息,请参阅Elasticsearch查询字符串语法。
%elasticsearch search /index1,index2,.../type1,type2,... <JSON document containing the query or query_string elements> 

如果要修改结果集的大小,可以在搜索命令之前添加一个设置大小的行。

%elasticsearch size 50 search /index1,index2,.../type1,type2,... <JSON document containing the query or query_string elements> 
%elasticsearch search / { "query": { "match_all": { } } } %elasticsearch search /logs { "query": { "query_string": { "query": "request.method:GET AND status:200" } } } %elasticsearch search /logs { "aggs": { "content_length_stats": { "extended_stats": { "field": "content_length" } } } } 

使用query_string元素:

%elasticsearch search /logs request.method:GET AND status:200 %elasticsearch search /logs (404 AND (POST OR DELETE)) 

重要提示:Elasticsearch中的文档是一个JSON文档,因此它是层次结构的,而不是SQL表中的一行。对于弹性解释器,搜索查询的结果是平坦的。

假设我们有一个JSON文档:

{ "date": "2015-12-08T21:03:13.588Z", "request": { "method": "GET", "url": "/zeppelin/4cd001cd-c517-4fa9-b8e5-a06b8f4056c4", "headers": [ "Accept: *.*", "Host: apache.org"] }, "status": "403", "content_length": 1234 } 

包含结果的表格:

 

一篇全面的zepplin教程

image.png

 

您还可以使用预定义的图表:

 

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

 

使用包含fields参数(用于过滤响应中的字段)的JSON查询:在这种情况下,响应中的所有字段值都是数组,因此,在平坦化结果之后,所有字段名称的格式为field_name[x]

 

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

计数

使用该count命令,您可以对某些索引和类型中可用的文档进行计数。您还可以提供查询。

%elasticsearch count /index1,index2,.../type1,type2,... <JSON document containing the query OR a query string> 

没有查询:

 

一篇全面的zepplin教程

image.png

有一个查询:

 

一篇全面的zepplin教程

image.png

指数

使用该index命令,您可以在Elasticsearch中插入/更新文档。

%elasticsearch index /index/type/id <JSON document> %elasticsearch index /index/type <JSON document> 

删除

使用该delete命令,您可以删除文档。

%elasticsearch delete /index/type/id 

应用Zeppelin动态表单

您可以在查询内使用Zeppelin 动态表单。您可以同时使用text inputselect form参数化功能。

%elasticsearch size ${limit=10} search /index/type { "query": { "match_all": { } } } 

5.6 HBase Shell 解释器

概述

HBase Shell是Apache HBase的JRuby IRB客户端。此解释器提供Apache Zeppelin中Apache HBase shell的所有功能。

解释器假定已安装Apache HBase客户端软件,并且可以从安装Apache Zeppelin的计算机连接到Apache HBase集群。

要开始使用HBase,请参阅HBase Quickstart。

支持HBase版本

默认情况下,Zeppelin是针对HBase 1.0.x版本而构建的。要使用HBase 1.1.x版本,请使用以下build命令:

# HBase 1.1.4 mvn clean package -DskipTests -Phadoop-2.6 -Dhadoop.version=2.6.0 -P build-distr -Dhbase.hbase.version=1.1.4 -Dhbase.hadoop.version=2.6.0 

要使用HBase 1.2.0+,请使用以下build命令:

# HBase 1.2.0 mvn clean package -DskipTests -Phadoop-2.6 -Dhadoop.version=2.6.0 -P build-distr -Dhbase.hbase.version=1.2.0 -Dhbase.hadoop.version=2.6.0 

配置

一篇全面的zepplin教程

image.png

 

如果要连接到群集上运行的HBase,则需要执行下一步。

导出HBASE_HOME

export HBASE_HOME=/usr/lib/hbase 或者用CDH运行时 export HBASE_HOME="/opt/cloudera/parcels/CDH/lib/hbase" 

您可以选择性地出口HBASE_CONF_DIR,而不是HBASE_HOME你应该有自定义的HBase的配置。

启用HBase Shell解释器

在笔记本中,要启用HBase Shell解释器,请单击Gear图标,然后选择HBase Shell。

使用HBase Shell解释器

在段落中,用于%hbase选择HBase Shell解释器,然后输入所有命令。要获取可用命令的列表,请使用help。

%hbase help 

例如,创建一个表

%hbase create 'test', 'cf' 

然后将数据放入该表中

%hbase put 'test', 'row1', 'cf:a', 'value1' 

5.7 Hive 解释器

 

一篇全面的zepplin教程

image.png

概述

在Apache Hive™ 数据仓库软件便于查询和管理驻留在分布式存储大型数据集。Hive提供了一种机制来将结构投影到这些数据上,并使用类似SQL的语言HiveQL查询数据。同时,这种语言还允许传统的map/reduce程序员在HiveQL中表达这种逻辑不方便或低效时插入自定义映射器和缩减器。

如何使用

基本上可以使用

%hive select * from my_table; 
%hive(etl) -- 'etl' is a ${prefix} select * from my_table; 

默认情况下,您还可以运行多达10个查询。更改这些设置尚未实现。

应用Zeppelin动态表单

您可以在查询内使用Zeppelin 动态表单。您可以同时使用text inputselect form参数化功能。

%hive SELECT ${group_by}, count(*) as count FROM retail_demo.order_lineitems_pxf GROUP BY ${group_by=product_id,product_id|product_name|customer_id|store_id} ORDER BY count ${order=DESC,DESC|ASC} LIMIT ${limit=10}; 

5.8 JDBC通用 解释器(重要重要)

概述

 

一篇全面的zepplin教程

image.png

创建一个新的JDBC解释器

首先,+ Create在解释器设置页面的右上角单击按钮。

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

 

下面的例子是Mysql连接。

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

 

%jdbc_interpreter_name show databases 

如果段落FINISHED没有任何错误,则会在上一个之后自动添加一个新的段落%jdbc_interpreter_name。所以你不需要在每个段落的标题中键入这个前缀。

 

一篇全面的zepplin教程

image.png

应用Zeppelin动态表单

您可以在查询内使用Zeppelin 动态表单。您可以使用参数化功能text inputselect form参数化功能。

%jdbc_interpreter_name SELECT name, country, performer FROM demo.performers WHERE name='{ 
  {performer=Sheryl Crow|Doof|Fanfarlo|Los Paranoia}}' 

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

5.9 Markdown 解释器

概述

Markdown是一种纯文本格式化语法,可以将其转换为HTML。Apache Zeppelin使用pegdown和markdown4j作为markdown解析器。

在Zeppelin笔记本中,您可以%md在段落的开头使用Markdown解释器,并从Markdown纯文本生成静态html。

在Zeppelin中,Markdown解释器默认启用,并使用pegdown解析器。

一篇全面的zepplin教程

image.png

 

案例

以下示例演示了Zeppelin笔记本中Markdown的基本用法。

 

一篇全面的zepplin教程

image.png

数学表达

Markdown解释器在内部利用%html显示系统。这意味着您可以将数学表达式与markdown语法相结合。有关更多信息,请参阅数学表达部分。

配置

一篇全面的zepplin教程

image.png

5.10 Python 2&3解释器

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

5.11 Shell 解释器

一篇全面的zepplin教程

image.png

5.12 Spark 解释器(重要重要)

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

%spark.dep z.reset() // clean up previously added artifact and repository // add maven repository z.addRepo("RepoName").url("RepoURL") // add maven snapshot repository z.addRepo("RepoName").url("RepoURL").snapshot() // add credentials for private maven repository z.addRepo("RepoName").url("RepoURL").username("username").password("password") // add artifact from filesystem z.load("/path/to.jar") // add artifact from maven repository, with no dependency z.load("groupId:artifactId:version").excludeAll() // add artifact recursively z.load("groupId:artifactId:version") // add artifact recursively except comma separated GroupID:ArtifactId list z.load("groupId:artifactId:version").exclude("groupId:artifactId,groupId:artifactId, ...") // exclude with pattern z.load("groupId:artifactId:version").exclude(*) z.load("groupId:artifactId:version").exclude("groupId:artifactId:*") z.load("groupId:artifactId:version").exclude("groupId:*") // local() skips adding artifact to spark clusters (skipping sc.addJar()) z.load("groupId:artifactId:version").local() 

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

一篇全面的zepplin教程

image.png

6.Apache Zeppelin安全问题

6.1 Shiro 授权

概述

Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,可执行身份验证,授权,加密和会话管理。在本文档中,我们将逐步介绍 Shiro 如何用于 Zeppelin notebook authentication ( 笔记本验证 )。
当您连接到 Apache Zeppelin 时,系统将要求您输入凭据。登录后,您可以访问包括其他用户注释在内的所有备注。

安全设置

您可以通过一些简单的步骤设置 Zeppelin notebook authentication

(1).启用 Shiro

默认情况下是在 conf ,你将会找到 shiro.ini.template ,以此文件为例,强烈建议您通过执行以下命令创建文件 shiro.ini

cp conf/shiro.ini.template conf/shiro.ini 

(2).Secure the Websocket channel ( 固定 WebSocket 通道 )

在 conf/zeppelin-site.xml 中设置属性 zeppelin.anonymous.allowed 为 false 。如果您还没有这个文件,只需将 conf/zeppelin-site.xml.template 复制到 conf/zeppelin-site.xml 。

(3).启动Zeppelin

bin/zeppelin-daemon.sh start (or restart) 

然后你可以浏览 Zeppelin 在 http://localhost:8080 。

(4).登录

最后,您可以使用以下 用户名/密码 组合之一进行登录。

 

一篇全面的zepplin教程

image.png

[users] admin = password1, admin user1 = password2, role1, role2 user2 = password3, role3 user3 = password4, role2 

你可以为密码旁边的每个用户设置角色。

activeDirectoryRealm = org.apache.zeppelin.realm.ActiveDirectoryGroupRealm activeDirectoryRealm.systemUsername = userNameA activeDirectoryRealm.systemPassword = passwordA activeDirectoryRealm.searchBase = CN=Users,DC=SOME_GROUP,DC=COMPANY,DC=COM activeDirectoryRealm.url = ldap://ldap.test.com:389 activeDirectoryRealm.groupRolesMap = "CN=aGroupName,OU=groups,DC=SOME_GROUP,DC=COMPANY,DC=COM":"group1" activeDirectoryRealm.authorizationCachingEnabled = false ldapRealm = org.apache.zeppelin.server.LdapGroupRealm # search base for ldap groups (only relevant for LdapGroupRealm): ldapRealm.contextFactory.environment[ldap.searchBase] = dc=COMPANY,dc=COM ldapRealm.contextFactory.url = ldap://ldap.test.com:389 ldapRealm.userDnTemplate = uid={0},ou=Users,dc=COMPANY,dc=COM ldapRealm.contextFactory.authenticationMechanism = SIMPLE 

还要定义系统中要拥有的角色/组,如下所示;

[roles] admin = * hr = * finance = * group1 = * 

Configure Realm (optional) ( 配置领域(可选) )

领域负责 Apache Zeppelin 的身份验证和授权。默认情况下,Apache Zeppelin 使用 IniRealm (用户和组可配置在 conf/shiro.ini 文件 [user] [group] 部分)。您还可以利用 Shiro Realms ,如 JndiLdapRealm , JdbcRealm 或创建 我们自己的 。要了解有关 Apache Shiro 领域的更多信息,请查看 此文档。

我们还提供社区自定义领域。

(5)活动目录

activeDirectoryRealm = org.apache.zeppelin.realm.ActiveDirectoryGroupRealm activeDirectoryRealm.systemUsername = userNameA activeDirectoryRealm.systemPassword = passwordA activeDirectoryRealm.hadoopSecurityCredentialPath = jceks://file/user/zeppelin/conf/zeppelin.jceks activeDirectoryRealm.searchBase = CN=Users,DC=SOME_GROUP,DC=COMPANY,DC=COM activeDirectoryRealm.url = ldap://ldap.test.com:389 activeDirectoryRealm.groupRolesMap = "CN=aGroupName,OU=groups,DC=SOME_GROUP,DC=COMPANY,DC=COM":"group1" activeDirectoryRealm.authorizationCachingEnabled = false 

而不是在 shiro.ini 管理员的明文中指定 systemPassword 管理员可以选择在 “hadoop凭据” 中指定相同。使用 hadoop 凭据命令行创建密钥库文件,因为 hadoop commons 应该在类路径中

hadoop credential create activeDirectoryRealm.systempassword -provider jceks://file/user/zeppelin/conf/zeppelin.jceks 

更改Shiro.ini文件中的以下值,并取消注释行:

activeDirectoryRealm.hadoopSecurityCredentialPath = jceks://file/user/zeppelin/conf/zeppelin.jceks 

LDAP

ldapRealm = org.apache.zeppelin.realm.LdapGroupRealm # search base for ldap groups (only relevant for LdapGroupRealm): ldapRealm.contextFactory.environment[ldap.searchBase] = dc=COMPANY,dc=COM ldapRealm.contextFactory.url = ldap://ldap.test.com:389 ldapRealm.userDnTemplate = uid={0},ou=Users,dc=COMPANY,dc=COM ldapRealm.contextFactory.authenticationMechanism = SIMPLE 

PAM

PAM 认证支持允许在 Zeppelin 正在运行的主机上重用现有的认证模块。在典型的系统模块中,每个服务配置例如 sshd , passwd 等 /etc/pam.d/ 。您可以重新使用这些服务之一或为 Zeppelin 创建自己的服务。激活 PAM 认证需要两个参数:1. realm:正在使用的 Shiro 域 2. service :配置为使用的服务 /etc/pam.d/ 。这里的名称需要与下面的文件名相同 /etc/pam.d/

[main] pamRealm=org.apache.zeppelin.realm.PamRealm pamRealm.service=sshd 

ZeppelinHub

ZeppelinHub 是一种服务,可同步您的 Apache Zeppelin 笔记本,并使您轻松协作。

为了使登录您的 ZeppelinHub 证书,应用以下变化conf/shiro.ini[main]节。

 A sample for configuring ZeppelinHub Realm zeppelinHubRealm = org.apache.zeppelin.realm.ZeppelinHubRealm Url of ZeppelinHub zeppelinHubRealm.zeppelinhubUrl = https://www.zeppelinhub.com securityManager.realms = $zeppelinHubRealm 

保护您的Zeppelin信息(可选)

默认情况下,定义的任何人都 [users] 可以在 Apache Zeppelin 中共享解释器设置,凭证和配置信息。有时您可能希望隐藏这些用于您的用例的信息。由于 Shiro 提供了基于 URL 的安全性,您可以通过在下面的行中注释或取消注释来隐藏信息 conf/shiro.ini 。

[urls] /api/interpreter/ = authc, roles[admin] /api/configurations/ = authc, roles[admin] /api/credential/ = authc, roles[admin] 

在这种情况下,只有具有 admin 角色的角色才能看到解释器设置,凭据和配置信息。如果要向其他用户授予此权限,您可以按照在部分中定义的角色[]进行更改 [users] 。

6.2 笔记本授权

概述

我们假设有一个Shiro Authentication组件,它将用户字符串和一组组字符串与每个NotebookSocket相关联。如果您尚未设置身份验证组件,请先检查Apache Zeppelin的Shiro身份验证。

授权设置

一篇全面的zepplin教程

image.png

 

 

一篇全面的zepplin教程

image.png

 

一篇全面的zepplin教程

image.png

6.3 数据源授权

概述

数据源授权涉及对数据源进行身份验证,如 Mysql 数据库,并确定用户权限。 Apache Zeppelin 允许用户使用自己的凭据与数据源进行身份验证。

例如,假设您在具有凭据的 Vertica 数据库中有一个帐户。您可能希望使用此帐户创建一个 JDBC 连接,而不是在 conf / shiro.ini 中定义的所有用户创建一个共享帐户。在这种情况下,您可以将凭据信息添加到 Apache Zeppelin 中,并使用以下简单步骤。

How to save the credential information? ( 如何保存凭证信息? )

您可以在数据源的下拉菜单中添加新的凭据,可以传递给解释器。

一篇全面的zepplin教程

image.png

 

键入用户名和密码为您自己的凭据。 ex) MySQL 解释器的 Mysql 用户和密码。

一篇全面的zepplin教程

image.png

 

JDBC interpreter ( JDBC解释器 )

您需要维护每个用户的连接池。解释方法将用户字符串作为参数,并使用用户连接池中的连接执行 jdbc 调用。

Presto

如果 Presto DB 服务器使用用户的 HDFS 授权运行后端代码,则不需要密码。

Vertica and Mysql

您必须存储用户的密码信息。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112312.html

(0)
上一篇 2026-01-19 11:00
下一篇 2026-01-19 11:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信