2016-08-23 4 views
0

여러 소스에서 일부 세션 로그를 읽는 스트리밍 응용 프로그램을 개발해야합니다. 일괄 처리 간격은 약 5 분이 걸릴 수 있습니다.Spark Streaming의 파일 스트림 제한점

문제는 각 배치에서 얻는 파일이 엄청나게 다릅니다. 각 배치마다 하나씩 10MB의 파일을 얻은 다음 다른 배치에서 20GB 정도의 파일을 가져올 수 있습니다.

이 문제를 해결할 수있는 방법이 있는지 알고 싶습니다. 각 배치마다 파일 스트림이 생성 할 수있는 RDD의 크기에 제한이 있습니까?

각 배치의 고정 된 양의 데이터를 RDD로 읽기 위해 스파크 스트리밍을 제한 할 수 있습니까?

답변

0

내가 아는 한이를 제한하는 직접적인 방법은 없습니다. 고려 대상 파일은 FileStream의 isNewFile 전용 함수에서 제어됩니다. 코드를 기반으로 한 가지 해결 방법을 생각할 수 있습니다.

필터 기능을 사용하여 읽을 파일 수를 제한하십시오. 10 개 이상의 파일은 false를 반환하고 touch 명령을 사용하여 다음 창에서 고려해야 할 파일의 타임 스탬프를 업데이트합니다.

globalcounter=10 
val filterF = new Function[Path, Boolean] { 
    def apply(file: Path): Boolean = { 
    globalcounter -- 
    if(globalcounter > 0) { 
     return true // consider only 10 files. 
    } 
    // touch the file so that timestamp of the file is updated. 
    return false 
    } 
} 
+0

확인 해결책을 찾았습니다. 우리는 맞춤 수신기를 사용해 보았는데 완벽하게 작동합니다. 다음은 샘플 코드입니다. http://spark.apache.org/docs/1.6.1/streaming-custom-receivers.html – vgunnu