- keywords:
- docker jupyernotebook pyspark
目前我们系统的整体架构大概是: Spark Standalone Cluster + NFS FileServer. 自然, 这些都是基于 Linux 系统.
Windows 在开发 PySpark 程序的时候, 大部分情况都没有什么问题. 但是有两种情况就比较蛋疼了:
读取 NFS 文件
Windows 底下, 一旦涉及到 NFS 的文件路径, 就歇菜了: 因为 NFS 的文件路径都是比如 /mnt/nfs/xxx 这种, 而 Windows 上面完全无法实现.
消耗性能
虽然作为 client, 理论上不需要太强悍的性能, 但是有的事情并不合适 Spark. 这个时候, 能有一个强力的 client, 就美滋滋了!
关于 NFS 的解决方案, 一种很简单的解决方案就是起一个虚拟机. 我这边选择的方案:
基于 Docker 的 JupyerNotebook 作为 pyspark 的开发工具.
PS: 笔者在这里就不对比两种方案的优劣了. 各位看官可以根据自己的需求进行选取.
安装 Docker
这个网上已经很多教程了.
在这里推荐一个: 安装. Docker 从入门到实践 yeasy GitBook
基础环境
基础镜像
因为我们主力是 python 语言, 有时候还需要做一些 AI/ML Task.
我选取的是 TensorFlow 的镜像: Pull 的命令:
- docker pull tensorflow / tensorflow
- mount NFS
首先安装 nfs-common. 以 ubuntu 为例:
apt install - y nfs - common
mount 命令:
sudo mount - t nfs remote_server: remote_dir / mnt / nfs3
启动 docker:
# 注意: 一定要加上 --net = host--pid = host - e TINI_SUBREAPER = truesudo docker run--name spark - learn - d\--net = host--pid = host - e TINI_SUBREAPER = true\ - p 8888 : 8888 - v / notebooks: /notebooks\-v /mnt / nfs3: /mnt/nfs3\tensorflow / tensorflow
否则在后面运行 spark 脚本之后, 会遇到很诡异的提示资源不足
配置环境
这个时候, 已经可以直接打开 notebook 写 python 了. 所以, 有的操作我就放 python 代码了.
修改 APT 源 (使用 163)
#ipython notebook 之中表示执行命令 ! cp / etc / apt / sources.list / etc / apt / sources.list.bak import ossource = '''deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ xenial main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse'''with open('/etc/apt/sources.list', 'w') as f: f.write(source) ! apt update
安装 JDK
直接 APT 安装 openjdk 不要太方便啊, 比手动安装 oracle-jdk 方便多了. 而且目前看来, spark 对他的兼容性也是得到保证的.
!apt - get install openjdk - 8 - jre - y
修改 pip 源 + 安装 pyspark
因为 pyspark 比较大, 网络不好的同学建议修改 pip 源.
修改 pip 源, 推荐我的小工具:
https://github.com/RangerWolf/pip-ex
使用很简单:
mkdir_p(pip_config_dir) change("tsinghua")# 我的网络发现清华的镜像比阿里云还要快 !
之后 pip 安装飞起来了! 安装 pyspark 就一句话: pip install pyspark
其他说明:
实时查看 Spark 运行日志
Spark 的运行 log 并不会直接在 notebook 上面显示. 需要使用 docker logs 命令才能看到.
如果我们需要在命令自动显示最新的 log, 而不需要我们每次手动输入, 可以使用下面的命令:
docker logs - f--tail 100 spark - learn
网络速度监控
第一次运行 Spark 程序的时候, 我发现一个很简单的命令也没有执行弯成. 以为是网络 IO 太久了.
想看看是不是网络卡, 我发现下面这个神器:
# 安装 sudo apt-get install speedometer # 运行 speedometer -rx eth0 -tx eth0 # docker 环境下, 可以多试几个# 可以使用 ifconfig 查看 speedometer -rx docker0 -tx docker0speedometer -rx eno0 -tx eno0
在命令行就直接显示出这种图片, 真是太牛了!
来源: https://www.flyml.net/2018/02/06/faster-pyspark-dev-with-jupyter-notebook/