让Spark如虎添翼的Zeppelin – 基础篇

Spark 是一个非常好的计算平台,支持多种语言,同时基于内存的计算速度也非常快。整个开源社区也很活跃。

但是Spark在易用性上面还是有一些美中不足。 对于刚接触的人来说,上手以及环境搭建还是有一些困难。 另外,如果希望将结果绘制成图表分享给别人,还需要很长一段路程。

目前已经有一些解决方案:

  • 【TBD】Jupyter Notebook
  • 使用很广泛,但是看起来主要还是以前ipython-notebook的增强版。
  • 目前笔者对其了解不多
  • Spark 母公司DataBricks提供的DataBricks Community Edition, 里面自带Spark集群 + Notebook。
  • 易用性、功能性都很不错。缺点是集群架设在AWS之上,无法跟自己本地的Spark 集群连在一起
  • Apache Zeppelin
  • 这是一个刚刚从Incubation转正的项目
  • 但是已经在各大公司均有采用,比如美团、微软等等
  • 本文主要就是介绍如何在本地搭建一个Zeppelin 使得Spark更易用,同时可以很方便的将自己的工作成功展示给客户

借用别人的一个效果图镇楼^_^

注意:

  1. Zeppelin自带Spark实例,您无需自己构建一个Spark 集群就可以学习Zeppelin
  2. Zeppelin 当前(2016年8月19日)最新版本0.6.1, 只兼容2.0+

     1)如果您本地有Spark 集群并且版本是1.6.1 + Scala 2.10 , 请下载Zeppelin 0.6.0的版本

     2)如果官网的速度比较慢,可以参考下面的方式到百度盘下载

链接: http://pan.baidu.com/s/1ctBBJo 密码: e68g

1、 下载

如果您需要的是0.6.0的版本,可以参考上面百度盘的下载链接。

如果您需要的是0.6.1+的版本,可以直接到官网下载, 里面的Mirror下载速度一般还不错

2、 安装

版本: Zeppelin 0.6.0 + 自建Spark集群(1.6.1)

感觉Zeppelin还是不太成熟,并开箱就用,还需要不少人工调整才能正常工作

1)解压之后,首先需要从模板创建一个新的zeppelin-env.sh, 并设置SPARK_HOME. 比如:

 
 
  1. 1export SPARK_HOME=/usr/lib/spark 

如果是基于Hadoop 或者 Mesos 搭建的Spark 集群,还需要进行另外的设置。

2)从模板创建一个新的zeppelin-site.xml,并将之前的8080端口改到比如8089,避免与Tomcat等端口冲突

 
 
  1. <property> 
  2.  
  3. <name>zeppelin.server.port</name
  4.  
  5. <value>8089</value> 
  6.  
  7. <description>Server port.</description> 
  8.  
  9. </property> 

3)替换jackson相关类库

a)默认自带的是2.5.*, 但是实际使用的时候指定的是2.4.4

b)并且可能2.4.4 与 2.5.* 并不完全兼容。

c)因此需要使用2.4.4 替换2.5.* , 有下面3个jar需要替换:

 
 
  1. jackson-annotations-2.4.4.jar 
  2. jackson-core-2.4.4.jar 
  3. jackson-databind-2.4.4.jar 

d)这真的是非常坑人的一个地方。。。

做完上诉几步之后,就可以启动啦:

启动/停止命令:

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

启动之后,打开http://localhost:8089 就可以看到Zeppelin的主界面啦

3. 配置Spark解释器

Spark Interpreter的配置非常简单,可以直接参考下图的配置方式:

4. 几点使用经验

Zeppline自带比较详细的Tutorial, 各位看自带的notebook tutorial 可能效果更好。 但是我在第一次使用的时候,遇到了不少坑,在此记录下来,给大家做个参考:

(1) 任务提交之后不会自动停止

当Zeppelin 提交任务之后,可以看到Spark Master UI 上面,当前任务即使执行完成了,也不会自动退掉

这是因为,Zeppelin 默认就像人手工运行了spark-shell spark://master-ip:7077 一样, 除非手动关闭shell命令,否则会一直占用着资源

解决办法就是将spark 解释器(interpreter) 重启

手动的重启办法:

1.打开Interpreter界面,搜索到Spark部分并点击重启

2.推荐: 调用Restful API 进行重启。

a.可以通过Chrome的Network 监控看一下点击restart之后具体调用的API的情况。如下图:

b.这个ID(2BUDQXH2R)在各自的环境可能各不相同。另外这个API是PUT的方式,可以直接使用下面的python代码在UI上自动重启

 
 
  1. %python 
  2.  
  3. import requests 
  4.  
  5. r = requests.put("http://IP:8089/api/interpreter/setting/restart/2BUDQXH2R"
  6.  
  7. print r.text 

(2) 异常提示:Cannot call methods on a stopped SparkContext

比如我们在Spark Master UI 上面将当前job kill 之后,在Zeppelin这边重启执行任务就会遇到这个异常信息。

解决办法很简单: 重启解析器

(3) 不要主动调用 sc.stop()

这是官方明确说明的:scala 的spark-shell 自动初始化了SparkContext / SqlContext 等等

不能自己调用sc.stop() 之后重启创建一个SparkContext

可能笔者水平原因,尝试自己创建新的sc 之后,各种奇奇怪怪的问题

(4) 关于python module

Python Interpreter可以使用当前Zeppelin所在机器的python 所有的model

同时支持python 2 与 python 3

这是一个很有用的功能,比如我使用spark将数据计算完成之后,生成了一个并不太大的csv文件。这个时候完全可以使用Pandas强大的处理能力来进行二次处理,并最终使用Zeppelin的自动绘图能力生成报表

与Tableau之类的BI工具相比功能差了一些,不过各有所长。Zeppelin 对程序员来说可以算是非常方便的一个工具了。 对日常的一些简单报表的工作量大大减小了

(5) 可以设置自动运行时间

在整个Note的最上端,可以设置当前notebook 定期执行。 而且注意: 还可以设置执行完成之后自动重启interpreter 参考下图:


本文作者:rangerwolf

来源:51CTO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在Zeppelin中与Spark集成后,你可以使用Zeppelin来编写和运行Spark代码。下面是一个简单的Zeppelin Spark实例,演示了如何使用Spark进行数据处理: 1. 打开Zeppelin,并创建一个新的笔记。 2. 在笔记页面中,选择要使用的解释器为Spark。 3. 在第一个代码块中,我们将使用Spark读取一个文本文件,并计算单词的数量: ```scala %spark val textFile = sc.textFile("/path/to/textfile.txt") val wordCount = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) wordCount.collect().foreach(println) ``` 这段代码使用`sc.textFile()`方法读取一个文本文件,然后使用`flatMap()`和`map()`方法对每一行进行单词拆分和计数,最后使用`reduceByKey()`方法将相同单词的计数进行合并。最后,我们使用`collect()`方法将结果打印出来。 4. 在第二个代码块中,我们将使用Spark SQL查询一个数据表,并显示结果: ```scala %spark val df = spark.read.format("csv").option("header", "true").load("/path/to/data.csv") df.createOrReplaceTempView("data") val result = spark.sql("SELECT * FROM data WHERE age > 30") result.show() ``` 这段代码使用`spark.read.format().load()`方法读取一个CSV文件,并将其加载到DataFrame中。然后,我们使用`createOrReplaceTempView()`方法将DataFrame注册为一个临时表,以便使用Spark SQL进行查询。最后,我们使用`spark.sql()`方法执行查询,并使用`show()`方法显示结果。 这只是一个简单的Zeppelin Spark实例,你可以根据自己的需求进行更复杂的数据处理和分析。希望这个例子能帮助你开始使用ZeppelinSpark!如有任何问题,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值