Может ли ядро 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 работал в режиме пряжи, вам необходимо выполнить несколько дополнительных настроек:
Настройте пряжу для удаленного соединения пряжи, скопировав
hadoop-yarn-server-web-proxy-<version>.jar
вашего кластера пряжи в<local hadoop directory>/hadoop-<version>/share/hadoop/yarn/
вашего экземпляра Jupyter (вам нужен локальный Hadoop)Скопируйте
hive-site.xml
вашего кластера в<local spark directory>/spark-<version>/conf/
Скопируйте
yarn-site.xml
вашего кластера в<local hadoop directory>/hadoop-<version>/hadoop-<version>/etc/hadoop/
Установите переменные среды:
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
Теперь вы можете создать свое ядро
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" } }
Перезапустите свой Jupyterhub, вы должны увидеть Pyspark. У пользователя root обычно нет прав доступа из-за uid=1. Вы должны подключиться к jupyterhub с другим пользователем
Я надеюсь, что мое дело может помочь вам.
Я настраиваю URL, просто передавая параметр:
import findspark
findspark.init()
from pyspark import SparkContext
sc = SparkContext("yarn-clinet", "First App")