Подтвердить что ты не робот

Как запустить программу Spark Java

Я написал программу на Java для Spark. Но как запустить и скомпилировать его из командной строки Unix. Должен ли я включать какие-либо банки во время компиляции для запуска

4b9b3361

Ответ 1

Объединяя шаги из официального Краткое руководство и Запуск Spark on YARN, мы получаем:

Хорошо создайте очень простое приложение Spark, SimpleApp.java:

/*** SimpleApp.java ***/
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.Function;

public class SimpleApp {
  public static void main(String[] args) {
    String logFile = "$YOUR_SPARK_HOME/README.md"; // Should be some file on your system
    JavaSparkContext sc = new JavaSparkContext("local", "Simple App",
      "$YOUR_SPARK_HOME", new String[]{"target/simple-project-1.0.jar"});
    JavaRDD<String> logData = sc.textFile(logFile).cache();

    long numAs = logData.filter(new Function<String, Boolean>() {
      public Boolean call(String s) { return s.contains("a"); }
    }).count();

    long numBs = logData.filter(new Function<String, Boolean>() {
      public Boolean call(String s) { return s.contains("b"); }
    }).count();

    System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
  }
}

Эта программа просто подсчитывает количество строк, содержащих "a" и число, содержащее "b" в текстовом файле. Обратите внимание, что вам нужно заменить $YOUR_SPARK_HOME на место, где установлен Spark. Как и в примере Scala, мы инициализируем SparkContext, хотя мы используем специальный класс JavaSparkContext для получения Java-дружественного. Мы также создаем RDD (представленные JavaRDD) и запускаем на них преобразования. Наконец, мы передаем функции Spark, создавая классы, расширяющие функцию spark.api.java.function.Function. Руководство по программированию на Java описывает эти различия более подробно.

Чтобы создать программу, мы также напишем файл Maven pom.xml, в котором Spark рассматривается как зависимость. Обратите внимание, что артефакты Spark помечены тегом Scala.

<project>
  <groupId>edu.berkeley</groupId>
  <artifactId>simple-project</artifactId>
  <modelVersion>4.0.0</modelVersion>
  <name>Simple Project</name>
  <packaging>jar</packaging>
  <version>1.0</version>
  <repositories>
    <repository>
      <id>Akka repository</id>
      <url>http://repo.akka.io/releases</url>
    </repository>
  </repositories>
  <dependencies>
    <dependency> <!-- Spark dependency -->
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.10</artifactId>
      <version>0.9.0-incubating</version>
    </dependency>
  </dependencies>
</project>

Если вы также хотите прочитать данные из Hadoops HDFS, вам также нужно будет добавить зависимость от hadoop-клиента для вашей версии HDFS:

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-client</artifactId>
  <version>...</version>
</dependency>

Мы выкладываем эти файлы в соответствии с канонической структурой каталога Maven:

$ find .
./pom.xml
./src
./src/main
./src/main/java
./src/main/java/SimpleApp.java

Теперь мы можем выполнить приложение, используя Maven:

$ mvn package
$ mvn exec:java -Dexec.mainClass="SimpleApp"
...
Lines with a: 46, Lines with b: 23

Затем выполните шаги Запуск Spark on YARN:

Создание сборки JARN с поддержкой JAR

Нам нужен объединенный Spark JAR (который связывает все необходимые зависимости) для запуска заданий Spark в кластере YARN. Это можно построить, установив переменную среды Hadoop и SPARK_YARN следующим образом:

SPARK_HADOOP_VERSION=2.0.5-alpha SPARK_YARN=true sbt/sbt assembly

Собранный JAR будет примерно таким:./assembly/target/ scala-2.10/spark-assembly_0.9.0-incubating-hadoop2.0.5.jar.

Процесс сборки теперь также поддерживает новые версии YARN (2.2.x). См. Ниже.

Препараты

  • Создание сборки с поддержкой YARN (см. выше).
  • Собранная банка может быть установлена ​​в HDFS или использоваться локально.
  • Код приложения должен быть упакован в отдельный файл JAR.

Если вы хотите проверить режим развертывания YARN, вы можете использовать текущие примеры Spark. Искупительный пример_2.10-0.9.0-инкубационный файл может быть сгенерирован при запуске:

sbt/sbt assembly 

ПРИМЕЧАНИЕ:, так как документация, которую вы читаете, предназначена для инкубации Spark версии 0.9.0, мы предполагаем, что вы загрузили Spark 0.9.0-инкубацию или проверили ее вне контроля источника. Если вы используете другую версию Spark, номера версий в банке, сгенерированные командой пакета sbt, очевидно, будут разными.

Конфигурация

Большинство конфигураций одинаковы для Spark на YARN, как и другие развертывания. Дополнительную информацию об этом см. на странице "Конфигурация". Это конфиги, специфичные для SPARK в YARN.

Переменные окружения:

  • SPARK_YARN_USER_ENV, чтобы добавить переменные среды в процессы Spark, запущенные в YARN. Это может быть список переменных окружения, разделенных запятыми, например
SPARK_YARN_USER_ENV="JAVA_HOME=/jdk64,FOO=bar"

Свойства системы:

  • spark.yarn.applicationMaster.waitTries, свойство, чтобы установить количество раз, когда ApplicationMaster ждет начальника искры, а затем количество попыток, которое ожидает, что контекст искры должен быть инициализирован. По умолчанию 10.
  • spark.yarn.submit.file.replication, уровень репликации HDFS для файлов, загруженных в HDFS для приложения. К ним относятся такие вещи, как искровая банка, банкомат приложения и любые файлы/архивы распределенных кешей.
  • spark.yarn.preserve.staging.files, установите значение true, чтобы сохранить поэтапные файлы (искровую банку, приложение jar, файлы распределенного кэша) в конце задания, а затем удалить их.
  • spark.yarn.scheduler.heartbeat.interval-ms, интервал в мс, в котором мастер приложения Spark запускается в YARN ResourceManager. Значение по умолчанию - 5 секунд.
  • spark.yarn.max.worker.failures, максимальное число отказов рабочих перед сбоем приложения. Значение по умолчанию - количество запрошенных рабочих времен 2 с минимум 3.

Запуск Spark на YARN

Убедитесь, что HADOOP_CONF_DIR или YARN_CONF_DIRуказывает на каталог, содержащий файлы конфигурации (клиентской стороны) для кластера hadoop. Это будет использоваться для подключения к кластеру, записи в dfs и отправки заданий диспетчеру ресурсов.

Существует два режима планировщика, которые можно использовать для запуска искрового приложения в YARN.

Запустить искровое приложение клиентом YARN с автономным режимом пряжи.

Команда запуска клиента YARN выглядит следующим образом:

SPARK_JAR=<SPARK_ASSEMBLY_JAR_FILE> ./bin/spark-class org.apache.spark.deploy.yarn.Client \
  --jar <YOUR_APP_JAR_FILE> \
  --class <APP_MAIN_CLASS> \
  --args <APP_MAIN_ARGUMENTS> \
  --num-workers <NUMBER_OF_WORKER_MACHINES> \
  --master-class <ApplicationMaster_CLASS>
  --master-memory <MEMORY_FOR_MASTER> \
  --worker-memory <MEMORY_PER_WORKER> \
  --worker-cores <CORES_PER_WORKER> \
  --name <application_name> \
  --queue <queue_name> \
  --addJars <any_local_files_used_in_SparkContext.addJar> \
  --files <files_for_distributed_cache> \
  --archives <archives_for_distributed_cache>

Например:

# Build the Spark assembly JAR and the Spark examples JAR
$ SPARK_HADOOP_VERSION=2.0.5-alpha SPARK_YARN=true sbt/sbt assembly

# Configure logging
$ cp conf/log4j.properties.template conf/log4j.properties

# Submit Spark ApplicationMaster to YARN ResourceManager, and instruct Spark to run the SparkPi example
$ SPARK_JAR=./assembly/target/scala-2.10/spark-assembly-0.9.0-incubating-hadoop2.0.5-alpha.jar \
    ./bin/spark-class org.apache.spark.deploy.yarn.Client \
      --jar examples/target/scala-2.10/spark-examples-assembly-0.9.0-incubating.jar \
      --class org.apache.spark.examples.SparkPi \
      --args yarn-standalone \
      --num-workers 3 \
      --master-memory 4g \
      --worker-memory 2g \
      --worker-cores 1

# Examine the output (replace $YARN_APP_ID in the following with the "application identifier" output by the previous command)
# (Note: YARN_APP_LOGS_DIR is usually /tmp/logs or $HADOOP_HOME/logs/userlogs depending on the Hadoop version.)
$ cat $YARN_APP_LOGS_DIR/$YARN_APP_ID/container*_000001/stdout
Pi is roughly 3.13794

Вышеупомянутые программы запускают клиентские программы YARN, которые запускают Мастер приложений по умолчанию. Затем SparkPi будет запущен как дочерний поток Application Master, клиент YARN будет периодически обследовать Мастер приложений для получения обновлений статуса и отображает их на консоли. Клиент завершит работу после завершения работы вашего приложения.

В этом режиме ваше приложение фактически запускается на удаленном компьютере, на котором запущен Мастер приложений. Таким образом, приложение, которое включает локальное взаимодействие, не будет работать хорошо, например. искровая оболочка.

Ответ 2

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

  • Загрузите sbt и распакуйте и распакуйте его : http://www.scala-sbt.org/download.html
  • Я загрузил пакет Spark Prebuild для Hadoop 2, распаковал и разогнал его: http://www.apache.org/dyn/closer.cgi/spark/spark-1.0.2/spark-1.0.2-bin-hadoop2.tgz
  • Я создал автономное приложение SimpleApp.scala, как описано в: http://spark.apache.org/docs/latest/quick-start.html#standalone-applications с соответствующим файлом simple.sbt(только что скопированным из описания) и правильным расположением директории
  • Убедитесь, что у вас есть sbt в PATH. Перейдите в каталог с вашим приложением и создайте свой пакет с помощью sbt package
  • Запустите Spark Server с помощью SPARK_HOME_DIR/sbin/spark_master.sh
  • Перейдите в localhost:8080 и убедитесь, что ваш сервер запущен. Скопируйте ссылку с URL-адреса (с описания сервера, а не на localhost). Это будет что-то с портом 7077 или похожим.
  • Начать работу с помощью SPARK_HOME_DIR/bin/spark-class org.apache.spark.deploy.worker.Worker spark://IP:PORT, где IP: PORT - это URL, скопированный в 6
  • Разверните приложение на сервер: SPARK_HOME_DIR/bin/spark-submit --class "SimpleApp" --master URL target/scala-2.10/simple-project_2.10-1.0.jar

Это сработало для меня, и надежда поможет вам.
Pawel

Ответ 3

В дополнение к выбранному ответу, если вы хотите подключиться к внешнему автономному экземпляру Spark:

SparkConf conf =
new SparkConf()
     .setAppName("Simple Application")
     .setMaster("spark://10.3.50.139:7077");

JavaSparkContext sc = new JavaSparkContext(conf);

Здесь вы можете найти более "главную" конфигурацию в зависимости от того, где работает Spark: http://spark.apache.org/docs/latest/submitting-applications.html#master-urls

Ответ 4

Этот ответ предназначен для Spark 2.3. Если вы хотите протестировать свое приложение Spark локально, то есть без предварительного условия кластера Hadoop, и даже без необходимости запуска какой-либо из автономных служб Spark, вы можете сделать это:

JavaSparkContext jsc = new JavaSparkContext(new SparkConf().setAppName("Simple App"));

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

$SPARK_HOME/bin/spark-submit --class SimpleApp --master local target/scala-2.10/simple-project_2.10-1.0.jar

Чтобы это работало, вам просто нужно извлечь файл Spark tar в $ SPARK_HOME и установить $ SPARK_HOME для пользователя Spark.profile