如何让 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() 时
如何让 ipywidgets 在 Jupyter Lab 中工作?