2015-07-21 22 views
7

khi tôi đang cố gắng để chạy nó trên thư mục này nó được ném tôi ExecutorLostFailure mọiLỗi ExecutorLostFailure khi chạy một nhiệm vụ trong Spark

Hi Tôi là một người mới bắt đầu trong Spark. Tôi đang cố gắng để chạy một công việc trên Spark 1.4.1 với 8 nút nô lệ với bộ nhớ 11,7 GB mỗi đĩa 3,2 GB. Tôi đang chạy tác vụ Spark từ một nút nô lệ (từ 8 nút) (vì vậy với 0.7 phần lưu trữ xấp xỉ 4,8 gb chỉ có sẵn trên mỗi nút) và sử dụng Mesos làm Trình quản lý cụm. Tôi đang sử dụng cấu hình này:

spark.master mesos://uc1f-bioinfocloud-vamp-m-1:5050 
spark.eventLog.enabled true 
spark.driver.memory 6g 
spark.storage.memoryFraction 0.7 
spark.core.connection.ack.wait.timeout 800 
spark.akka.frameSize 50 
spark.rdd.compress true 

Tôi đang cố chạy thuật toán Spark MLlib Naive Bayes trên một thư mục khoảng 14 GB dữ liệu. (Không có vấn đề khi tôi đang chạy nhiệm vụ trên một thư mục 6 GB) Tôi đọc thư mục này từ lưu trữ google như RDD và cho 32 như tham số phân vùng. (Tôi đã cố gắng tăng phân vùng là tốt). Sau đó sử dụng TF để tạo ra vector đặc trưng và dự đoán trên cơ sở đó. Nhưng khi tôi cố gắng chạy nó trên thư mục này, nó đang ném tôi ExecutorLostFailure everytime. Tôi đã thử cấu hình khác nhau nhưng không có gì là giúp đỡ. Có thể tôi đang thiếu một cái gì đó rất cơ bản nhưng không thể tìm ra. Bất kỳ trợ giúp hoặc gợi ý nào sẽ có giá trị cao.

Log là:

15/07/21 01:18:20 ERROR TaskSetManager: Task 3 in stage 2.0 failed 4 times; aborting job  
15/07/21 01:18:20 INFO TaskSchedulerImpl: Cancelling stage 2  
15/07/21 01:18:20 INFO TaskSchedulerImpl: Stage 2 was cancelled  
15/07/21 01:18:20 INFO DAGScheduler: ResultStage 2 (collect at /opt/work/V2ProcessRecords.py:213) failed in 28.966 s  
15/07/21 01:18:20 INFO DAGScheduler: Executor lost: 20150526-135628-3255597322-5050-1304-S8 (epoch 3)  
15/07/21 01:18:20 INFO BlockManagerMasterEndpoint: Trying to remove executor 20150526-135628-3255597322-5050-1304-S8 from BlockManagerMaster.  
15/07/21 01:18:20 INFO DAGScheduler: Job 2 failed: collect at /opt/work/V2ProcessRecords.py:213, took 29.013646 s  
Traceback (most recent call last):  
    File "/opt/work/V2ProcessRecords.py", line 213, in <module> 
    secondPassRDD = firstPassRDD.map(lambda (name, title, idval, pmcId, pubDate, article, tags , author, ifSigmaCust, wclass): (str(name), title, idval, pmcId, pubDate, article, tags , author, ifSigmaCust , "Yes" if ("PMC" + pmcId) in rddNIHGrant else ("No") , wclass)).collect()  
    File "/usr/local/spark/python/lib/pyspark.zip/pyspark/rdd.py", line 745, in collect  
    File "/usr/local/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__  
    File "/usr/local/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value 
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. 
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 3 in stage 2.0 failed 4 times, most recent failure: Lost task 3.3 in stage 2.0 (TID 12, vamp-m-2.c.quantum-854.internal): ExecutorLostFailure (executor 20150526-135628-3255597322-5050-1304-S8 lost)  
Driver stacktrace:  
     at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1266) 
     at  org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1257) 
     at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1256) 
     at  scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 
     at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47) 
     at  org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1256) 
     at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:730) 
     at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:730) 
     at scala.Option.foreach(Option.scala:236) 
     at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:730) 
     at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1450) 
     at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1411) 
     at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48) 

15/07/21 01:18:20 INFO BlockManagerMaster: Removed 20150526-135628-3255597322-5050-1304-S8 successfully in removeExecutor 
15/07/21 01:18:20 INFO DAGScheduler: Host added was in lost list earlier:vamp-m-2.c.quantum-854.internal 
Jul 21, 2015 1:01:15 AM INFO: parquet.hadoop.ParquetFileReader: Initiating action with parallelism: 5 
15/07/21 01:18:20 INFO SparkContext: Invoking stop() from shutdown hook 



{"Event":"SparkListenerTaskStart","Stage ID":2,"Stage Attempt ID":0,"Task Info":{"Task ID":11,"Index":6,"Attempt":2,"Launch Time":1437616381852,"Executor ID":"20150526-135628-3255597322-5050-1304-S8","Host":"uc1f-bioinfocloud-vamp-m-2.c.quantum-device-854.internal","Locality":"PROCESS_LOCAL","Speculative":false,"Getting Result Time":0,"Finish Time":0,"Failed":false,"Accumulables":[]}} 

{ "Sự kiện": "SparkListenerExecutorRemoved", "Dấu thời gian": 1437616389696, "Executor ID": "20150526-135628-3255597322-5050-1304-S8", "Removed Lý do ":" Người thực thi bị mất "} {" Sự kiện ":" SparkListenerTaskEnd "," ID giai đoạn ": 2," ID thử nghiệm giai đoạn ": 0," Loại tác vụ ":" ResultTask "," Lý do kết thúc tác vụ ": {" Lý do ":" ExecutorLostFailure "," ID của người thực thi ":" 20150526-135628-3255597322-5050-1304-S8 "}," Thông tin tác vụ ": {" ID tác vụ ": 11," Chỉ mục ": 6," Nỗ lực ": 2, "Thời gian khởi chạy": 1437616381852, "ID của người điều hành": "20150526-135628-3255597322-5050-1304-S8", "Máy chủ": "uc1f-bioinfocloud-vamp-m-2.c.quantum-device-854 .internal "," Địa phương ":" PROCESS_LOCAL "," Đầu cơ ": sai" Thời gian kết quả ": 0," F inish Time ": 1437616389697," Không thành công ": true" Accumulables ": []}} {" Sự kiện ":" SparkListenerExecutorAdded "," Dấu thời gian ": 1437616389707," ID công tố ":" 20150526-135628-3255597322-5050- 1304-S8 "," Thông tin của người thi hành ": {" Máy chủ ":" uc1f-bioinfocloud-vamp-m-2.c.quantum-device-854.internal "," Tổng số lõi ": 1," Url đăng nhập ": { }}} {"Sự kiện": "SparkListenerTaskStart", "ID giai đoạn": 2, "ID thử giai đoạn": 0, "Thông tin nhiệm vụ": {"ID tác vụ": 12, "Chỉ mục": 6, "Thử" : 3, "Thời gian khởi chạy": 1437616389702, "ID của người điều hành": "20150526-135628-3255597322-5050-1304-S8", "Máy chủ": "uc1f-bioinfocloud-vamp-m-2.c.quantum-device- 854.internal "," Địa phương ":" PROCESS_LOCAL "," Đầu cơ ": sai," Thời gian kết quả ": 0," Thời gian kết thúc ": 0," Không thành công ": sai" Accumulables ": []}} { "Sự kiện": "SparkListenerExecutorRemoved", "Dấu thời gian": 1437616397743, "ID của người thi hành": "20150526-135628-3255597322-5050-1304-S8", "Lý do đã xóa": "Người thi hành bị mất"} {"Sự kiện": " SparkListenerTaskEnd "," ID giai đoạn ": 2," ID thử nghiệm giai đoạn ": 0," Loại tác vụ ":" ResultTask "," Lý do kết thúc tác vụ ": {" Lý do ":" ExecutorLostFailure "," ID công tố ":" 20150526-135628-3255597322- 5050-1304-S8 "}," Thông tin tác vụ ": {" ID tác vụ ": 12," Chỉ mục ": 6," Lần thử ": 3," Thời gian khởi chạy ": 1437616389702," ID công tố ":" 20150526-135628- "." Thời gian kết quả ": 0," Kết thúc thời gian ": 1437616397743," Không thành công ": true" Accumulables ": []}} {" Sự kiện ":" SparkListenerStageCompleted "," Stage Info ": {" Stage ID ": 2 , "ID thử nghiệm giai đoạn": 0, "Tên giai đoạn": "thu thập tại /opt/work/V2ProcessRecords.py:215","Số nhiệm vụ": 72, "Thông tin RDD": [{"RDD ID": 6 , "Tên": "PythonRDD", "ID mẹ": [0], "Mức lưu trữ": {"Sử dụng đĩa": sai, "Sử dụng bộ nhớ": sai, "Sử dụng ExternalBlockStore": sai, "Deserialized": false , "Sao chép": 1}, "Số phân vùng": 72, "Số phân vùng được lưu trong bộ nhớ cache": 0, "Kích thước bộ nhớ": 0, "Kích thước ExternalBlockStore": 0, "Kích thước đĩa": 0}, {"RDD ID ": 0," Tên ":" gs: // uc1f-bioinfocloud-vamp-m/văn học/xml/P */*.nxml "," Phạm vi ":" {\ "id \": \ "0 \", \ "tên \": \ "wholeTextFiles \"} "," ID mẹ ": []," Cấp độ lưu trữ ": {" Sử dụng đĩa ": sai", sử dụng bộ nhớ ": sai", sử dụng ExternalBlockStore ": false," Deserialized ": false," Replication ": 1}," Number of Partitions ": 72," Số phân vùng được lưu trong bộ nhớ cache ": 0, "Kích thước bộ nhớ": 0, "Kích thước ExternalBlockStore": 0, "Kích thước đĩa": 0}], "ID mẹ": [], "Chi tiết": "", "Thời gian gửi": 1437616365566, "Thời gian hoàn thành": 1437616397753, "Thất bại lý do": "Công việc bị hủy bỏ do thất bại giai đoạn: Nhiệm vụ 6 ở giai đoạn 2.0 thất bại 4 lần, thất bại gần đây nhất: Mất nhiệm vụ 6.3 ở giai đoạn 2.0 (TID 12, uc1f-bioinfocloud-vamp-m-2.c. quantum-device-854.internal): ExecutorLostFailure (thực thi 20150526-135628-3255597322-5050-1304-S8 bị mất) \ nDòng xếp chồng: "," Accumulables ": []}} {" Sự kiện ":" SparkListenerJobEnd "," ID công việc ": 2," Thời gian hoàn thành ": 1437616397755," Kết quả công việc ": {" Kết quả ":" Lệnh công việc "," Ngoại lệ ": {" Nội dung ":" Đã hủy công việc do lỗi giai đoạn: Nhiệm vụ 6 ở giai đoạn 2.0 không thành công 4 lần, thất bại gần đây nhất: Mất nhiệm vụ 6.3 i n giai đoạn 2.0 (TID 12, uc1f-bioinfocloud-vamp-m-2.c.quantum-device-854.internal): ExecutorLostFailure (thi hành 20150526-135628-3255597322-5050-1304-S8 bị mất) \ nTrình theo dõi luồng: ", "Dấu vết ngăn xếp": [{"Khai báo lớp": "org.apache.spark.scheduler.DAGScheduler", "Tên phương thức": "org $ apache $ spark $ scheduler $ DAGScheduler $$ failJobAndIndependentStages", "Tên tệp": " DAGScheduler.scala "," Số dòng ": 1266}, {" Khai báo lớp ":" org.apache.spark.scheduler.DAGScheduler $$ anonfun $ abortStage $ 1 "," Tên phương thức ":" áp dụng "," Tên tệp " : "DAGScheduler.scala", "Số dòng": 1257}, {"Khai báo lớp": "org.apache.spark.scheduler.DAGScheduler $$ anonfun $ abortStage $ 1", "Tên phương thức": "áp dụng", "Tệp Tên ":" DAGScheduler.scala "," Số dòng ": 1256}, {" Khai báo lớp ":" scala.collection.mutable.ResizableArray $ class "," Tên phương thức ":" foreach "," Tên tệp ":" ResizableArray.scala "," Số dòng ": 59}, {" Khai báo lớp ":" scala.collection.mutable.ArrayBuffer "," Tên phương thức ":" foreach "," Tên tệp ":" ArrayBuffer.scala "," Dòng số ": 47}, {" Khai báo lớp học ":" org.apache.spark.scheduler.DAGScheduler "," Tên phương thức ":" abortStage "," Tên tệp ":" DAGScheduler.scala "," Số dòng ": 1256}, {" Khai báo lớp ":" tổ chức .apache.spark.scheduler.DAGScheduler $$ anonfun $ handleTaskSetFailed $ 1 "," Tên phương thức ":" áp dụng "," Tên tệp ":" DAGScheduler.scala "," Số dòng ": 730}, {" Khai báo lớp ": "org.apache.spark.scheduler.DAGScheduler $$ anonfun $ handleTaskSetFailed $ 1", "Tên phương thức": "áp dụng", "Tên tệp": "DAGScheduler.scala", "Số dòng": 730}, {"Khai báo lớp ":" scala.Option "," Tên phương thức ":" foreach "," Tên tệp ":" Option.scala "," Số dòng ": 236}, {" Khai báo lớp ":" org.apache.spark.scheduler .DAGScheduler "," Tên phương thức ":" handleTaskSetFailed "," Tên tệp ":" DAGScheduler.scala "," Số dòng ": 730}, {" Khai báo lớp ":" org.apache.spark.scheduler.DAGSchedulerEventProcessLoop ", "Tên phương thức": "onReceive", "Tên tệp": "DAGScheduler.scala", "Số dòng": 1450}, {"Khai báo lớp": "org.apache.spark.scheduler.DAGSchedulerEventProcessLoop", "Tên phương thức" : "onReceive", "Tên tệp": "DAGScheduler.scala" , "Số dòng": 1411}, {"Khai báo lớp": "org.apache.spark.util.EventLoop $$ anon $ 1", "Tên phương thức": "chạy", "Tên tệp": "EventLoop.scala" "Số dòng": 48}]}}}

+0

Phiên bản Spark 1.4.1 – User17

Trả lời

2

Thật khó để nói vấn đề là gì nếu không có nhật ký của người thi hành không thành công và không phải của người lái xe nhưng rất có thể đó là vấn đề về bộ nhớ. Hãy thử tăng số phân vùng một cách đáng kể (nếu hiện tại của bạn là 32 thử 200)

+0

Tôi đã thử với 200 phân vùng nhưng không thành công. Ngay cả với 800 phân vùng với một số cài đặt cấu hình khác. Nhưng – User17

+0

Nhưng tôi nhận được cùng một vấn đề Nhiệm vụ bị mất 4 lần so với ExecutorLostFailure. Đôi khi tôi nhận được Thời gian kết nối. Hơn nữa kể từ khi tôi đang trên Google Cloud Mesos Cluster tôi đã thử và tìm kiếm các bản ghi như bạn đã đề xuất và xem var/log/mesos (các bản ghi chủ và bản ghi là cả hai trong/var/log/mesos theo mặc định như được đề xuất trong tài liệu về mesos spark) Tôi không tìm thấy bất kỳ thông tin tốt. Có bất kỳ nhật ký nào khác mà tôi có thể xem hoặc đăng ở đây không ?? Với các bản ghi thực thi bạn có ý giống nhau không? – User17

3

Lỗi này xảy ra vì tác vụ thất bại hơn bốn lần. Hãy thử tăng tính song song trong cụm của bạn bằng thông số sau.

--conf "spark.default.parallelism=100" 

Đặt giá trị song song từ 2 đến 3 lần số lõi có sẵn trên cụm của bạn. Nếu điều đó không hiệu quả. thử tăng tính song song theo kiểu mũ. tức là nếu tính song song hiện tại của bạn không làm việc nhân với hai và vân vân. Ngoài ra tôi đã quan sát thấy rằng nó sẽ giúp nếu mức độ song song của bạn là một số nguyên tố đặc biệt là nếu bạn đang sử dụng groupByKkey.

+0

Tăng số phân vùng không giúp ích cho trường hợp của tôi. Nhưng thiết lập số lượng song song sẽ giúp. – kennyut

2

Tôi gặp sự cố này và sự cố đối với tôi là tỷ lệ rất cao của một khóa trong tác vụ reduceByKey. Đây là (tôi nghĩ) gây ra một danh sách lớn để thu thập trên một trong những người thực thi, sau đó sẽ ném lỗi OOM.

Giải pháp cho tôi là chỉ lọc ra các khóa có dân số cao trước khi thực hiện reduceByKey, nhưng tôi đánh giá cao việc này có thể hoặc không thể thực hiện tùy thuộc vào đơn đăng ký của bạn. Tôi không cần tất cả dữ liệu của mình.

1

Nguyên nhân phổ biến nhất của ExecutorLostFailure theo sự hiểu biết của tôi là OOM trong thực thi.

Để giải quyết vấn đề OOM, người ta cần tìm ra nguyên nhân chính xác gây ra vấn đề này. Đơn giản chỉ cần tăng tính song song mặc định hoặc tăng bộ nhớ thực thi không phải là một giải pháp chiến lược.

Nếu bạn nhìn vào những gì tăng song song làm là nó cố gắng tạo ra nhiều người thực thi hơn để mỗi người thực thi có thể làm việc trên dữ liệu ít hơn và ít hơn. Nhưng nếu dữ liệu của bạn bị sai lệch sao cho khóa trên phân vùng dữ liệu xảy ra (đối với tính song song) có nhiều dữ liệu hơn, thì việc tăng tính song song sẽ không có hiệu lực. Tương tự chỉ bằng cách tăng bộ nhớ Executor sẽ là một cách rất không hiệu quả khi bàn giao một kịch bản như thể chỉ có một người thực hiện thất bại với ExecutorLostFailure, yêu cầu bộ nhớ tăng lên cho tất cả các người thực thi sẽ làm cho ứng dụng của bạn yêu cầu nhiều bộ nhớ hơn.

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