为了支持Spark REPL功能,阿里云数据湖分析团队推出了本地安装Jupyter Lab和DLA Proxy、使用Docker快速启动环境两种方案,帮助用户将本地Jupyter Lab和阿里云DLA Spark连接在一起,从而可以利用DLA的弹性资源进行交互测试和计算。
注意事项
- DLA Spark当前支持python3,Scala 2.11的Jupyter可交互作业。
- 新版Jupyter Lab对Python的最低版本要求是Python 3.6。
- 推荐使用Docker快速启动环境方式来使用本功能。
- 交互式作业会在空闲一段时间后自动释放,默认释放时间为最后一个代码块执行完毕后1200秒。用户可以通过
spark.dla.session.ttl
来配置空闲多长时间后自动释放交互式作业。
本地安装Jupyter Lab和DLA Proxy
使用Docker快速启动环境
阿里云数据湖团队同时提供Docker镜像快速启动一个Jupyter交互式开发环境,Docker的安装和使用说明请参见Docker官方文档。
- 在排查错误时需要观察底层日志,文件浏览框中的
dlaproxy.log
即为日志记录文件,正确的启动信息如下图所示。 - 在不挂载宿主机文件夹的情况下,关闭Docker后编辑的文件会丢失。Docker关闭时也会自动尝试终止所有正在运行的Spark交互式作业。此时,您可以选择如下两种方案。
- 在关闭Docker前保证所有的文件被妥善的复制保管。
- 将本地文件夹挂载到Docker镜像中,并将作业文件存储在对应的文件夹下。
以Linux环境为例,将文件夹
/home/admin/notebook
挂载到Docker实例/root/notebook
文件夹下,启动命令如下。docker run -it --privileged=true -p 8888:8888 -v /home/admin/notebook:/root/notebook registry.cn-hangzhou.aliyuncs.com/dla_spark/dla-jupyter:0.5 -i {AkId} -k {AkSec} -r {RegionId} -c {VcName}
需要注意将编辑中的notebook最终另存到
/tmp
,关闭Docker示例后,在宿主机的/home/admin/notebook
文件夹下可以看到对应的文件,下次启动Docker实例时可以接着工作。说明 更多信息,请参见 Docker卷管理文档。
常见问题处理
-
问题现象:Jupyter Lab启动失败,出现如下报错,如何处理?
[C 09:53:15.840 LabApp] Bad config encountered during initialization:
[C 09:53:15.840 LabApp] Could not decode '\xe6\x9c\xaa\xe5\x91\xbd\xe5\x90\x8d' for unicode trait 'untitled_notebook' of a LargeFileManager instance.
解决方法:LANG=zn jupyter lab。
-
问题现象:出现报错
$ jupyter nbextension enable --py --sys-prefix widgetsnbextension Enabling notebook extension jupyter-js-widgets/extension... - Validating: problems found: - require? X jupyter-js-widgets/extension
,如何处理?解决方法:
jupyter nbextension install --py widgetsnbextension --user
和jupyter nbextension enable widgetsnbextension --user --py
。 -
问题现象:出现报错
ValueError: Please install nodejs >=12.0.0 before continuing. nodejs may be installed using conda or directly from the nodejs website.
,如何处理?解决方法:conda install nodejs。关于安装Conda请参考Conda官方文档。
-
问题现象:安装Sparkmagic时报错失败,如下图所示,如何处理?
解决方法:安装Rust。
-
问题现象:无法使用matplot进行绘图, 即使加入了
%matplotlib inline
仍然会报错如下图所示。解决方法: 当使用云端PySpark时, 使用
%matplot plt
组合plt.show()
绘制图表, 效果如下图所示。