notebook远程访问pyspark集群, 算法工具神器重磅推荐

notebook远程访问pyspark集群, 算法工具神器重磅推荐


书接上文,前段时间 图算法十篇 之 图机器学习系列文章总结 系列文章中,我们对 图算法 有了 深入浅出 的了解,接下来 打算 开始更新 一系列使用 tensorflow 1.x/2.x 动手 实现 各种经典模型 的文章,专门 面向小白 和 经验不那么多 的 同学,大家 可以一起 熟悉 下 整个流程哦 ~

俗话 说的好 啊,“工欲善其事,必先利其器”,本文 要推荐的 这款工具,可以说是 算法工程师 的 神器工具:远程 notebook 跑 集群版 pyspark 。如上文所说,这个工具的特点就是 pyspark 和 notebook 相结合, 然后 远程访问 。当然,有同学用了 pyhive 和 notebook 结合 也可以 访问集群,但是 pyhive 功能简单,只能 查找数据转成 本地 pandas,数据大一点就 崩溃,还不能 灵活进行 进行分析。 这 pyhive 相对于pyspark 的数据分析能力数据整合能力 简直 差了 十万八千里。这个工具 绝对原创,当时 找遍全网 也没找到 解决办法,自己进行多次尝试 终于 获得成功,谁用谁知道,强烈推荐!!!

才开始调研这个工具的时候问题主要是卡在 安装好的 notebook 没办法 和 公司集群 进行通信 ,那样 实现的 就是 单机版 的 pyspark,毫无意义。本文介绍 的这个工具 能在 mac 上用 spark 解决问题,且能将 数据在 集群和单机之间进行交互 ,既能 调用集群资源 又能 使用 指定机器的单机资源,集群 和 模型数据 完全打通 ,别提多爽了 !!!

本工具 适用的背景就是: 我们可以在自己的电脑上,通过 web 连接 远程公司服务器 上的 notebook(当然需要vpn),本质 是将 远程的某台可以访问公司集群 的机器 作为 driver , 使用 notebook 调用公司的 pyspark集群环境 进行 数据分析spark模型分布式训练拉取数据到本地用单机的tensorflow 跑模型 等。最重要的一点是:支持 pyspark 和 本机 单机python 程序 的 实时回显(Read-Eval-Print Loop, REPL), 数据 模型 一手抓,集群单机 灵活切换,妥妥的算法工作神器 !!!

书接上文,本文 原创工具核心思想 就一句话:我们不是在 notebook 上集成 pyspark 环境,而是用将 pyspark 用notebook 来显示,并且允许远程访问web 访问

闲言少叙,开始本文的工具介绍吧~


(1) 工具配置流程

如上所述,本工具 的 核心思想 就是:将 pyspark 用 notebook 来显示,并且允许远程Web 访问。

拆解开来,中间 涵盖 三个步骤: (1) notebook 安装 与设置。**(2)** 允许 notebook 远程访问。 (3) pyspark 用notebook 显示。下面我们分别从这 三个步骤 来介绍吧!


(1.1) notebook 安装 与 插件设置

我们 可以使用 pip安装 notebook : pip3 install jupyter 。 而如果是使用 conda安装 的话,则是: conda install jupyter notebook

notebook 的安装非常容易,这里我们不在多说什么,这里介绍一下 notebook 的插件工具 jupyter_contrib_nbextension 吧,可以用它 添加侧边导航栏、程序执行时间显示、耗时显示、任务进度显示、自动代码补全 等功能,感兴趣 的 可以 自己下去 调研下,非常好用 哦~

对于 拓展插件,我们可以 使用命令 :

@ 欢迎关注作者公众号 算法全栈之路

pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install --user

进行安装,安装完成后 重启Jupyter , 就会发现在 jupyter网址首页上面 新增了 Nbextensions 的 tab 栏,如下图所示:

我们 需要先 设置插件工具可用,直接勾选即可。然后假如要添加notebook的侧边栏的话,直接勾选 Table of Contents(2) 即可,其他插件操作同理,页面如下图所示:

notebook 这个工具,熟悉 python开发 的 同学大多都用过,我就 不在赘述 了。


(1.2) 允许 notebook 远程访问

在这里,我们 使用 jupyter notebook 原生自带远程访问 功能,方便我们将 notebook 安装 在公司可以访问集群 的 机器上,然后 在自己的 mac 上 访问调用 spark 集群资源 。

第一步:生成 默认配置文件

@ 欢迎关注作者公众号 算法全栈之路

jupyter notebook --generate-config ~/.jupyter/jupyter_notebook_config.py

第二步: 生成访问密码(token)

终端输入 ipython,设置你自己的jupyter访问密码,注意复制输出的sha1:xxxxxxxx密码串

@ 欢迎关注作者公众号 算法全栈之路

# ipython 中输入以下命令
from notebook.auth import passwd
passwd()

# 分别输入密码 2次 
# Enter password:
# Verify password:

记得复制 返回的字符串, 下面一步用。

第三步:修改./jupyter/jupyter_notebook_config.py 配置文件

修改 配置文件 中 对应行如下

@ 欢迎关注作者公众号 算法全栈之路

c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8080 #可自行指定一个端口, 访问时使用该端口

第四步: 在服务器上启动jupyter notebook , 然后在远程输入密码访问

notebook 启动命令: jupyter notebook

最后在自己mac上浏览器里输入: http://ip:8080 即可。 这里的ip 是你 公司 可以访问集群 的 那台服务器的ip, 可能需要vpn,根据你实际情况而定。

到这里,你的 服务端notebook 已经安装好了,并且可以 远程 在 自己mac上访问了。


(1.3) pyspark 用 notebook 显示

大家都知道,我们 在公司 里 使用 spark, 无论是 spark-submit 还是 pyspark 命令的 二进制文件 , 均是在 spark安装包的 bin目录 里。通常情况下,我们肯定是 可以在 服务器上执行 spark-submit 或者 pyspark 命令的,这样就保证了我们 spark环境和集群肯定是通着的 ( 如果不能,需要 先将 pyspark在 服务器 上本地 调通可用)。

而 我们 也知道,执行 pyspark 命令之后,默认打开的是 ipython REPL 终端。说到 这里 就明白 了吧,我们只要 替换 ipython 成 我们刚才 已经设定好的 允许访问公司服务器 的 notebook 来 显示 即可!!!而 无需 再去 自己花功夫 将 notebook 和 spark集群 通信进行适配,简直 perfect !!!

替换 pyspark 终端显示 ,仅仅 只 需要 下面 这条命令:

@ 欢迎关注作者公众号 算法全栈之路

PYSPARK_PYTHON=python3.7 PYSPARK_DRIVER_PYTHON=python3.7 PYSPARK_DRIVER_PYTHON_OPTS=“/home/miniconda3/envs/pyspark_env/bin/jupyter notebook --no-browser --port=8080 --profile=sfhzgo”  /home/bigdata_env/spark/bin/pyspark  --spark-version 2.4.5-staging   --queue ad_queue_name   --master yarn   --deploy-mode client   --driver-memory 80g   --driver-cores 2   --executor-memory 8g   --executor-cores 2   --num-executors 30  --conf spark.sql.catalogImplementation=hive   --conf spark.yarn.priority=VERY_HIGH   --conf spark.driver.maxResultSize=200G

命令比较长,中间的 代码 非常好理解 ,注意 替换 你自己机器上 的 配置路径。

其中: PYSPARK_PYTHONPYSPARK_DRIVER_PYTHON 是 你 服务器上 可以 使用pyspark 的时候 的 python版本,而 PYSPARK_DRIVER_PYTHON_OPTS 则是设定 你用自己的 notebook 替换 pyspark 机器 ipython终端显示 的过程,最后面 的 代码 则是 常规的 启动 pyspark 的 过程 了。

如果 在最后这里 没办法 启动成功,首先可以 检查下 你公司服务器上的 pyspark 在 服务器机器上 是否可以 完美运行,大概率出问题也是出自这里 。 毕竟 很多人用 spark 仅仅用 spark-submit 提交scala / java / python 版本的spark 任务, 而 没有尝试过 用 pyspark 这个 二进制命令行 。

其中, 你们 自己公司 pyspark 支持的 python 版本和你服务器上 python版本 是否对齐兼容 ,也是有 隐藏的坑 在里面。多花点儿时间把工具和环境调通吧,回报是非常值得的~

最后,工具搭建成功了,使用起来长这个样子:

一般来说,我们可以使用下面的代码得到界面上的 spark 实例对象:

@ 欢迎关注作者公众号 算法全栈之路

import os
import sys
import findspark
findspark.init()
import os.path as path
import importlib

from pyspark import StorageLevel
from pyspark.sql import SparkSession
from pyspark.sql.types import *
from py4j.protocol import Py4JJavaError
from pyspark.sql import functions as fun
from pyspark.sql.functions import col
from pyspark.sql import HiveContext
from pyspark.sql.functions import *
from pyspark.sql.functions import lit

import warnings 
warnings.filterwarnings("ignore")
# spark config setup
spark = SparkSession.builder.appName("pyspark-app") 
    .config("spark.submit.deployMode", "client")
    .config('spark.yarn.queue', 'idm-prod')
    .config("fs.defaultFS", "hdfs://warehousestore") 
    .config("spark.kryoserializer.buffer.max", "1024m") 
    .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 
    .config("hive.exec.dynamic.partition.mode", "nonstrict") 
    .enableHiveSupport()
    .getOrCreate()

sc = spark.sparkContext
sc.setLogLevel("ERROR")

print("driver_python_path:" + str(os.environ.get("PYSPARK_DRIVER_PYTHON")))
print("worker_python_path:" + str(os.environ.get("PYSPARK_PYTHON")))

最后我们可以在 自己的mac 笔记本上使用 pyspark 连接公司的集群进行数据分析与数据拉取操作,例如 我们可以使用 spark.sql() 方法读取 hive表,或则 读取 hdfs 上 parquet文件,就像下面这样:

我们 也可以 将 spark dataframe 数据拉取到 服务器 driver 上,进行 单机版 的 数据分析与模型训练 。其中 spark dataframe 可以转化为 pandas dataframe , 我们 可以使用 下面的语句 来进行 转化:

pandas_pdf=spark_df.toPandas()

有了 单机版的pandas dataframe , 那 通常 python 能干的,我们都可以干。

当然,我们 也可以将 python 的 dataframe 转成 spark的 dataframe , 使用下面的语句即可:

@ 欢迎关注作者公众号 算法全栈之路

pdf_values=pandas_pdf.values.tolist()
pdf_columns=pandas_pdf.columns.tolist()
selected_feas_result_df = spark.createDataFrame(pdf_values,pdf_columns).persist(StorageLevel.MEMORY_AND_DISK)

按照流程设置完成,则 集群数据 和 单机模型 链路完全打通。 so , 广阔天地,大有作为吧

到这里, notebook远程访问pyspark集群, 算法工具神器重磅推荐 的 全文 就 写完了。这个工具 对于 算法工程师的 算法实验工作成果演示都是 非常有意义 的,可视化 everything,希望 可以 对你 有参考作用 ~


码字不易,觉得有收获就动动小手转载一下吧,你的支持是我写下去的最大动力 ~

更多更全更新内容 : 算法全栈之路

- END -

展开阅读全文

页面更新:2024-04-02

标签:集群   算法   工具   重磅   神器   单机   模型   公众   命令   作者   数据   公司

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top