메트릭 체크 포인트 플랫폼을 FLINK

FLINK 플랫폼, 편안한 API를 자신의 작업 체크 포인트 목록 프로그램을 제공하기 위해 따라 FLINK뿐만 아니라 시작에 따라 검사 전에 검사의 존재를 얻을 필요가있다.

공식 웹 사이트에 편안한 API를 참조  https://ci.apache.org/projects/flink/flink-docs-release-1.9/monitoring/metrics.html

특히 주목할 있습니다 :

필요 작업 이름에 따라 변환 할 수 있도록 한 프로세스의 플랫폼, 태스크 ID와 FLINK 플랫폼 태스크 ID (작업 ID)가 동일한 개념이 아니다. 즉,에 의해 '/ 작업 / 개요'가져 오기 모든 작업 정보, 동료 이름에 따라.

2, 사실 체크 포인트 및 세이브 포인트 기본 단결, 구별 단지 'is_savepoint'필드 그래서.

3 패리티 때문에 다수의 경로의 존재가 이러한 파일로서 포맷 FLINK : ///, HDFS를 : /// 차이 리눅스 존재는 시스템 복사본의 코드 FLINK 코어 소스의 직접 사용 windwos 가격이 너무 높으면에 대한 참조 때문에 '<artifactId를> FLINK 코어 </ artifactId를>'이 상대적으로 무거운 작업입니다,하지만 확실하게 인용 될 후속하는 플랫폼을 싶습니다 있지만.

네, 체크 포인트의 적법성 검증, 소스 코드 AbstractFsCheckpointStorage.resolveCheckpointPointer () 메소드,하지만 난 수 없습니다 쓰기, 이유는 내가 그이 executionJobVertex executionJobVertex이 executionGraph를 구축 한 후 건설 타당성을 검증 생각하기 때문에, 그리고 수표로 때 I checkpointPointer 매개 변수로 하나의 경로 만 있어야는 후속 작업을 포함하지 않는다. 나는 체크 포인트가 작업을 시작할 때 이것 만 사용됩니다 생각합니다. 내가 체크 포인트 코드를 다시 시작하라는 메시지가되는 생각 그래서 다음을 참조하는 저를 작성.

 

다음과 같이 전체 코드는

패키지 com.xx.monitor.metric.example을; 

수입 com.alibaba.fastjson.JSONArray;
수입 com.alibaba.fastjson.JSONObject;
수입 com.xx.common.http.Request;
수입 com.xx.common.http.Response;
수입 com.google.common.base.Preconditions;
수입 org.apache.flink.core.fs.FileStatus;
수입 org.apache.flink.core.fs.FileSystem;
수입 org.apache.flink.core.fs.Path; 

수입 java.io.FileNotFoundException;
수입 때 java.io.IOException; 

/ ** 
 * 설명 : 
 * 1, FLINK作业체크 포인트列表展示
 * 2, FLINK作业세이브 포인트列表展示
 * 3,校验 
 * @author : wulei는 
 버전 * 1.0 
 * 작성 날짜 시간 : 2020년 2월 25일 11:24 오전. 
 * 업데이트 날짜 시간 : 
 * / 
공용  클래스 CheckPointDemoTest { 

    / ** 체크 포인트 타입 플래그 * / 
    공공  정적  최종 문자열 CHECKPOINT_TYPE = "체크 포인트" ; 

    / ** 세이브 포인트 타입 플래그 * / 
    공공  정적  최종 문자열 SAVEPOINT_TYPE = "세이브 포인트" ; 

    / ** FLINK 메트릭 편안한 주소 * / 
    공공  정적  최종 문자열 ADDRESS_PREFIX = "http://192.168.90.212:8081" ; 

    / **FLINK 측정 편안한 API를 * / 
    공공  정적  최종 문자열 JOBS_OVERVIEW_SUFFIX = "/ 작업 / 개요" ;
    공공  정적  최종 문자열 JOBS_CHECKPOINTS_SUFFIX = "/ 작업 / % S / 체크 포인트" ; 

    공공  정적  무효 메인 (문자열 []에 args) {
         // 데모리스트 
        checkpointList ( "윈도우 소켓 단어 수" ); 
        savepointList ( "윈도우 소켓 단어 수" ); 

        // 유효성 검사 데모 

        시도 { 
            검증 ( "checkpointPointer" ); 
        } 캐치(IOException이 전자) {
             // 프로세스 IOException이 
        } 

    } 

    / ** 
     * 1, 체크인 / 세이브路径存在性校验
     * 2合法性校验
     * @param checkpointPointer 
     * @throws IOException이
      * / 
    공공  정적  무효 검증 (문자열 checkpointPointer) 던졌습니다 IOException가 {
         // 1,存在性校验 
        Preconditions.checkNotNull (checkpointPointer, "checkpointPointer은 null 일 수 없습니다" ); 
        Preconditions.checkArgument ( checkpointPointer.isEmpty (), "checkpointPointer는 비워 둘 수 없습니다!" ); 

        //포인터가 실제로 유효한 파일 경로에 있는지 확인 
        최종 경로 경로;
        시도 { 
            경로 = 새로운 경로 (checkpointPointer를); 
        } 
        캐치 (예외 전자) {
             던져  새로운 IOException이 ( "체크 포인트 / 세이브 포인트 경로를 '"+ checkpointPointer + "'유효한 파일 URI 없습니다."+ 
                    "어느 포인터 경로가 유효하지 않거나, 체크 포인트는 다른 상태 백엔드에 의해 만들어진 . " ); 
        } 

        // 파일 시스템에 액세스 할 수 있는지 확인 
        최종 파일 시스템 FS를;
        시도 { 
            FS =path.getFileSystem (); 
        } 
        캐치 (IOException이 전자) {
             던져  새로운 IOException가 ( "체크 포인트 / 세이브 포인트 경로의 수에 액세스 할 파일 시스템 '"+ 
                    checkpointPointer + "'." , 전자); 
        } 

        최종 FileStatus 상태;
        시도 { 
            상태 = fs.getFileStatus (경로); 
        } 
        캐치 (FileNotFoundException이 전자) {
             던져  새로운 + (FileNotFoundException이를 "체크 포인트 또는 세이브 포인트를 찾을 수 없습니다 ' 
                    ' '파일 시스템'" "파일 / 디렉토리를"+ checkpointPointer + '); 
        } 

        // 우리가 여기있는 경우, 파일 / 디렉토리가 존재 
        최종 경로 checkpointDir는;
        최종 FileStatus metadataFileStatus; 

        //이 이 디렉토리 일 경우, 우리는 메타 데이터 파일을 찾을 필요가 
        있는 경우 (status.isDir ()) { 
            checkpointDir = status.getPath ();
            최종 경로 metadataFilePath = 새로운 경로 (경로, "_metadata" );
            시도 { 
                metadataFileStatus = fs.getFileStatus (metadataFilePath); 
            } 
            캐치 (FileNotFoundException이 전자) {
                던져  새로운 ( ' "메타 데이터 파일 + _metadata 찾을 수 없습니다"FileNotFoundException이를 
                        "디렉토리에'"+ 경로 +를 '+' '체크 포인트 / 세이브 포인트로드를 시도하십시오. " 
                        "대신 디렉토리의 메타 데이터 파일에서 직접합니다. " ); 
            } 
        } 

        // 2,合法性校验




    } 

    공공  정적  무효 checkpointList (문자열 작업 이름) { 
        포인트 (CHECKPOINT_TYPE, 작업 이름, ADDRESS_PREFIX); 

    } 

    공공  정적  무효 savepointList (문자열 JOBNAME) { 
        포인트 (SAVEPOINT_TYPE, 작업 이름, ADDRESS_PREFIX);


    
     * 
     * FLINK 지표 자체가 평안한 API 호출의 형태로 제공 모니터링 
     2; 1 연결, 작업 ID TASKID의 플랫폼 (taskInstanceId)이 기능 키 * 플랫폼은 두 가지이다 
     * http://192.168.90.212 : 8081 / 채용 정보 / 631fea77b842918e2e33070e45c03477 / 체크 포인트 
     * @param PointType
      * / 
    개인  정적  무효 포인트 (PointType 문자열, 문자열 작업 이름, 문자열 주소) { 

        // 모든 작업을 GET, 그 후에 ON 기반 jobisd GET 작업 이름 
        응답 <된 JSONObject> 응답 = 새 새 요청 ( + 어드레스 JOBS_OVERVIEW_SUFFIX) ... GET (); 
        문자열 JID = ;
         IF (response.isSuccess ()) {
            JSONArray jobArray = response.getContent () getJSONArray ( "작업". );
            위한 ( INT I = 0; I <jobArray.size (); I ++ ) { 
                된 JSONObject jobJson = jobArray.getJSONObject (I); 
                문자열 이름은 jobJson.getString ( "이름"= );
                경우 ( 널 (null) = 이름 &&! name.equals (작업 이름)) { 
                    JID = jobJson.getString ( "JID" );
                    휴식 ; 
                } 
            } 
        } 

        경우 (JID ==  ) {
             ;
        } 

        응답 <된 JSONObject> = responseCheckPoints 새로운 요청 (어드레스 + . 및 String.format (JOBS_CHECKPOINTS_SUFFIX, JID))) (얻는다;
        경우 (response.isSuccess ()) { 
            JSONArray historyArray . responseCheckPoints.getContent = () getJSONArray ( "히스토리" );
            위한 ( INT I = 0; I <historyArray.size (); I ++ ) { 
                된 JSONObject jobJson = historyArray.getJSONObject (I); 
                부울 is_savepoint = jobJson.getBoolean ( "is_savepoint" );
                경우(pointType.equals (CHECKPOINT_TYPE) &&!is_savepoint) {
                     // 체크 포인트 정보 
                    문자열 ID = jobJson.getString ( "ID" ); 
                    문자열 상태 jobJson.getString ( "상태"= ); 
                    문자열 trigger_timestamp = jobJson.getString ( "trigger_timestamp" ); 
                    문자열 end_to_end_duration는 jobJson.getString ( "end_to_end_duration를"= ); 
                    문자열 num_acknowledged_subtasks = jobJson.getString ( "num_acknowledged_subtasks" );
                    휴식 ; 
                } 다른 {
                     //세이브 포인트 정보 

                } 
            } 
        } 
    } 

}
<! - FLINK은 종속성 -> 
        <의존성> 
            <의 groupId> org.apache.flink </의 groupId> 
            <artifactId를> FLINK 코어 </ artifactId를> 
            <버전> $ {flink.version} </ 버전> 
        </ 의존성 >

 

추천

출처www.cnblogs.com/1023linlin/p/12368097.html