当前位置:技术分享 > 技术参考 > 正文

使用Jupyter Notebook 加速PySpark开发2018-02-07 14:48:59 | 编辑:hely | 查看: | 评论:0

目前我们系统的整体架构大概是: Spark Standalone Cluster + NFS FileServer 自然, 这些都是基于Linux系统
目前我们系统的整体架构大概是: 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]

 

 

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

上一篇:Apache Spark中的决策树 如何在Python中用scikit-learn生成测试数据集下一篇:

公众平台

搜索"raincent"或扫描下面的二维码