2015-04-03 39 views
6

Không thể chạy Apache Spark trên Docker.Làm thế nào để chạy Spark trên Docker?

Khi tôi cố gắng truyền đạt từ tài xế của tôi để châm ngòi cho thầy tôi nhận được lỗi sau:

15/04/03 13:08:28 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

+1

Tôi gặp vấn đề tương tự khi cố gắng chạy Spark Job Server bên trong Docker. Vấn đề ở đây là, Spark sử dụng các cổng ngẫu nhiên để giao tiếp giữa chủ, nhân viên và người lái xe. Docker là một hệ thống khép kín bởi thiết kế và bạn cần để lộ các cổng cụ thể thông qua EXPOSE. Khi Spark không thể giao tiếp, lỗi này xảy ra. –

Trả lời

4

Thứ hai là lý do phổ biến hơn đối với trường hợp Docker. Bạn nên kiểm tra, mà bạn

  • Expose tất cả các cổng cần thiết
  • Đặt đúng spark.broadcast.factory
  • Xử lý Docker bí danh

Nếu không xử lý tất cả 3 vấn đề châm ngòi phần cluster (thạc sĩ, công nhân , người lái xe) không thể giao tiếp. Bạn có thể đọc kỹ mọi vấn đề trên http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html hoặc sử dụng vùng chứa sẵn sàng cho tia lửa từ https://registry.hub.docker.com/u/epahomov/docker-spark/

Nếu cố gắng phân bổ tài nguyên ít hơn (số lượng thực thi, bộ nhớ, lõi) với cờ từ https://spark.apache.org/docs/latest/configuration.html. Kiểm tra xem bạn có bao nhiêu tài nguyên trên trang giao diện người dùng chính của spark, theo mặc định là http://localhost:8080.

5

Lỗi này có vẻ như công nhân chưa đăng ký với chủ.

này có thể được kiểm tra tại spark web phân thạc sĩ http://<masterip>:8080

Bạn cũng có thể chỉ cần sử dụng một hình ảnh Docker khác nhau, hoặc so sánh hình ảnh Docker với một trong những hoạt và xem những gì là khác nhau.

Tôi đã cập nhật một số spark masterspark worker.

Nếu bạn có máy Linux ngồi phía sau bộ định tuyến NAT, như tường lửa gia đình, phân bổ địa chỉ trong mạng riêng tư 192.168.1. * Cho mạng, tập lệnh này sẽ tải xuống bản 1.3.1 tổng thể và công nhân để chạy trong các thùng chứa docker riêng biệt với địa chỉ 192.168.1.10 và .11 tương ứng. Bạn có thể cần phải tinh chỉnh các địa chỉ nếu 192.168.1.10 và 192.168.1.11 đã được sử dụng trên mạng LAN của bạn.

pipework là tiện ích để bắc cầu mạng LAN vào vùng chứa thay vì sử dụng cầu docker bên trong.

Spark yêu cầu tất cả các máy có thể giao tiếp với nhau. Theo như tôi có thể nói, tia lửa không phải là phân cấp, tôi đã thấy các công nhân cố gắng mở các cổng với nhau. Vì vậy, trong kịch bản shell tôi trưng ra tất cả các cổng, đó là OK nếu các máy tính được tường lửa, chẳng hạn như phía sau một bộ định tuyến NAT nhà.

./run-docker-spark

#!/bin/bash 
sudo -v 
MASTER=$(docker run --name="master" -h master --add-host master:192.168.1.10 --add-host spark1:192.168.1.11 --add-host spark2:192.168.1.12 --add-host spark3:192.168.1.13 --add-host spark4:192.168.1.14 --expose=1-65535 --env SPARK_MASTER_IP=192.168.1.10 -d drpaulbrewer/spark-master:latest) 
sudo pipework eth0 $MASTER 192.168.1.10/[email protected] 
SPARK1=$(docker run --name="spark1" -h spark1 --add-host home:192.168.1.8 --add-host master:192.168.1.10 --add-host spark1:192.168.1.11 --add-host spark2:192.168.1.12 --add-host spark3:192.168.1.13 --add-host spark4:192.168.1.14 --expose=1-65535 --env mem=10G --env master=spark://192.168.1.10:7077 -v /data:/data -v /tmp:/tmp -d drpaulbrewer/spark-worker:latest) 
sudo pipework eth0 $SPARK1 192.168.1.11/[email protected] 

Sau khi chạy kịch bản này, tôi có thể xem báo cáo web thạc sĩ tại 192.168.1.10:8080 hoặc truy cập vào máy tính khác trên mạng LAN của tôi mà có một phân phối tia lửa, và chạy ./spark-shell --master spark://192.168.1.10:7077 và nó sẽ mang lại một vỏ scala tương tác.

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