Отправьте приложение в автономный кластер искр, работающий в GCP, из записной книжки Python. - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь отправить приложение spark на отдельную виртуальную машину кластера spark (2.1.1), работающую в GCP, с моего ноутбука Python 3 (запущенного на локальном ноутбуке), но по какой-то причине сеанс spark вызывает ошибку "StandaloneAppClient $ ClientEndpoint : Не удалось подключиться к главному искровому мастеру 7077 ".

Подробности среды: IPython и Spark Master работают в одной виртуальной машине GCP, которая называется «sparkmaster». На 3 дополнительных виртуальных машинах GCP работают Spark Slaves и Cassandra Clusters. Я подключаюсь с локального ноутбука (MBP), используя Chrome, к ноутбуку 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 = hostname -f, чтобы я мог удалить "-f". По какой-то причине пользовательский интерфейс spark master показывает полное доменное имя: 7077, а не имя хоста: 7077

  3. передал FQDN в качестве параметра для .master () и os.environ ["PYSPARK_SUBMIT_ARGS"]

Пожалуйста, дайте мне знать, если вам нужно больше деталей.

1 Ответ

0 голосов
/ 28 апреля 2018

После еще нескольких исследований я смог разрешить конфликт. Это произошло из-за простой переменной среды под названием SPARK_HOME. В моем случае это указывало на Conda's / bin (pyspark бежал из этого места), тогда как мои настройки искры присутствовали в diff. дорожка. Простое исправление было добавить экспорт SPARK_HOME = "/ home / <> / spark /" в файл .bashrc (я хочу, чтобы это было прикреплено к моему профилю, а не к сеансу spark)

Как я это сделал:

Шаг 1: ssh на главный узел в моем случае он был таким же, как виртуальная машина ядра / сервера ipython в GCP

Шаг 2:

  • кд ~
  • sudo nano .bashrc
  • прокрутите вниз до последней строки и вставьте нижнюю строку
  • export SPARK_HOME = "/ home / your / path / to / spark-2.1.1-bin-hadoop2.7 /"
  • ctrlX и Y и введите, чтобы сохранить изменения

Примечание. Для ясности я добавил еще несколько подробностей в раздел об окружающей среде.

...