checkPoint and savePoint
說到savePoint,一定會想到checkPoint,先來說下兩者的區別:
checkpoint:應用定時觸發,用戶保存狀態,會過期,內部應用失敗重啓的時候使用,默認情況下cancel時,會刪除之前的checkpoint。
savepoint:用戶手動執行,不會過期,相當於備份,可以在cancel的時候使用。一般可以用於修改並行度,程序升級等等。
所以如果想要在程序停掉後重啓,數據一致的情況下,強烈推薦使用cancel時做savepoint,當然,如果程序中沒有涉及到state,可以不用。
savePoint的使用
1.在flink-conf.yaml中配置savepoint存儲位置,不是必須設置,如果設置了,那麼做savepoint的時候,可以不指定位置,系統會默認使用你設置的位置。如果沒有設置,那麼在做savepoint的時候,必須指定位置,不然就會報錯。
state.savepoints.dir: hdfs://namenode:9000/flink/savepoints 或者是 hdfs:/flink/savepoints
2.觸發savePoint【直接觸發或者是在cancel的時候觸發】
flink savepoint jobId [targetDirectory] [-yid yarnAppId]【針對on yarn模式需要指定-yid參數】
flink cancel -s [targetDirectory] jobId [-yid yarnAppId]【針對on yarn模式需要指定-yid參數】
這裏的jobId和yid我這裏截圖說明一下:
這個是yid
這個是jobId:
所以這裏對應的命令就是:
- flink savepoint 2f0511c8fe430acb81a968aff0cbb5b9 -d hdfs:/user/root/flink -yid application_1560242904558_0258 或者flink savepoint 2f0511c8fe430acb81a968aff0cbb5b9 -yid application_1560242904558_0258 這裏-d是指定位置
- flink cancel -s hdfs:/user/root/flink 2f0511c8fe430acb81a968aff0cbb5b9 -yid application_1560242904558_0258 或者flink cancel -s 2f0511c8fe430acb81a968aff0cbb5b9 -yid application_1560242904558_0258 這裏-s後面可以跟路徑也可以不跟路徑,取決於state.savepoints.dir有沒有配置
從指定的savepoint啓動job
flink run -s savepointPath [runArgs]
例子:我上面已經做了一個savepoint,保存的路徑爲hdfs:/user/root/flink 生成的文件是 savepoint-402ba9-e7e4915ab401
那我要從這個savepoint中啓動程序,對應命令就是:
nohup flink run -m yarn-cluster \
-yn 3 -yjm 1024 -ytm 1024 -p 3 \
-s hdfs:/user/root/flink/savepoint-402ba9-e7e4915ab401 \
-c com.sp.writetohbase.writetohbase \
/usr/local/myjob/writetokafka/MyFlinkTTest-1.0-SNAPSHOT.jar &
多了一個-s 其他參數和正常啓動時的參數一樣
如果savepoint時報錯,可以去jobmanager的日誌上去查看具體原因。