2015-07-29 17 views
10

Giảm kích thước của jar ứng dụng bằng cách cung cấp classpath spark- cho maven phụ thuộc:classpaths Setting tia lửa trên EC2: spark.driver.extraClassPath và spark.executor.extraClassPath

cụm của tôi là có 3 trường hợp EC2 mà hadoop và spark đang chạy.Nếu tôi xây dựng jar với phụ thuộc maven, nó trở nên quá lớn (khoảng 100 MB) mà tôi muốn tránh điều này khi Jar đang nhân rộng trên tất cả các nút, mỗi lần tôi chạy công việc.

Để tránh điều đó tôi đã xây dựng một gói maven là "gói maven" .Đối với độ phân giải phụ thuộc Tôi đã tải tất cả các phụ thuộc maven trên mỗi nút và sau đó chỉ cung cấp ở trên bên dưới đường dẫn jar:

Tôi đã thêm lớp đường dẫn trên mỗi nút trong "spark-defaults.conf" là

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 

Nó đã hoạt động, cục bộ trên một nút. Tôi vẫn nhận được lỗi này.Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.

Trả lời

9

Cuối cùng, tôi đã có thể giải quyết vấn đề. Tôi đã tạo jar ứng dụng bằng cách sử dụng "mvn package" thay vì "mvn clean compile assembly: single", để nó không tải xuống phụ thuộc maven trong khi tạo jar (Nhưng cần phải cung cấp thời gian chạy/phụ thuộc) dẫn đến Jar cỡ nhỏ (vì chỉ có tham chiếu phụ thuộc).

Sau đó, tôi đã thêm bên dưới hai tham số trong spark-defaults.conf trên mỗi nút như:

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 

Vì vậy, câu hỏi đặt ra rằng, làm thế nào ứng dụng JAR sẽ nhận được sự phụ thuộc maven (bắt buộc jar's) thời gian chạy?

Đối với điều đó, tôi đã tải xuống tất cả các phụ thuộc bắt buộc trên mỗi nút bằng cách sử dụng biên dịch biên dịch sạch mvn: trước.

0

Bạn không cần phải đặt tất cả các tệp jars. Chỉ cần đặt tệp jar ứng dụng của bạn. Nếu bạn gặp lỗi lần nữa, hãy đặt tất cả các tệp jar cần thiết.

Bạn phải đặt tệp jars bằng phương thức setJars().

+0

Tôi biết rằng Jar ứng dụng là cần thiết và tất cả đã sẵn sàng tại chỗ. Tôi đang nói về các lọ khác (phụ thuộc Maven). –

+0

chỉ đặt phụ thuộc maven vào tệp pom của bạn. Nó sẽ lấy tất cả các tệp jar trong tệp jar ứng dụng chính. nó sẽ giải quyết vấn đề của bạn –

+0

Nếu tôi làm như vậy, nó sẽ dẫn đến tệp jar lớn mà tôi đang cố gắng tránh. –

Các vấn đề liên quan