Может ли ядро ​​PySpark (JupyterHub) работать в режиме клиента пряжи?

Моя текущая настройка:

  • Кластер Spark EC2 с HDFS и пряжей
  • JuputerHub (0.7.0)
  • PySpark Kernel с python27

Очень простой код, который я использую для этого вопроса:

rdd = sc.parallelize([1, 2])
rdd.collect()

Ядро PySpark, которое работает как положено в автономной версии Spark, имеет следующую переменную среды в файле json ядра:

"PYSPARK_SUBMIT_ARGS": "--master spark://<spark_master>:7077 pyspark-shell"

Однако, когда я пытаюсь работать в режиме клиента пряжи, он застревает навсегда, в то время как вывод журнала из журналов JupyerHub:

16/12/12 16:45:21 WARN YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
16/12/12 16:45:36 WARN YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
16/12/12 16:45:51 WARN YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
16/12/12 16:46:06 WARN YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

Как описано здесь, я добавил HADOOP_CONF_DIR env. переменная, указывающая на каталог, в котором находятся конфигурации Hadoop, и измененная PYSPARK_SUBMIT_ARGS --master собственность "пряжа-клиент". Также я могу подтвердить, что во время этого не выполняется никаких других рабочих мест и что рабочие правильно зарегистрированы.

У меня сложилось впечатление, что можно настроить JupyterHub Notebook с ядром PySpark для работы с YARN, как это сделали другие люди, если это действительно так, то, что я делаю неправильно?

2 ответа

Чтобы ваш pyspark работал в режиме пряжи, вам необходимо выполнить несколько дополнительных настроек:

  1. Настройте пряжу для удаленного соединения пряжи, скопировав hadoop-yarn-server-web-proxy-<version>.jar вашего кластера пряжи в <local hadoop directory>/hadoop-<version>/share/hadoop/yarn/ вашего экземпляра Jupyter (вам нужен локальный Hadoop)

  2. Скопируйте hive-site.xml вашего кластера в <local spark directory>/spark-<version>/conf/

  3. Скопируйте yarn-site.xml вашего кластера в <local hadoop directory>/hadoop-<version>/hadoop-<version>/etc/hadoop/

  4. Установите переменные среды:

    • export HADOOP_HOME=<local hadoop directory>/hadoop-<version>
    • export SPARK_HOME=<local spark directory>/spark-<version>
    • export HADOOP_CONF_DIR=<local hadoop directory>/hadoop-<version>/etc/hadoop
    • export YARN_CONF_DIR=<local hadoop directory>/hadoop-<version>/etc/hadoop
  5. Теперь вы можете создать свое ядро vim /usr/local/share/jupyter/kernels/pyspark/kernel.json { "display_name": "pySpark (Spark 2.1.0)", "language": "python", "argv": [ "/opt/conda/envs/python35/bin/python", "-m", "ipykernel", "-f", "{connection_file}" ], "env": { "PYSPARK_PYTHON": "/opt/conda/envs/python35/bin/python", "SPARK_HOME": "/opt/mapr/spark/spark-2.1.0", "PYTHONPATH": "/opt/mapr/spark/spark-2.1.0/python/lib/py4j-0.10.4-src.zip:/opt/mapr/spark/spark-2.1.0/python/", "PYTHONSTARTUP": "/opt/mapr/spark/spark-2.1.0/python/pyspark/shell.py", "PYSPARK_SUBMIT_ARGS": "--master yarn pyspark-shell" } }

  6. Перезапустите свой Jupyterhub, вы должны увидеть Pyspark. У пользователя root обычно нет прав доступа из-за uid=1. Вы должны подключиться к jupyterhub с другим пользователем

Я надеюсь, что мое дело может помочь вам.

Я настраиваю URL, просто передавая параметр:

import findspark
findspark.init()
from pyspark import SparkContext
sc = SparkContext("yarn-clinet", "First App")
Другие вопросы по тегам