Jupyter Notebook只能在Spark本地运行。

8

我正在尝试远程使用jupyter-notebook (v4.2.2)在一个spark cluster (v2.0)上,但是当我运行下面的命令时,它并没有在spark上运行,而是在本地运行:

PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser --port=7777" pyspark --master spark://**spark_master_hostname**:7077

当我仅使用相同的--master参数运行pyspark时,该进程可以在Spark集群的"正在运行的应用程序"中正常显示。
pyspark --master spark://**spark_master_hostname**:7077

看起来pyspark似乎没有在前面运行。是不是第一个命令有问题,阻止jupyter在spark集群上运行,或者有更好的在spark集群上运行笔记本的方法?

2个回答

1

看起来你想加载IPython shell,而不是IPython笔记本,并通过命令行使用PySpark?

我认为Jupiter UI是使用笔记本的更便捷方式。

你可以运行jupyter服务器:

jupyter notebook

然后(使用Jupyter UI),开始一个新的Python2内核。在打开的笔记本中,使用指向您的Spark集群的配置创建SparkContext:

from pyspark import SparkContext, SparkConf
conf = SparkConf()
conf.setMaster('spark://**spark_master_hostname**:7077')
conf.setAppName('some-app-name')
sc = SparkContext(conf=conf)

现在您已经在Spark集群上启动了pyspark应用程序,并且可以通过创建的SparkContext与其进行交互。例如:
def mod(x):
    import numpy as np
    return (x, np.mod(x, 2))
rdd = sc.parallelize(range(1000)).map(mod).take(10)
print rdd

上面的代码将在远程计算机上运行。

0
这个问题的解决可能需要隧道技术。我已经为我的公司设置了以下说明。
您可以进行一些环境更改,使pyspark默认使用ipython或jupyter笔记本。
将以下内容放入您的~/.bashrc文件中。
export PYSPARK_PYTHON=python3 ## for python3
export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser --port=7000"

请见:pyspark on GitHub

接下来,运行 source ~/.bashrc

然后,当您启动pyspark --master yarn(带有YARN的Spark)时,它将为您打开一个服务器供您连接。

在具有ssh功能的本地终端上运行

ssh -N -f -L localhost:8000:localhost:7000 <username>@<host>

如果您使用的是Windows系统,我建议使用MobaXtermCygwin

打开一个网页浏览器,输入地址localhost:8000以通过隧道方式访问带有Spark的笔记本电脑。

需要注意的是,我从未尝试过在Python 3上执行此操作,因此如果您的默认版本为Python 3,则可能需要进行其他设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接