使用Jupyter Notebook 加速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:

[code lang=bash]
# 注意: 一定要加上 –net=host –pid=host -e TINI_SUBREAPER=true
sudo 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
[/code]

否则在后面运行spark脚本之后, 会遇到很诡异的提示”资源不足”

配置环境

这个时候, 已经可以直接打开notebook写python了. 所以,有的操作我就放python代码了.

修改APT源 (使用163)

[code lang=bash]
# ipython notebook之中表示执行命令
!cp /etc/apt/sources.list /etc/apt/sources.list.bak

import os
source = '''
deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-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
[/code]

安装JDK

直接APT安装openjdk 不要太方便啊, 比手动安装oracle-jdk 方便多了. 而且目前看来, spark对他的兼容性也是得到保证的.

!apt-get install openjdk-8-jre -y

安装Maven

有时候, pyspark需要依赖其他的包的时候, 需要使用maven下载.

使用APT安装还是最方便的 :

apt-get install maven -y

修改pip源 + 安装pyspark

因为pyspark比较大, 网络不好的同学建议修改pip源.

修改pip源, 推荐我的小工具: https://github.com/RangerWolf/pip-ex

使用很简单:

[code lang=python]
mkdir_p(pip_config_dir)
change("tsinghua") # 我的网络发现清华的镜像比阿里云还要快!
[/code]

之后pip安装飞起来了! 安装pyspark就一句话: pip install pyspark

其他说明:

实时查看Spark运行日志

Spark的运行log并不会直接在notebook上面显示. 需要使用docker logs命令才能看到.

如果我们需要在命令自动显示最新的log, 而不需要我们每次手动输入, 可以使用下面的命令:

docker logs -f --tail 100 spark-learn

网络速度监控

第一次运行Spark程序的时候, 我发现一个很简单的命令也没有执行弯成. 以为是网络IO太久了.

想看看是不是网络卡, 我发现下面这个神器:

[code lang=bash]
# 安装
sudo apt-get install speedometer

# 运行
speedometer -rx eth0 -tx eth0

# docker环境下, 可以多试几个
# 可以使用ifconfig 查看
speedometer -rx docker0 -tx docker0
speedometer -rx eno0 -tx eno0
[/code]

 

使用Jupyter Notebook 加速PySpark开发

 

在命令行就直接显示出这种图片, 真是太牛了

结语

感谢您的观看,如有不足之处,欢迎批评指正。

如果有对大数据感兴趣的小伙伴或者是从事大数据的老司机可以加群:

658558542    

欢迎大家交流分享,学习交流,共同进步。(里面还有大量的免费资料,帮助大家在成为大数据工程师,乃至架构师的路上披荆斩棘!)

最后祝福所有遇到瓶颈的大数据程序员们突破自己,祝福大家在往后的工作与面试中一切顺利。

;