Talend 대용량 데이터 정렬(Sorting)
Studio에서 제공하는 Sorting 기능은 크게 tSortRow와 tExternalSortRow 두개로 나눠져 있습니다. 이는 정렬작업을 Job의 리소스를 이용 하느냐? 외부(외부 프로그램)에서 정렬 작업을 하는냐에 따라 다르게 사용됩니다. 만약 데이터 사이즈가 작은 경우는 일반적인 tSortRow를 이용하면 되지만, 대량 데이터(job이 사용가능한 메모리를 초과하는 사이즈)의 경우는 데이터를 조회하는 과정에서 “java.lang.OutOfMemory” 오류를 만날 확률이 높습니다.
그럼 tSortRow와 tExternalSortRow에 대해서 자세히 알아보겠습니다.
tSortRow
tSortRow는 정렬을 위한 기본 Component이며, 정렬작업을 Job의 메모리 또는 파일(선택 옵션)에서 수행 가능합니다. 다만, 여기서 말한 정렬작업은 정렬이 필요한 데이터를 모두 Job의 메모리에 로딩 후에 이루어집니다. 만약 로딩해야할 데이터(정렬할 데이터) 사이즈가 Job의 메모리보다 크다면 로딩 과정(정렬과정 아님)에서 “java.lang.OutOfMemoryError”가 발생합니다. 따라서 Job의 메모리가 사용가능한 정도로 데이터를 조회해야합니다. (필요하다면 메모리 사이즈 증가 *이전 글 참고)
[정렬작업을 파일에서 수행하는 방법]
1) tSortRow 의 Advanced settings에서 Sort on disk 체크
2) Temp data directory path에 정렬 작업에 쓰일 파일의 디렉토리 경로(파일은 자동으로 생성됨)
3) 기타 옵션 설정(디렉토리 생성유무 및 버퍼사이즈)
[주의!] 정렬작업을 파일에서 수행하는 것은 이미 Job의 메모리에 정렬할 데이터가 전체 로드된 후에 파일에서 정렬을 수행합니다.
정렬할 데이터 로드작업 부터 파일에 쓰기 위해서는 아래 tExternalSortRow를 사용하셔야 합니다.
tExternalSortRow
tExternalSortRow는 tSortRow의 로딩단계에서 발생하는 “java.lang.OutOfMemoryError”를 물리 칠 수 있는 Componenet입니다. 구동 방식은 조회 된 데이터를 Job의 메모리가 아닌 “①별도의 파일”(Component에서 temp파일을 저장할 디렉토리 지정)로 저장하고, 저장된 파일을 “②별도 외부 정렬 프로그램”을 사용하여 정렬을 수행합니다. 그리고 외부 정렬 프로그램에서 “③정렬된 결과 파일(외부 정렬 프로그램에서 생성한)”을 다시 읽어 다음 Component에 데이터를 넘겨줍니니다.
[참고1] 해당 Componet의 상세 설명 및 외부 Sorting 프로그램에 대한 자세한 언급은 Talend에서 제공하지 않고 있지 않아서 위 내용정도만 확인되었습니다.
[참고2] tExternalSortOutput도 동일한 방식으로 구동됩니다.