如何让 Spark2.3 在 Jupyter Notebook 中工作

Posted

技术标签:

【中文标题】如何让 Spark2.3 在 Jupyter Notebook 中工作【英文标题】:How to get Spark2.3 working in Jupyter Notebook 【发布时间】:2018-10-15 19:04:31 【问题描述】:

我现在正在努力让 Spark2.3 在 Jupyter Notebook 中工作。

目前我创建的内核如下:

    创建环境文件:
$ cat rxie20181012-pyspark.yml

name: rxie20181012-pyspark

dependencies:

- pyspark
    根据环境文件创建环境

conda env create -f rxie20181012-pyspark.yml

    激活新环境:

源码激活 rxie20181012-pyspark

    基于 conda env 创建内核:

sudo ./python -m ipykernel install --name rxie20181012-pyspark --display-name "Python (rxie20181012-pyspark)"

    kernel.json 如下:

cat /usr/local/share/jupyter/kernels/rxie20181012-pyspark/kernel.json

"display_name": "Python (rxie20181012-pyspark)",

“语言”:“python”,

“argv”:[

"/opt/cloudera/parcels/Anaconda-4.2.0/bin/python",

"-m",

"ipykernel",

“-f”,

“connection_file”

]

    在注意到笔记本导入 pyspark 失败后,我在 kernel.json 中添加了如下 env 部分:


 "display_name": "Python (rxie20181012-pyspark)",

 "language": "python",

 "argv": [

  "/opt/cloudera/parcels/Anaconda-4.2.0/bin/python",

  "-m",

  "ipykernel",

  "-f",

  "connection_file"

 ],

 "env": 

  "HADOOP_CONF_DIR": "/etc/spark2/conf/yarn-conf",

  "PYSPARK_PYTHON":"/opt/cloudera/parcels/Anaconda/bin/python",

  "SPARK_HOME": "/opt/cloudera/parcels/SPARK2",

  "PYTHONPATH": "/opt/cloudera/parcels/SPARK2/lib/spark2/python/lib/py4j-0.10.7-src.zip:/opt/cloudera/parcels/SPARK2/lib/spark2/python/",

  "PYTHONSTARTUP": "/opt/cloudera/parcels/SPARK2/lib/spark2/python/pyspark/shell.py",

  "PYSPARK_SUBMIT_ARGS": " --master yarn --deploy-mode client pyspark-shell"

 


现在 import pyspark 不再出错,但仍然无法启动 sparksession:

import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('abc').getOrCreate()

OSErrorTraceback(最后一次调用) 在 () ----> 1 spark = SparkSession.builder.appName('abc').getOrCreate()

/opt/cloudera/parcels/SPARK2/lib/spark2/python/pyspark/sql/session.pyc 在 getOrCreate(self) 171 为 key,self._options.items() 中的值: 第172章 --> 173 sc = SparkContext.getOrCreate(sparkConf) 174 # 这个 SparkContext 可能是现有的。 175 for key, value in self._options.items():

/opt/cloudera/parcels/SPARK2/lib/spark2/python/pyspark/context.pyc 获取或创建(cls,conf) 341 与 SparkContext._lock: 342 如果 SparkContext._active_spark_context 为无: --> 343 SparkContext(conf=conf 或 SparkConf()) 第344章 345

/opt/cloudera/parcels/SPARK2/lib/spark2/python/pyspark/context.pyc init(self、master、appName、sparkHome、pyFiles、环境、batchSize、序列化程序、conf、网关、jsc、profiler_cls) 113 """ 114 self._callsite = first_spark_call() 或 CallSite(无,无,无) --> 115 SparkContext._ensure_initialized(self, gateway=gateway, conf=conf) 116 尝试: 117 self._do_init(master,appName,sparkHome,pyFiles,环境,batchSize,序列化器,

/opt/cloudera/parcels/SPARK2/lib/spark2/python/pyspark/context.pyc _ensure_initialized(cls,实例,网关,conf) 290 与 SparkContext._lock: 291 如果不是 SparkContext._gateway: --> 292 SparkContext._gateway = 网关或launch_gateway(conf) 第293章 294

/opt/cloudera/parcels/SPARK2/lib/spark2/python/pyspark/java_gateway.pyc 在启动网关(conf) 81 定义预执行函数(): 82 信号.信号(信号.SIGINT,信号.SIG_IGN) ---> 83 proc = Popen(命令,stdin=PIPE,preexec_fn=preexec_func,env=env) 84 其他: 85 # preexec_fn 在 Windows 上不支持

/opt/cloudera/parcels/Anaconda/lib/python2.7/subprocess.pyc 在 init(self、args、bufsize、可执行文件、stdin、stdout、stderr、preexec_fn、close_fds、shell、cwd、env、universal_newlines、 启动信息,创建标志) 第709章 第710章 --> 711 errread, errwrite) 712 例外: 713 # 保留原始异常以防 os.close 引发。

/opt/cloudera/parcels/Anaconda/lib/python2.7/subprocess.pyc 在 _execute_child(self,args,可执行文件,preexec_fn,close_fds,cwd,env,universal_newlines,startupinfo,creationflags,shell,to_close, p2cread、p2cwrite、c2pread、c2pwrite、errread、errwrite)1341 提高 1342 child_exception = pickle.loads(数据) -> 1343 提高 child_exception 1344 1345

OSError: [Errno 2] 没有这样的文件或目录

谁能帮我解决一下?衷心感谢您。

【问题讨论】:

【参考方案1】:

已确定根本原因并开始工作:

“SPARK_HOME”:“/opt/cloudera/parcels/SPARK2”

应替换为:

“SPARK_HOME”:“/opt/cloudera/parcels/SPARK2/lib/spark2”

【讨论】:

以上是关于如何让 Spark2.3 在 Jupyter Notebook 中工作的主要内容,如果未能解决你的问题,请参考以下文章

“PythonAccumulatorV2 不存在” - 在 Jupyter Notebook 中运行 SparkContext() 时

服务器后台挂起jupyter

如何禁用jupyter笔记本历史记录

如何让 ipywidgets 在 Jupyter Lab 中工作?

如何在从 docker 容器运行的 jupyter 笔记本中获取黑色代码格式?

如何让 Jupyter Notebook 自动导入代码?