Livy Не найдено приложение YARN с тегом livy-batch-10-hg3po7kp за 120 секунд - PullRequest
0 голосов
/ 28 ноября 2018

Использование Livy для выполнения скрипта, хранящегося в S3, через запрос POST, запущенный из EMR.Сценарий выполняется, но он очень быстро отключается.Я пытался редактировать конфигурации livy.conf, но ни одно из изменений не сохранилось.Это возвращаемая ошибка:

java.lang.Exception: не найдено приложение YARN с тегом livy-batch-10-hg3po7kp в течение 120 секунд.Пожалуйста, проверьте статус вашего кластера, он может быть очень занят.org.apache.livy.utils.SparkYarnApp.org $ apache $ livy $ utils $ SparkYarnApp $$ getAppIdFromTag (SparkYarnApp.scala: 182) org.apache.livy.utils.SparkYarnApp $$ anonfun $ 1 $$ anonppun $ ($ 4).scala: 239) org.apache.livy.utils.SparkYarnApp $$ anonfun $ 1 $$ anonfun $ 4.apply (SparkYarnApp.scala: 236) scala.Option.getOrElse (Option.scala: 121) org.apache.livy.utils.SparkYarnApp $$ anonfun $ 1.apply $ mcV $ sp (SparkYarnApp.scala: 236) org.apache.livy.Utils $$ anon $ 1.run (Utils.scala: 94)

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Решение состоит в том, что вы должны проверить код в SparkUtil.scala.

Конфигурация GetOrCreate должна быть активной.Если нет, то Ливий не может проверить и закрыть соединение Yarn.

И пример:

val spark = SparkSession.builder().appName(appName).getOrCreate()

И также в моем случае я прокомментировал несколько строк, и это былопроблема.

enter image description here

0 голосов
/ 05 января 2019

Это была непростая задача, но я смог заставить ее работать с этой командой:

curl -X POST --data '{"proxyUser": "hadoop","file": "s3://MYBUCKETLOCATION/recurring_job_automation/sample-pyspark-app/hello.py", "jars": ["s3://MYBUCKETLOCATION/recurring_job_automation/sample-pyspark-app/NQjc.jar"], "pyFiles": ["s3://MYBUCKETLOCATION/recurring_job_automation/sample-pyspark-app/application.zip"], "archives": ["s3://MYBUCKETLOCATION/recurring_job_automation/sample-pyspark-app/venv.zip#venv"], "driverMemory": "10g", "executorMemory": "10g", "name": "Name of Import Job here", "conf":{
"spark.yarn.appMasterEnv.SPARK_HOME": "/usr/lib/spark",
"spark.yarn.appMasterEnv.PYSPARK_PYTHON": "./venv/bin/python",
"livy.spark.yarn.appMasterEnv.PYSPARK_PYTHON": "./venv/bin/python",
"spark.yarn.executorEnv.PYSPARK_PYTHON": "./venv/bin/python",
"spark.pyspark.virtualenv.enabled": "true",
"spark.pyspark.virtualenv.type": "native",
"spark.pyspark.virtualenv.requirements":"requirements.pip",
"spark.pyspark.virtualenv.bin.path": "virtualenv",
"spark.master": "yarn",
"spark.submit.deployMode": "cluster"}}' -H "Content-Type: application/json" http://MY-PATH--TO-MY--EMRCLUSTER:8998/batches

после запуска этого сценария на главном узле кластера EMR для настройки моих зависимостей после того, как я клонировалхранилище, содержащее файлы приложения:

set -e
set -x

export HADOOP_CONF_DIR="/etc/hadoop/conf"
export PYTHON="/usr/bin/python3"
export SPARK_HOME="/usr/lib/spark"
export PATH="$SPARK_HOME/bin:$PATH"


# Set $PYTHON to the Python executable you want to create
# your virtual environment with. It could just be something
# like `python3`, if that's already on your $PATH, or it could
# be a /fully/qualified/path/to/python.
test -n "$PYTHON"

# Make sure $SPARK_HOME is on your $PATH so that `spark-submit`
# runs from the correct location.
test -n "$SPARK_HOME"

"$PYTHON" -m venv venv --copies
source venv/bin/activate
pip install -U pip
pip install -r requirements.pip
deactivate

# Here we package up an isolated environment that we'll ship to YARN.
# The awkward zip invocation for venv just creates nicer relative
# paths.
pushd venv/
zip -rq ../venv.zip *
popd

# Here it's important that application/ be zipped in this way so that
# Python knows how to load the module inside.
zip -rq application.zip application/

в соответствии с инструкциями, которые я предоставил здесь: Объединение пакетов Python3 для PySpark приводит к отсутствию импорта

Если вы столкнетесь с какими-либо проблемамиполезно проверить журналы Livy здесь:

/var/log/livy/livy-livy-server.out

, а также журналы, которые отображаются в пользовательском интерфейсе Hadoop Resource Manager, к которым можно получить доступ по ссылке в консоли EMR после туннелированияв главный узел EMR и настройте прокси-сервер веб-браузера.

Одним из ключевых аспектов этого решения является то, что Livy не может загружать файлы с локального главного узла, если они предоставляются через файл, jars, pyFiles или архивы.параметры из-за проблемы, упомянутой здесь: https://issues.apache.org/jira/browse/LIVY-222

Итак, я смог обойти эту проблему, ссылаясь на файлы, которыеЯ загрузил на S3, используя EMRFS.Кроме того, с помощью virtualenv (если вы используете PySpark) очень важно использовать параметр --copies, иначе вы получите символические ссылки, которые нельзя использовать из HDFS.

Есть также проблемы сиспользуя virtualenv, о котором сообщалось здесь: https://issues.apache.org/jira/browse/SPARK-13587, которые связаны с PySpark (что может не относиться к вам), поэтому мне нужно было обойти их, добавив дополнительные параметры.Некоторые из них также упоминаются здесь: https://community.hortonworks.com/articles/104947/using-virtualenv-with-pyspark.html

Независимо от того, из-за проблем с Livy возникли проблемы с загрузкой локальных файлов, пока я не обошел проблему, ссылаясь на файлы из S3 через EMRFS, Livy не получитсяпотому что не удалось загрузить файлы в промежуточный каталог.Кроме того, когда я попытался предоставить абсолютные пути в HDFS вместо использования S3, поскольку ресурсы HDFS принадлежали пользователю hadoop, а не пользователю livy, livy не смог получить к ним доступ и скопировать их в промежуточный каталог для выполнения задания.Таким образом, ссылки на файлы из S3 через EMRFS были необходимы.

...