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. và this one, crossing the other thread và this 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
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
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