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远程访问pyspark集群, 算法工具神器重磅推荐

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

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

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版别 是否对齐兼容 ,也是有 躲藏的坑 在里面。多花点儿时间把东西和环境调通吧,回报是十分值得的~

最终,东西搭建成功了,运用起来长这个姿态:

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

一般来说,咱们能够运用下面的代码得到界面上的 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文件,就像下面这样:

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

咱们 也能够 将 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,希望 能够 对你 有参阅效果 ~


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

更多更全更新内容,欢迎重视作者的大众号: 算法全栈之路

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