WedX - журнал о программировании и компьютерных науках

Ошибка JAVA_HOME при обновлении до Spark 1.3.0

Я пытаюсь обновить проект Spark, написанный на Scala, с Spark 1.2.1 до 1.3.0, поэтому я изменил свой build.sbt следующим образом:

-libraryDependencies += "org.apache.spark" %% "spark-core" % "1.2.1" % "provided"
+libraryDependencies += "org.apache.spark" %% "spark-core" % "1.3.0" % "provided"

затем создайте банку assembly и отправьте ее:

HADOOP_CONF_DIR=/etc/hadoop/conf \
    spark-submit \
    --driver-class-path=/etc/hbase/conf \
    --conf spark.hadoop.validateOutputSpecs=false \
    --conf spark.yarn.jar=hdfs:/apps/local/spark-assembly-1.3.0-hadoop2.4.0.jar \
    --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
    --deploy-mode=cluster \
    --master=yarn \
    --class=TestObject \
    --num-executors=54 \
    target/scala-2.11/myapp-assembly-1.2.jar

Задание не отправляется, со следующим исключением в терминале:

15/03/19 10:30:07 INFO yarn.Client: 
15/03/19 10:20:03 INFO yarn.Client: 
     client token: N/A
     diagnostics: Application application_1420225286501_4698 failed 2 times due to AM 
     Container for appattempt_1420225286501_4698_000002 exited with  exitCode: 127 
     due to: Exception from container-launch: 
org.apache.hadoop.util.Shell$ExitCodeException: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:464)
    at org.apache.hadoop.util.Shell.run(Shell.java:379)
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

Наконец, я иду и проверяю веб-интерфейс мастера приложения YARN (поскольку задание есть, я знаю, что оно, по крайней мере, зашло так далеко), и единственные журналы, которые он показывает, это:

    Log Type: stderr
    Log Length: 61
    /bin/bash: {{JAVA_HOME}}/bin/java: No such file or directory

    Log Type: stdout
    Log Length: 0

Я не уверен, как это интерпретировать — является ли {{JAVA_HOME}} литералом (включая скобки), который каким-то образом превращается в сценарий? Это исходит от рабочих узлов или драйвера? Что я могу сделать, чтобы поэкспериментировать и устранить неполадки?

У меня есть JAVA_HOME в конфигурационных файлах Hadoop на всех узлах кластера:

% grep JAVA_HOME /etc/hadoop/conf/*.sh
/etc/hadoop/conf/hadoop-env.sh:export JAVA_HOME=/usr/jdk64/jdk1.6.0_31
/etc/hadoop/conf/yarn-env.sh:export JAVA_HOME=/usr/jdk64/jdk1.6.0_31

Изменилось ли это поведение в версии 1.3.0 по сравнению с версией 1.2.1? Используя 1.2.1 и не внося других изменений, задание завершается нормально.

[Примечание: изначально я разместил это в списке рассылки Spark, я обновлю оба места, если/когда найду решение.]


  • Вы должны установить системную переменную с именем JAVA_HOME. 20.03.2015
  • У меня установлен JAVA_HOME, но, возможно, не в том месте - я собирался отредактировать вопрос с моим продолжением из списка рассылки. знак равно 20.03.2015
  • проверьте права доступа к каталогу/файлу вашего JAVA_HOME 20.03.2015
  • Разрешения широко открыты как для файлов конфигурации, так и для /usr/jdk64/jdk1.6.0_31. И они постоянны между тем, когда я запускаю его под Spark 1.2.1 и 1.3.0. 20.03.2015
  • Еще одна деталь: если я соберу сборку с помощью 1.2.1 и использую сборку Spark 1.2.1 на сервере, но отправлю с использованием spark-submit Spark 1.3.0, ошибка все равно произойдет. Очевидно, что это не рекомендуемая конфигурация, но, возможно, она сужает ее до сценария spark-submit? 24.03.2015
  • Вы сталкиваетесь с этой проблемой только тогда, когда запускаете только приложение Spark? Как насчет приложений mapreduce? 21.08.2015
  • @h4ck3r - только для Spark, да и то только для версий выше 1.2.1. 21.08.2015
  • @KenWilliams Привет. Не могли бы вы попробовать просмотреть журнал через yarn logs -applicationId id_of_the_application и, возможно, опубликовать его здесь? 26.08.2015

Ответы:


1

Вы пытались установить JAVA_HOME в файле etc/hadoop/yarn-env.sh? Возможно, ваша переменная среды JAVA_HOME недоступна для контейнеров YARN, в которых выполняется ваше задание.

Раньше со мной случалось, что некоторые переменные env, которые были в .bashrc на узлах, не читались рабочими пряжи, созданными в кластере.

Есть вероятность, что ошибка не связана с обновлением версии, а связана с конфигурацией среды YARN.

26.08.2015

2

Итак, я поручил другим людям в офисе помочь с этим, и мы нашли решение. Я не уверен, насколько это относится к макетам файлов Hortonworks HDP 2.0.6 в CentOS, которые мы используем в нашем кластере.

Мы вручную копируем некоторые каталоги с одной из машин кластера (или любой машины, которая может успешно использовать клиент Hadoop) на вашу локальную машину. Назовем эту машину $GOOD.

Настройте конфигурационные файлы Hadoop:

cd /etc
sudo mkdir hbase hadoop
sudo scp -r $GOOD:/etc/hbase/conf hbase
sudo scp -r $GOOD:/etc/hadoop/conf hadoop

Настройте библиотеки и исполняемые файлы Hadoop:

mkdir ~/my-hadoop
scp -r $GOOD:/usr/lib/hadoop\* ~/my-hadoop
cd /usr/lib
sudo ln –s ~/my-hadoop/* .
path+=(/usr/lib/hadoop*/bin)  # Add to $PATH (this syntax is for zsh)

Настройте библиотеки и исполняемые файлы Spark:

cd ~/Downloads
wget https://apache.mirrors.lucidnetworks.net/spark/spark-1.4.1/spark-1.4.1-bin-without-hadoop.tgz
tar -zxvf spark-1.4.1-bin-without-hadoop.tgz
cd spark-1.4.1-bin-without-hadoop
path+=(`pwd`/bin)
hdfs dfs -copyFromLocal lib/spark-assembly-*.jar /apps/local/

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

export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
export HADOOP_CONF_DIR=/etc/hadoop/conf
export SPARK_DIST_CLASSPATH=$(hadoop --config $HADOOP_CONF_DIR classpath)
`grep 'export HADOOP_LIBEXEC_DIR' $HADOOP_CONF_DIR/yarn-env.sh`
export SPOPTS="--driver-java-options=-Dorg.xerial.snappy.lib.name=libsnappyjava.jnilib"
export SPOPTS="$SPOPTS --conf spark.yarn.jar=hdfs:/apps/local/spark-assembly-1.4.1-hadoop2.2.0.jar"

Теперь различные искровые оболочки можно запускать так:

sparkR --master yarn $SPOPTS
spark-shell --master yarn $SPOPTS
pyspark --master yarn $SPOPTS

Некоторые замечания:

  • Параметр JAVA_HOME такой же, как у меня все это время — просто включил его здесь для завершения. Все внимание к JAVA_HOME оказалось отвлекающим маневром.
  • --driver-java-options=-Dorg.xerial.snappy.lib.name=libsnappyjava.jnilib был необходим, потому что я получал ошибки о java.lang.UnsatisfiedLinkError: no snappyjava in java.library.path. Файл jnilib является правильным выбором для OS X.
  • Часть --conf spark.yarn.jar предназначена только для экономии времени, избегая повторного копирования файла сборки в кластер каждый раз, когда вы запускаете оболочку или отправляете задание.
27.08.2015

3

Что ж, для начала я бы порекомендовал вам перейти на Java 7. Однако это не то, что вы ищете или с чем вам нужна помощь.

Для настройки JAVA_HOME я бы рекомендовал вам установить ее в вашем bashrc, а не в нескольких файлах. Более того, я бы порекомендовал вам установить java с альтернативой /usr/bin.

21.08.2015
  • Обратите внимание, что эта ошибка возникает на машинах кластера, а не на моей локальной машине, поэтому нет файла rc для ее установки. Система альтернатив уже используется на машинах кластера. 21.08.2015
  • Вы пытались установить JAVA_HOME в bashrc машин кластера? Это все еще дает вам ту же ошибку? 24.08.2015
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]