2016-02-26 16 views
10

Tôi có một chương trình đơn giản trong Spark:Spark: kiểm tra UI cluster của bạn để đảm bảo rằng nhân viên được đăng ký

/* SimpleApp.scala */ 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 

object SimpleApp { 
    def main(args: Array[String]) { 
    val conf = new SparkConf().setMaster("spark://10.250.7.117:7077").setAppName("Simple Application").set("spark.cores.max","2") 
    val sc = new SparkContext(conf)  
    val ratingsFile = sc.textFile("hdfs://hostname:8020/user/hdfs/mydata/movieLens/ds_small/ratings.csv") 

    //first get the first 10 records 
    println("Getting the first 10 records: ") 
    ratingsFile.take(10)  

    //get the number of records in the movie ratings file 
    println("The number of records in the movie list are : ") 
    ratingsFile.count() 
    } 
} 

Khi tôi cố gắng chạy chương trình này từ tức là tia lửa vỏ tôi đăng nhập vào nút tên (Cloudera cài đặt) và chạy các lệnh tuần tự trên spark-shell:

val ratingsFile = sc.textFile("hdfs://hostname:8020/user/hdfs/mydata/movieLens/ds_small/ratings.csv") 
println("Getting the first 10 records: ") 
ratingsFile.take(10)  
println("The number of records in the movie list are : ") 
ratingsFile.count() 

tôi nhận được kết quả chính xác, nhưng nếu tôi cố gắng chạy chương trình từ excel, không có nguồn lực được giao cho chương trình và trong giao diện điều khiển log tất cả tôi xem là:

WARN TaskSchedulerImpl: Công việc ban đầu chưa chấp nhận bất kỳ tài nguyên nào; kiểm tra UI cluster của bạn để đảm bảo rằng nhân viên được đăng ký và có đủ nguồn lực

Ngoài ra, trong giao diện người dùng Spark, tôi thấy điều này:

Job keeps Running - Spark

Ngoài ra, cần lưu ý rằng phiên bản này của tia lửa đã được cài đặt với Cloudera (do đó không có nút công nhân nào xuất hiện).

Tôi nên làm gì để thực hiện công việc này?

EDIT:

Tôi đã kiểm tra HistoryServer và những việc làm không hiển thị ở đó (ngay cả trong các ứng dụng không đầy đủ)

+0

Câu hỏi liên quan đến phần đầu tiên của thông báo lỗi: ['TaskSchedulerImpl: Công việc ban đầu chưa chấp nhận bất kỳ tài nguyên nào;'] (http://stackoverflow.com/q/29469462/1804173) – bluenote10

Trả lời

12

Tôi đã thực hiện cấu hình và điều chỉnh hiệu suất cho nhiều cụm tia lửa và đây là một thông báo rất phổ biến/bình thường để xem khi nào bạn đầu tiên prepping/cấu hình một cụm để xử lý khối lượng công việc của bạn.

Điều này là hoàn toàn do không đủ tài nguyên để khởi chạy công việc. Các công việc được yêu cầu một trong số:

  • nhiều bộ nhớ cho mỗi người lao động so với phân bổ cho nó (1GB)
  • CPU nhiều hơn là có sẵn trên cụm
+0

Tôi nghĩ rằng vấn đề tồn tại với cách công việc này đang được triển khai. URL chính phải được chỉ định khi tia lửa có bậc thầy và nô lệ của riêng nó. Tuy nhiên, trong trường hợp của tôi, chương trình đang chạy trên một cụm YARN. Bạn không chắc chắn cách triển khai hoạt động trong trường hợp đó. –

+0

Đối với Sợi, chủ nhân chỉ đơn giản là '--master yarn' http://spark.apache.org/docs/latest/running-on-yarn.html – javadba

+0

https://spark.apache.org/docs/latest/configuration . Nguyên nhân là lựa chọn mặc định trong chế độ độc lập là xấu, bạn sẽ chặn toàn bộ cluster của bạn nếu bạn không từ chối số lượng --total-thi hành di chúc-lõi 1 trong chế độ sợi, tất cả các lõi có sẵn về công nhân ở chế độ độc lập và hạt thô Mesos. – mathtick

0

Bạn không có bất kỳ người lao động để thực hiện công việc. Không có lõi có sẵn cho công việc để thực hiện và đó là lý do công việc của nhà nước vẫn còn trong 'Chờ đợi'.

Nếu bạn không có nhân viên nào đăng ký với Cloudera, công việc sẽ thực hiện như thế nào?

+0

Theo những gì tôi biết, nếu Spark đang chạy trên YARN, các nút công nhân không hiển thị trong giao diện người dùng vì các công nhân lại được quản lý bởi YARN? –

+0

Tôi thường thấy các lỗi này khi không có nhân viên nào có sẵn hoặc không có đủ lõi miễn phí cho công việc. – Saket

+0

bạn nói đúng. Nhưng vì tôi đang chạy chương trình này trên YARN, định dạng "URL chính" này có thể sai. Có hiểu biết gì về điều đó không? –

1

Cuối cùng tìm ra những gì câu trả lời là.

Khi triển khai chương trình tia lửa trên cụm YARN, URL chính chỉ là sợi.

Vì vậy, trong chương trình, bối cảnh tia lửa nên chỉ trông giống như:

val conf = new SparkConf().setAppName("SimpleApp") 

Sau đó, dự án nhật thực này nên được xây dựng sử dụng Maven và jar tạo nên được triển khai trên các cụm bằng cách sao chép nó vào cụm và sau đó chạy lệnh sau

spark-submit --master yarn --class "SimpleApp" Recommender_2-0.0.1-SNAPSHOT.jar 

Điều này có nghĩa là chạy từ nhật thực trực tiếp sẽ không hoạt động.

+0

Tôi gặp lỗi tương tự trong hdp 2.4. Khi thiết lập hdp là master ở chế độ độc lập, tôi có thể chạy spark-shell từ sever sever đến master server. Sau đó, tôi có thể chạy phương thức như "val distData = sc.parallelize (Array (1, 2, 3, 4, 5))". Nhưng khi cố gắng đọc các tập tin từ hdfs, nó sẽ ném lên các lỗi. Có vẻ như nó có thể hoạt động trong nhật thực. Hy vọng ai đó có thể giúp ~ – Decula

2

Bạn có thể kiểm tra lõi nút công việc của cụm: ứng dụng của bạn không thể vượt quá điều đó. Ví dụ, bạn có hai nút làm việc. Và mỗi nút công việc bạn có 4 lõi. Sau đó, bạn có 2 ứng dụng để chạy. Vì vậy, bạn có thể cung cấp cho mỗi ứng dụng 4 lõi để chạy công việc.

Bạn có thể thiết lập như thế này trong các mã:

SparkConf sparkConf = new SparkConf().setAppName("JianSheJieDuan") 
          .set("spark.cores.max", "4"); 

Nó làm việc cho tôi.

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