2017-12-15 12 views
1

Flink 참조 데이터를 저장/액세스 할 수있는 위치에 대한 조언을 찾고 있습니다. 여기의 유스 케이스는 정말 간단하다 - 나는 국가 목록과 함께 단일 열 텍스트 파일을 가지고있다. 트위터 데이터를 스트리밍하고 트윗의 (구문 분석 된) 위치 필드를 기반으로 텍스트 파일의 국가를 일치시킵니다. IDE (이클립스)에서 정적 Flavor Mapper (즉, Flinks MapFunction 구현)의 정적 Build 메서드를 통해 루틴이 실행될 때 정적 ArrayList가 채워지는 것이 좋습니다. 이 클래스는 직렬화를 사용하지 않으면 내부 정적입니다. 요점은, 오버라이드 된 맵 함수가 스트림 내에서 런타임에 호출 될 때, 국가 데이터의 정적 배열은 기다리고, 완전히 채워져서 매칭 될 준비가되어 있다는 것입니다. 매력을 발휘합니다. 그러나 Flink 클러스터에 배포 할 때 (실제로 지난 주에 텍스트 파일을 찾기 위해 코드를 얻으려고), 배열은 이고은 Build 메서드의 일부로 채워집니다. 데이터를 사용하는 데있어 신비하게 사라졌으며 배열 크기가 0으로 남았습니다. (에르고, 일치하는 항목이 많지 않으므로 2 가지 질문 - Eclipse에서 작동하고 배포하지 않는 이유는 무엇입니까? 많은 Eclipse 단위 테스트는 무의미합니다.) 아니면 좀 더 일반적으로, Flink 내에서 이런 종류의 고정 된 고정 참조 데이터를 참조하는 올바른 방법은 무엇입니까? (Eclipse에서 발견되는 방식으로 클러스터 ...)Flink 참조 데이터 조언/모범 사례

답변

0

정적 참조 데이터를 처리하기위한 표준 방법은 RichMapFunction or RichFlatMapFunctionopen 방법에서의 데이터를로드한다. 풍부한 기능을 생성하고 로컬 상태를 확정하는 데 유용 openclose 방법이 있고, 액세스 할 런타임 컨텍스트.

+0

완벽. 참조 데이터를 채우는 'Build'메소드를 RichMapFunction의 'Open'메소드로 이동하면 모두 작동합니다. Reflection 데이터는 이미 Flink가 처음부터 Kafka에서 소비하고있는 데이터의 일부이기 때문에 Reflection 데이터를 일종의 Pre-Flink 처리로 옮기는 것이 좋을 듯하다. –