Xplenty Job의 고속화 요령

1. 소량 데이터의 처리 속도 높이기

Xplenty는 데이터 처리 플랫폼으로 Hadoop을 사용하며 일반 작업은 MapReduce에서 실행됩니다. 원래 MapReduce는 빅 데이터 처리 기반으로 설계되었기에 데이터 처리량에 관계없이 시작 및 종료 후의 정리 작업에 추가적인 작업시간(오버헤드)이 걸립니다.

따라서 Xplenty는 작은 데이터 양을 처리하는 작업의 경우 MapReduce를 사용하지 않고 마스터 노드에서 처리를 수행시키는 옵션을 제공합니다. 패키지의 변수 화면에서 변수(_EXEC_TYPE)와 변수 값('local')  설정함으로써, MapReduce를 통하지 않고 스크립트 기반(Pig)에서 작업을 실행하여 작업 실행의 빠른 실행을 가능하게 합니다.

thumbnail image

2. Salesforce에서 데이터 읽기 처리 가속화

Xplenty에서는 Salesforce 객체에서 대량의 데이터를 추출하는 경우 PK Chunking 설정을 활성화하여, Primary Key를 기반으로 지정한 청크 크기로 분할하여 병렬로 읽기 처리를 하여 처리 고속화를 가능하게 합니다.

thumbnail image

3. Rest API에서 데이터 쓰기 처리 병렬화

사용 사례에 따라서는 서드파티 REST API에 방대한 양의 데이터를 신속하게 기록해야 하는 경우도 있습니다. 다량의 데이터에 대해 API를 단일 스레드로 실행하면 당연히 시간이 많이 걸립니다. 이상적으로는 데이터 처리량을 높이기 위해 API의 병렬 실행이 가장 방법입니다.

Xplenty는 Hadoop MapReduce를 사용하여 서버 클러스터에 컴퓨팅 작업을 분산하기 때문에 (메모리 및 디스크 제약으로 인해) 단일 서버에서 처리 할 수 없는 대규모 데이터 세트에 이상적인 제품입니다.이렇게 하면 페타바이트급 데이터의 병렬 처리가 가능합니다.

MapReduce 처리는 네 가지 주요 단계로 나뉩니다.

  • Map
    키로 그룹화된 키 값 쌍입니다.

  • Shuffle
    동일한 키를 가진 모든 값은 Reducer에 의해 함께 묶입니다.

  • Sort
    모든 레코드는 Reducer에 의해 키별로 정렬됩니다.

  • Reduce
    Reducer에 의해서 데이터 값이 집계됩니다

서드 파티 API에 대한 데이터 쓰기 속도를 높이기 위해 Curl 요청을 병렬로 실행할 수 있습니다.
다음 그림과 같이 Curl()을 실행하는 Select 컴포넌트의 앞에 Sort 컴포넌트를 추가하면 작업이 여러 클러스터 노드에 분산됩니다.(작업은 Mapper가 아닌 Reducer에 의해서 처리 되기 때문에)

thumbnail image

기본적으로 Xplenty는 단일 Hadoop Reducer를 사용합니다(Xplenty의 시스템 변수 '_DEFAULT_PARALLELISM'은 0으로 설정됨), _DEFAULT_PARALLELISM은 단일 노드(1 노드)의 Hadoop 클러스터당 최대 '5' 까지 설정할 수 있으며, 이는 5개의 병렬 스레드의 처리를 의미합니다.

<패키지 변수 화면>

thumbnail image

Xplenty 변수 _DEFAULT_PARALLELISM을 6 이상으로 늘리려면 Hadoop 클러스터가 다중 노드로 설정된 경우에만 유효합니다.
예를 들어 _DEFAULT_PARALLELISM를 15개의 병렬 스레드를 사용한다고 설정한다면  3노드 클러스터( 3 X 5 = 15 ) 상에서 잡을 실행시킬 필요가 있습니다.

4. 시스템 변수

일부 시스템 변수는 _MAX_COMBINED_SPLIT_SIZE(**)와 같이 특정 시나리오에서 파일 처리에 걸리는 오버헤드를 최소화 하고, 성능을 최적화 하는 변수가 있습니다.
** 단일 작업에서 처리할 데이터의 양을 바이트 단위로 지정. 설정값보다 작은 파일은 이 크기에 도달할 때까지 결합되며, 이 값보다 큰 파일 - 비압축 혹은 Bzip2 압축의 경우 - 는 설정된 크기를 기준으로 분할

Xplenty 시스템 변수 목록