2016-04-28 17 views
7

Tôi đang chạy ứng dụng Spark Streaming trên YARN ở chế độ cụm và tôi đang cố gắng thực hiện tắt máy một cách duyên dáng để khi ứng dụng bị giết, nó sẽ hoàn thành việc thực thi lô vi mô trước khi dừng.Làm cách nào để dừng ứng dụng Spark Streaming trên YARN một cách duyên dáng?

Tiếp theo một số hướng dẫn Tôi đã cấu hình spark.streaming.stopGracefullyOnShutdown để true và tôi đã thêm đoạn mã sau vào ứng dụng của tôi:

sys.ShutdownHookThread { 
    log.info("Gracefully stopping Spark Streaming Application") 
    ssc.stop(true, true) 
    log.info("Application stopped") 
} 

Tuy nhiên khi tôi giết các ứng dụng với

yarn application -kill application_1454432703118_3558

vi lô thực hiện tại thời điểm đó không được hoàn thành.

Trong trình điều khiển Tôi thấy dòng đầu tiên của nhật ký được in ("Gracefully stop Spark Streaming Application") nhưng không phải dòng cuối cùng ("Ứng dụng đã dừng").

ERROR yarn.ApplicationMaster: RECEIVED SIGNAL 15: SIGTERM 
INFO streaming.MySparkJob: Gracefully stopping Spark Streaming Application 
INFO scheduler.JobGenerator: Stopping JobGenerator gracefully 
INFO scheduler.JobGenerator: Waiting for all received blocks to be consumed for job generation 
INFO scheduler.JobGenerator: Waited for all received blocks to be consumed for job generation 
INFO streaming.StreamingContext: Invoking stop(stopGracefully=true) from shutdown hook 

Trong Chấp hành viên log Tôi thấy các lỗi sau:

ERROR executor.CoarseGrainedExecutorBackend: Driver 192.168.6.21:49767 disassociated! Shutting down. 
INFO storage.DiskBlockManager: Shutdown hook called 
WARN remote.ReliableDeliverySupervisor: Association with remote system [akka.tcp://[email protected]:49767] has failed, address is now gated for [5000] ms. Reason: [Disassociated] 
INFO util.ShutdownHookManager: Shutdown hook called 

Tôi nghĩ vấn đề có liên quan đến cách SỢI gửi tín hiệu kill ứng dụng. Bất kỳ ý tưởng về làm thế nào tôi có thể làm cho các ứng dụng dừng lại một cách duyên dáng?

+0

bạn có thể giải quyết được không? –

+0

Không, tiếc là không. – nicola

Trả lời

2

bạn nên truy cập trang thực thi để xem nơi tài xế của bạn đang chạy (trên nút nào). ssh đến nút đó và thực hiện các thao tác sau:

ps -ef | grep 'app_name' 

(thay thế app_name bằng tên lớp/tên ứng dụng). nó sẽ liệt kê vài quy trình. Nhìn vào quá trình, một số sẽ là đứa trẻ của người kia. Chọn id của quy trình gốc nhiều nhất và gửi SIGTERM

kill pid 

sau một thời gian bạn sẽ thấy ứng dụng của mình đã chấm dứt một cách duyên dáng.

Ngoài ra bây giờ bạn không cần phải thêm các móc đó để tắt máy. sử dụng cấu hình spark.streaming.stopGracefullyOnShutdown để giúp tắt máy một cách duyên dáng

+0

Điều này có vẻ như là lựa chọn tốt nhất. Khi sử dụng điểm kiểm tra trong Spark Streaming, 'ứng dụng sợi -kill' không giết quá trình gốc của ứng dụng và việc kiểm tra sẽ vẫn tiếp tục ngay cả sau đó. –

+0

mà giết ứng dụng ngay lập tức, đã thử vài lần: ( –

+0

@GauravShah, Ý của bạn là gì? ',' Lệnh giết sợi hoặc lệnh diệt linux? –

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