2015-07-29 2 views
10

Уменьшение размера приложения, предоставляя банку искрового Classpath для зависимостей Maven:Установка свечи на пути к классам EC2: spark.driver.extraClassPath и spark.executor.extraClassPath

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

Чтобы избежать этого, у меня есть построить пакет Maven как «Maven пакет» .Для разрешения зависимостей я скачал все зависимости Maven на каждом узле, а затем только при условии, выше ниже баночке путей:

Я добавил класс дорожки на каждом узле в «искрового 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 

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

ответ

9

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

Затем я добавил ниже два параметров в искрового defaults.conf на каждый узле, как:

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's) время выполнения?

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

0

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

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

+0

Я знаю, что приложение Jar необходимо, и все готово на месте. Я говорю о других баночках (зависимость от Maven). –

+0

положите только зависимость maven в файл pom. Он будет принимать все файлы jar в главном файле jar приложения. он решит вашу проблему. –

+0

Если я это сделаю, это приведет к большому файлу jar, который я пытаюсь избежать. –