由于安全原因,用户无法触达生产集群的网络,所以MaxCompute Spark一直没有放开 yarn-client
的支持,也就是Spark-Shell
,Spark-SQL
以及PYSPARK
等交互式功能一直无法支持。最近调研了Zeppelin框架,配合MaxCompute Spark的相关特性以及组件,开发支持了Zeppelin on MaxCompute Spark来支持相对应的交互式探索需求。
步骤说明
- 因为配置以及启动比较繁琐,用户未必会对这方面的事情感兴趣,所以我封装了一个一键启动的脚本,见 spark-zeppelin-public.sh
下载脚本到本地后,运行
sh spark-zeppelin-public.sh
后,会自动下载相关组件如下- spark-zeppelin-public.conf
- spark-zeppelin-public.jar
- spark-2.3.0-odps0.32.0.tar.gz
- 第一次运行脚本会出现以下错误,这是因为默认的
spark-zeppelin-public.conf
并没有配置accessId,accessKey,projectName
linxuewei:spark-zeppelin-public linxuewei$ sh spark-zeppelin-public.sh
working dir: /Users/linxuewei/Desktop/spark-zeppelin-public
download spark-zeppelin-public.conf
download spark-zeppelin-public.jar
download spark-2.3.0-odps0.32.0.tar.gz
extract spark-2.3.0-odps0.32.0.tar.gz
export SPARK_HOME
spark-zeppelin-public.conf checking
TBD count is 3, plz check config make sure id key project is written!
config check failed, plz set id key project in spark-zeppelin-public.conf
- 正常配置
spark-zeppelin-public.conf
之后再运行sh spark-zeppelin-public.sh
linxuewei:spark-zeppelin-public linxuewei$ sh spark-zeppelin-public.sh
working dir: /Users/linxuewei/Desktop/spark-zeppelin-public
export SPARK_HOME
spark-zeppelin-public.conf checking
config check passed, start spark-submit
就会启动一个MaxCompute Spark作业,等待作业执行结束之后,可以回溯日志,找到logview
http://logview.odps.aliyun.com/logview/?h=http://service.cn.maxcompute.aliyun.com/api&p=zky_test&i=20190710044052214gy6kc292&token=eXN6eFlsNmQzOFV4dUIzVEVndm9KQUtVSlVNPSxPRFBTX09CTzpwNF8yNDcwNjM5MjQ1NDg0NDc5NzksMTU2Mjk5Mjg1Mix7IlN0YXRlbWVudCI6W3siQWN0aW9uIjpbIm9kcHM6UmVhZCJdLCJFZmZlY3QiOiJBbGxvdyIsIlJlc291cmNlIjpbImFjczpvZHBzOio6cHJvamVjdHMvemt5X3Rlc3QvaW5zdGFuY2VzLzIwMTkwNzEwMDQ0MDUyMjE0Z3k2a2MyOTIiXX1dLCJWZXJzaW9uIjoiMSJ9
- 打开
logview
点击master-0
点击StdOut
# 日志中的这个url,就是zeppelin server的地址了
# 直接复制粘贴到浏览器上即可访问,弹出的url会需要云账号的登录
Please visit the following url for zeppelin interaction.
http://20190710044052214gy6kc292-zeppelin.open.maxcompute.aliyun.com
Log dir doesn't exist, create /worker/zeppelin_logs/
Pid dir doesn't exist, create /worker/zeppelin_pids/
Zeppelin start [60G[[0;32m OK [0;39m]
- 打开
zeppelin url
打开Examples
Notebook,有时候页面会显示endpoint not exist的日志,这是因为zeppelin还没有启动完毕的情况,稍等片刻就可以
- 如果页面弹出一个
interpreter binding
的页面,直接点击Save即可,然后再点击ToolBar上的运行所有按钮即可执行Notebook上的代码的执行
从 examples 样例中我们可以看到,NoteBook支持三种语法
- 以
%spark
开头表示 scala 执行器 如果不写就默认是这个模式 - 以
%sql
开头表示 spark-sql 执行器,默认用ODPS External Catalog - 以
pyspark
开头表示 pyspark 执行器,默认用我们打包好的 python2.7
- 以
问题咨询
有问题就找峰七(林学维)即可。有了这个Zeppelin,有时候我们有一些语法或者spark接口上面不清楚的就可以现在notebook上执行,然后再写进工程代码里,不用一遍一遍的提交那么没有效率了。
这个模式相对于local模式更有力的地方是,这个模式其实是真实用了yarn-cluster模式运行着的,local模式仅仅能验证语法是否正确,而zeppelin模式能以分布式的方式提供交互式查询,这个对于那种需要关注性能结果的debugging是有帮助的。
资源释放
本质上Zeppelin Server on MaxCompute Spark还是一个Spark作业,默认这个作业会存活三天,如果你想手动关闭这个作业的话,就请用odpscmd,用kill <instanceId>;
命令来停止作业释放资源吧。