Установка искровых дорожек на EC2: spark.driver.extraClassPath и spark.executor.extraClassPath

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

В моем кластере есть 3 экземпляра ec2, на которых запущен hasoop и искра. Если я создаю jar с зависимостями maven, он становится слишком большим (около 100 МБ), который я хочу избежать, поскольку Jar получает репликацию на всех узлах, каждый раз, когда я запускаю задание.

Чтобы избежать этого, я создал пакет maven как "maven package". Для разрешения зависимостей я загрузил все зависимости maven на каждый node, а затем предоставил только выше пути jar:

Я добавил пути классов на каждый node в "spark-defaults.conf" как

spark.driver.extraClassPath        /home/spark/.m2/repository/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar:/home/spark/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.1.5/cassandra-driver-core-2.1.5.jar:/home/spark/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar:/home/spark/.m2/repository/com/google/collections/google-collections/1.0/google-collections-1.0.jar:/home/spark/.m2/repository/com/datastax/spark/spark-cassandra-connector-java_2.10/1.2.0-rc1/spark-cassandra-connector-java_2.10-1.2.0-rc1.jar:/home/spark/.m2/repository/com/datastax/spark/spark-cassandra-connector_2.10/1.2.0-rc1/spark-cassandra-connector_2.10-1.2.0-rc1.jar:/home/spark/.m2/repository/org/apache/cassandra/cassandra-thrift/2.1.3/cassandra-thrift-2.1.3.jar:/home/spark/.m2/repository/org/joda/joda-convert/1.2/joda-convert-1.2.jar

Он работал локально на одном node. Тем не менее, я получаю эту ошибку. Любая помощь будет оценена.

Ответ 1

Наконец, я смог решить проблему. Я создал приложение jar, используя "mvn package" вместо "mvn clean compile assembly: single" , так что он не будет загружать зависимости maven при создании jar (но нужно для обеспечения времени выполнения jar/dependencies), что привело к небольшому размеру Jar (поскольку существует только ссылка зависимостей).

Затем я добавил ниже два параметра в spark-defaults.conf для каждого node как:

spark.driver.extraClassPath     /home/spark/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.1.7/cassandra-driver-core-2.1.7.jar:/home/spark/.m2/repository/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar:/home/spark/.m2/repository/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar:/home/spark/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar

spark.executor.extraClassPath     /home/spark/.m2/repository/com/datastax/cassandra/cassandra-driver-core/2.1.7/cassandra-driver-core-2.1.7.jar:/home/spark/.m2/repository/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.jar:/home/spark/.m2/repository/com/google/code/gson/gson/2.3.1/gson-2.3.1.jar:/home/spark/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar

Таким образом возникает вопрос, что, как приложение JAR получит время выполнения maven (требуется jar)?

Для этого я загрузил все необходимые зависимости для каждого node, используя mvn clean compile assembly: single заранее.

Ответ 2

Вам не нужно ставить все файлы jars. Просто поместите файл приложения в jar. Если вы снова получите ошибку, чем все необходимые файлы jar.

Вы должны поставить файл jars с помощью методов setJars().