더북(TheBook)

6.1.5 결과를 파일로 저장

 

이제 DStreamsaveAsTextFiles 메서드를 사용해 앞서 계산한 결과를 파일로 저장해 보자. 이 메서드는 접두(prefix) 문자열(필수 인수)과 접미(suffix) 문자열(선택 인수)을 받아 데이터를 주기적으로 저장할 경로를 구성한다. 접두 문자열과 접미 문자열을 모두 전달하면 각 미니배치 RDD의 데이터는 <접두 문자열>-<밀리초 단위 시각>.<접미 문자열> 폴더에 저장된다. 반면 접두 문자열만 전달하면 <접두 문자열>-<밀리초 단위 시각>을 경로로 사용한다. 즉, 미니배치 RDD의 주기(예제에서는 5초)마다 새로운 디렉터리를 생성한다는 의미다. 스파크 스트리밍은 이 디렉터리 아래에 미니배치 RDD의 각 파티션을 part-xxxxx라는 파일로 저장한다(xxxxx에는 파티션 번호를 기록한다).

RDD 폴더별로 part-xxxxx 파일을 하나씩만 생성하려면 데이터를 저장하기 전에 DStream의 파티션을 한 개로 줄여야 한다. numPerType의 각 RDD가 가진 요소의 개수는 최대 두 개이므로 모든 데이터를 단일 파티션에 저장해도 메모리 문제가 발생하지 않는다. 다음과 같이 repartition을 호출하자.

scala> numPerType.repartition(1).saveAsTextFiles("/home/spark/ch06output/output", "txt")

 

saveAsTextFiles 메서드는 출력 파일을 하둡과 호환되는 분산 파일 시스템(예: HDFS)에 저장한다. 예제 프로그램을 로컬 클러스터에서 실행하면 로컬 파일 시스템에 저장한다.

Note

DStreamprint(n) 메서드를 활용하면 스트리밍 애플리케이션을 간단하게 테스트할 수 있다. 이 메서드는 각 미니배치 RDD의 상위 n개(기본 값: 열 개) 요소를 출력한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.