2014-05-15 18 views
5

Tôi đang sử dụng spark-ec2 để chạy một số mã Spark. Khi tôi đặt chính thành "cục bộ", sau đó nó chạy tốt. Tuy nhiên, khi tôi đặt master thành $ MASTER, nhân viên thất bại ngay lập tức, với java.lang.NoClassDefFoundError cho các lớp học . Các công nhân kết nối với chủ nhân, và hiển thị trong giao diện người dùng, và cố gắng chạy nhiệm vụ; nhưng ngay lập tức nâng cao ngoại lệ đó ngay sau khi nó tải lớp phụ thuộc đầu tiên của nó (mà là trong jar lắp ráp).Công nhân Spark không thể tìm thấy JAR trên cụm EC2

Tôi đã sử dụng sbt-assembly để tạo một cái lọ với các lớp, được xác nhận bằng cách sử dụng jar tvf mà các lớp ở đó và đặt SparkConf phân phối các lớp. UI Spark Web thực sự cho thấy jar lắp ráp được thêm vào classpath: http://172.x.x.x47441/jars/myjar-assembly-1.0.jar

Dường như, mặc dù thực tế rằng myjar-lắp ráp chứa các lớp , và đang được thêm vào cụm, nó không đạt các công nhân . Làm thế nào để sửa lỗi này? (Tôi có cần phải tự sao chép các tập tin jar Nếu vậy, mà dir Tôi nghĩ rằng điểm của SparkConf thêm lọ được để làm điều này tự động?)

nỗ lực của tôi tại debugging đã chỉ ra:

  1. các jar lắp ráp đã được sao chép vào/root/tia lửa/công việc/app-xxxxxx/1/ (được xác định bởi ssh để người lao động và tìm kiếm jar)
  2. Tuy nhiên, con đường mà không xuất hiện trên các đường dẫn lớp của nhân viên (Được xác định từ nhật ký, hiển thị java -cp nhưng thiếu tập tin đó)

Vì vậy, nó có vẻ như tôi cần phải nói với Spark để thêm đường dẫn đến jar lắp ráp vào classpath của người lao động. Làm thế nào để làm điều đó? Hay có thủ phạm khác không? (Tôi đã dành hàng giờ cố gắng gỡ lỗi này nhưng không có kết quả!)

+0

Một cách giải quyết, mà làm việc, là để sao chép jar để mỗi công nhân và thêm nó một cách rõ ràng vào 'SPARK_CLASSPATH' trên mỗi nhân viên. – SRobertJames

+0

Vì câu hỏi và nhận xét ở trên, SPARK_CLASSPATH hiện không còn được dùng nữa. – JimLohse

Trả lời

-1

Bạn được yêu cầu đăng ký bình với cụm tia lửa trong khi gửi ứng dụng của bạn, để bạn có thể chỉnh sửa mã của mình như sau.

jars(0) = "/usr/local/spark/lib/spark-assembly-1.3.0-hadoop2.4.0.jar" 
val conf: SparkConf = new SparkConf() 
.setAppName("Busigence App") 
.setMaster(sparkMasterUrl) 
.setSparkHome(sparkHome) 
.setJars(jars); 
0

LƯU Ý: Câu trả lời cụ thể của EC2, không phải là câu trả lời chung chung. Chỉ cần cố gắng đưa ra câu trả lời cho câu hỏi được hỏi một năm trước, một câu có cùng triệu chứng nhưng thường là nguyên nhân và chuyến đi khác nhau lên rất nhiều người.

Nếu tôi hiểu chính xác câu hỏi, bạn đang hỏi, "Tôi có cần phải sao chép tệp jar theo cách thủ công không? Nếu có, đến thư mục nào?" Bạn nói, "và thiết lập SparkConf để phân phối các lớp" nhưng bạn không rõ ràng nếu điều này được thực hiện thông qua spark-env.sh hoặc spark-defaults.conf? Vì vậy, làm cho một số giả định, chính là bạn đang chạy trong chế độ cluster, có nghĩa là lái xe của bạn chạy trên một trong những công nhân và bạn không biết cái nào trước ... sau đó ...

Câu trả lời là có , đến thư mục có tên trong classpath. Trong EC2, lưu trữ dữ liệu liên tục duy nhất là/root/persistent-hdfs, nhưng tôi không biết đó là một ý hay hay không.

In the Spark docs on EC2 I see this line:

To deploy code or data within your cluster, you can log in and use 
the provided script ~/spark-ec2/copy-dir, which, given a directory 
path, RSYNCs it to the same location on all the slaves. 

SPARK_CLASSPATH

tôi sẽ không sử dụng SPARK_CLASSPATH bởi vì nó bị phản đối như của Spark 1.0 do đó, một ý tưởng tốt là sử dụng thay thế của nó trong $ SPARK_HOME/conf/spark-giá trị mặc định. conf:

spark.executor.extraClassPath /path/to/jar/on/worker 

Đây sẽ là tùy chọn hoạt động. Nếu bạn cần thực hiện điều này khi đang di chuyển, không phải trong tệp conf, đề xuất là "./spark-submit with --driver-class-path để tăng thêm đường dẫn trình điều khiển" (from Spark docs about spark.executor.extraClassPath và xem kết thúc câu trả lời cho một nguồn khác trên cái đó).

NHƯNG ... bạn không sử dụng tính năng gửi bằng tia lửa ... Tôi không biết cách hoạt động trong EC2, xem kịch bản mà tôi không tìm ra nơi EC2 cho phép bạn cung cấp các tham số này trên dòng lệnh . Bạn đề cập đến bạn đã làm điều này trong việc thiết lập đối tượng SparkConf của bạn để gắn bó với điều đó nếu điều đó làm việc cho bạn.

Tôi thấy trong Spark-năm, đây là câu hỏi rất cũ nên tôi tự hỏi bạn đã giải quyết nó như thế nào? Tôi hy vọng điều này sẽ giúp một người nào đó, tôi đã học được rất nhiều nghiên cứu chi tiết cụ thể của EC2.


Tôi phải thừa nhận, như một giới hạn về vấn đề này, nó bối rối cho tôi trong Spark docs that for spark.executor.extraClassPath nó nói:

Người dùng thường không cần phải thiết lập tùy chọn này

Tôi cho rằng họ có nghĩa là hầu hết mọi người sẽ nhận được classpath thông qua một tùy chọn cấu hình trình điều khiển. Tôi biết hầu hết các tài liệu về trình kích hoạt tia lửa khiến cho nó giống như kịch bản xử lý việc di chuyển mã của bạn xung quanh cụm nhưng tôi nghĩ rằng chỉ trong "chế độ máy khách độc lập" mà tôi cho là bạn không sử dụng, tôi giả sử EC2 phải nằm trong "độc lập chế độ cụm. "


THÊM/BỐI CẢNH VỀ SPARK_CLASSPATH không chấp nhận:

More nền mà dẫn tôi nghĩ SPARK_CLASSPATH is deprecated is this archived thread.this one, crossing the other threadthis one about a WARN message when using SPARK_CLASSPATH:

14/07/09 13:37:36 WARN spark.SparkConf: 
SPARK_CLASSPATH was detected (set to 'path-to-proprietary-hadoop-lib/*: 
/path-to-proprietary-hadoop-lib/lib/*'). 
This is deprecated in Spark 1.0+. 

Please instead use: 
- ./spark-submit with --driver-class-path to augment the driver classpath 
- spark.executor.extraClassPath to augment the executor classpath 
+0

xin lỗi vì một số thứ không phải mã được định dạng là mã, tôi không thể gửi câu hỏi với các phần đó như blockquote – JimLohse

+0

Có nói tất cả những điều trên, vẫn còn các phần của tài liệu Spark cung cấp hướng dẫn về cách đẩy lọ qua cụm nhưng ngay cả khi bạn có thể khiến người lái xe làm điều đó cho bạn, thì lưu lượng truy cập mạng là một nhược điểm và nó chỉ dành cho việc kích hoạt tia lửa, không phải EC2 http://spark.apache.org/docs/latest/submitting-applications.html# quản lý phụ thuộc nâng cao – JimLohse

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