7

我不知道这是否已经在 SO 中得到解答,但我找不到解决我的问题的方法。

我在 Google Container Engine 的 docker 容器中运行了一个 IPython 笔记本,该容器基于此图像jupyter/all-spark-notebook

我还有一个使用google cloud dataproc创建的 spark 集群

Spark master 和 notebook 在不同的 VM中运行,但在相同的 region 和 zone中。

我的问题是我正在尝试从 IPython 笔记本连接到 spark master,但没有成功。我在我的 python 笔记本中使用了这段代码

import pyspark
conf = pyspark.SparkConf()
conf.setMaster("spark://<spark-master-ip or spark-master-hostname>:7077")

我刚开始使用 spark,所以我确定我遗漏了一些东西(身份验证、安全性......),

我在那里发现的是通过SSH 隧道连接本地浏览器

有人已经做过这种设置了吗?

先感谢您

4

1 回答 1

8

Dataproc在 YARN 上运行 Spark,因此您需要将 master 设置为“yarn-client”。您还需要将 Spark 指向您的 YARN ResourceManager,这需要文档不足的 SparkConf -> Hadoop 配置转换。您还必须告诉 Spark 集群上的 HDFS,以便它可以为 YARN 暂存资源。如果您将适用于 Hadoop 的 Google Cloud Storage 连接器烘焙到映像中,则可以使用 Google Cloud Storage 代替 HDFS 。

尝试:

import pyspark
conf = pyspark.SparkConf()
conf.setMaster('yarn-client')
conf.setAppName('My Jupyter Notebook')

# 'spark.hadoop.foo.bar' sets key 'foo.bar' in the Hadoop Configuaration.
conf.set('spark.hadoop.yarn.resourcemanager.address', '<spark-master-hostname>')
conf.set('spark.hadoop.fs.default.name', 'hdfs://<spark-master-hostname>/')

sc = pyspark.SparkContext(conf=conf)

对于更永久的配置,您可以将它们烘焙到本地文件“core-site.xml”中,如此处所述将其放置在本地目录中,并将 HADOOP_CONF_DIR 设置为您环境中的该目录。

还值得注意的是,虽然位于同一个区域对性能很重要,但它位于同一个网络中并允许该网络中的内部 IP 地址之间的 TCP 允许您的 VM 进行通信。如果您使用的是default网络,那么default-allow-internal 防火墙规则应该就足够了。

希望有帮助。

于 2016-02-25T22:44:53.217 回答