从Python笔记本中将应用程序提交到在GCP中运行的独立spark集群

时间:2018-04-26 17:39:14

标签: python-3.x apache-spark apache-kafka

我正在尝试向我的Python 3笔记本(在本地笔记本电脑上运行)中在GCP中运行的独立spark(2.1.1)集群3 VM提交spark应用程序但由于某种原因,spark会话抛出错误" StandaloneAppClient $ ClientEndpoint:无法连接到主sparkmaster:7077"。

环境详细信息:IPython和Spark Master在一个名为" sparkmaster"的GCP VM中运行。另外3个GCP VM正在运行Spark Slaves和Cassandra Clusters。我使用Chrome从本地笔记本电脑(MBP)连接到GCP VM IPython笔记本电脑" sparkmaster"

请注意终端有效:

bin/spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.1.1 --master spark://sparkmaster:7077 ex.py 1000

从Python Notebook运行它:

import os
os.environ["PYSPARK_SUBMIT_ARGS"] = '--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.1.1 pyspark-shell'

from pyspark.sql import SparkSession
from pyspark.sql.functions import *

spark=SparkSession.builder.master("spark://sparkmaster:7077").appName('somatic').getOrCreate() #This step works if make .master('local')

df = spark \
  .readStream \
  .format("kafka") \
  .option("kafka.bootstrap.servers", "kafka1:9092,kafka2:9092,kafka3:9092") \
  .option("subscribe", "gene") \
  .load()
到目前为止,我已尝试过这些:

  1. 我尝试更改spark主节点spark-defaults.conf和spark-env.sh以添加SPARK_MASTER_IP。

  2. 试图找到STANDALONE_SPARK_MASTER_HOST =主机名-f设置,以便我可以删除" -f"。出于某种原因,我的火花大师ui显示FQDN:7077不是主机名:7077

  3. 将FQDN作为参数传递给.master()和os.environ [" PYSPARK_SUBMIT_ARGS"]

  4. 如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

在做了一些研究后,我能够解决冲突。这是由于一个名为SPARK_HOME的简单环境变量。在我的情况下,它指向Conda的/ bin(pyspark从这个位置运行),而我的火花设置存在于差异中。路径。简单的解决方法是添加 将SPARK_HOME =“/ home /<> / spark /”导出到.bashrc文件(我希望将其附加到我的个人资料而不是火花会话)

我是如何做到的:

步骤1:在我的情况下ssh到主节点它与GCP中的ipython内核/服务器VM相同

第2步:

  • cd~
  • sudo nano .bashrc
  • 向下滚动到最后一行并粘贴以下行
  • 导出SPARK_HOME =“/ home / your / path / to / spark-2.1.1-bin-hadoop2.7 /”
  • ctrlX和Y并输入以保存更改

注意:为了清楚起见,我还在环境部分添加了更多细节。