Tôi có một cụm nhỏ với 3 máy và một máy khác để phát triển và thử nghiệm. Khi phát triển, tôi đặt SparkContext
thành local
. Khi mọi thứ đều ổn, tôi muốn triển khai tệp Jar tôi xây dựng cho mỗi nút. Về cơ bản tôi tự di chuyển jar này để cluster và sao chép vào HDFS được chia sẻ bởi cluster. Sau đó, tôi có thể thay đổi mã thành:Làm thế nào để dễ dàng triển khai Jar của tôi sang Spark Cluster ở chế độ độc lập?
//standalone mode
val sc = new SparkContext(
"spark://mymaster:7077",
"Simple App",
"/opt/spark-0.9.1-bin-cdh4", //spark home
List("hdfs://namenode:8020/runnableJars/SimplyApp.jar") //jar location
)
để chạy mã trong IDE của tôi. Câu hỏi của tôi: Có cách nào dễ dàng hơn để di chuyển cái bình này đến cụm sao?
Bạn cũng có thể sử dụng 'SparkContext.jarOfClass (this.getClass)' thay vì mã hóa cứng nó 'Array ("/ local/dir/SimplyApp.jar") '. – samthebest
@samthebest rằng phương thức xác định lọ mà lớp được cung cấp đã được nạp và hoạt động tốt cho các phụ thuộc nhưng có thể không hoạt động đối với lớp trình điều khiển trong một IDE sẽ không được nạp từ một JAR. Cách dễ nhất là xây dựng một uberjar với Maven Shade hoặc SBT assembly và cung cấp đó là sự phụ thuộc duy nhất. – maasg
Chỉ FWIW câu trả lời này phụ thuộc vào việc chấp nhận cài đặt mặc định cho --deploy-mode là máy khách, nếu bạn đang sử dụng cụm chế độ -deploy-mode thì bạn không biết nút trình điều khiển nào sẽ chạy, do đó bạn thực hiện cần các lọ này hiển thị cho tất cả các công nhân, theo Quản lý phụ thuộc nâng cao, đó là một ý tưởng hay vì nó làm giảm lưu lượng mạng. http://spark.apache.org/docs/latest/submitting-applications.html#advanced-dependency-management. Ngoài ra các lọ không được vận chuyển đến các bậc thầy như là chủ không đối phó với mã, chỉ cần lập kế hoạch của mã aka "ứng dụng" trong Spark – JimLohse