Tôi có thiết lập cụm Spark với một chủ và 3 công nhân. Tôi cũng đã cài đặt Spark trên máy ảo CentOS. Tôi đang cố gắng để chạy một vỏ Spark từ máy ảo địa phương của tôi mà sẽ kết nối với chủ, và cho phép tôi thực thi mã Scala đơn giản. Vì vậy, đây là lệnh tôi chạy trên máy ảo cục bộ của mình:Làm cách nào tôi có thể chạy vỏ Apache Spark từ xa?
bin/spark-shell --master spark://spark01:7077
Shell chạy đến điểm tôi có thể nhập mã Scala. Nó nói rằng các nhà điều hành đã được cấp (x3 - một cho mỗi công nhân). Nếu tôi nhìn vào giao diện người dùng của Chủ nhân, tôi có thể thấy một ứng dụng đang chạy, Vỏ tia lửa. Tất cả các công nhân là ALIVE, có 2/2 lõi được sử dụng, và đã phân bổ 512 MB (trong số 5 GB) cho ứng dụng. Vì vậy, tôi cố gắng thực thi mã Scala sau:
sc.parallelize(1 to 100).count
Thật không may, lệnh này không hoạt động. Vỏ sẽ chỉ in các cảnh báo tương tự không ngừng:
INFO SparkContext: Starting job: count at <console>:13
INFO DAGScheduler: Got job 0 (count at <console>:13) with 2 output partitions (allowLocal=false)
INFO DAGScheduler: Final stage: Stage 0(count at <console>:13) with 2 output partitions (allowLocal=false)
INFO DAGScheduler: Parents of final stage: List()
INFO DAGScheduler: Missing parents: List()
INFO DAGScheduler: Submitting Stage 0 (Parallel CollectionRDD[0] at parallelize at <console>:13), which has no missing parents
INFO DAGScheduler: Submitting 2 missing tasts from Stage 0 (ParallelCollectionRDD[0] at parallelize at <console>:13)
INFO TaskSchedulerImpl: Adding task set 0.0 with 2 tasks
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory
Tiếp theo nghiên cứu của tôi về vấn đề này, tôi đã khẳng định rằng URL chủ Tôi đang sử dụng là giống hệt với một trên giao diện web. Tôi có thể ping và ssh cả hai cách (cluster để VM địa phương, và ngược lại). Hơn nữa, tôi đã chơi với tham số bộ nhớ thực thi (cả việc tăng và giảm bộ nhớ) để không có kết quả. Cuối cùng, tôi đã thử vô hiệu hóa tường lửa (iptables) trên cả hai mặt, nhưng tôi vẫn gặp lỗi tương tự. Tôi đang sử dụng Spark 1.0.2.
TL; DR Có thể chạy một Spark vỏ Apache từ xa (và vốn đã nộp đơn từ xa)? Nếu vậy, tôi đang thiếu gì?
EDIT: Tôi đã xem xét các bản ghi nhân viên và thấy rằng những người lao động có khó khăn khi tìm Spark:
ERROR org.apache.spark.deploy.worker.ExecutorRunner: Error running executor
java.io.IOException: Cannot run program "/usr/bin/spark-1.0.2/bin/compute-classpath.sh" (in directory "."): error=2, No such file or directory
...
Spark được cài đặt trong một thư mục khác nhau trên VM địa phương của tôi hơn trên cluster. Đường dẫn mà nhân viên đang cố gắng tìm là đường dẫn trên máy ảo cục bộ của tôi. Có cách nào để tôi chỉ định đường dẫn này không? Hay chúng phải giống nhau ở mọi nơi?
Hiện tại, tôi đã điều chỉnh các thư mục của mình để vượt qua lỗi này. Bây giờ, Spark Shell của tôi không thành công trước khi tôi có cơ hội nhập lệnh đếm (Master removed our application: FAILED
). Tất cả công nhân có cùng lỗi:
ERROR akka.remote.EndpointWriter: AssociationError [akka.tcp://[email protected]:7078] -> [akka.tcp://[email protected]:53633]:
Error [Association failed with [akka.tcp://[email protected]:53633]]
[akka.remote.EndpointAssociationException: Association failed with [akka.tcp://[email protected]:53633]
Caused by: akka.remote.transport.netty.NettyTransport$$anonfun$associate$1$$annon2: Connection refused: spark02/192.168.64.2:53633
Khi bị nghi ngờ, tôi đang gặp sự cố mạng. Tôi nên xem gì bây giờ?
Bạn có thể thử hai thứ sau đây không. 1. Hãy thử kết nối với bản gốc từ nút mà chủ đang chạy. 2. Thử thay thế tên máy chủ bằng IP "ở khắp mọi nơi". –
Bạn có thể kết nối với cụm Spark từ máy từ xa. Spark shell chỉ là một chương trình Scala khác đang chạy trên cluster. –
Có, điều này là có thể và sẽ hoạt động. Tôi nghi ngờ các vấn đề về mạng. Tôi không chắc chắn trên đỉnh đầu của tôi, nhưng tôi nghĩ rằng các công nhân sẽ cố gắng kết nối với máy địa phương của bạn trên một số cổng. Từ những triệu chứng tôi đoán là không hiệu quả. Có thể bạn có thể tìm thêm thông tin trong nhật ký công nhân! –