데이터X 개요 DataX는 다양한 데이터 저장소 간의 데이터를 안정적으로 전송하는 오프라인 데이터 동기화 도구입니다. MySQL, Oracle, HDFS, Hive, HBase, FTP와 같은 다양한 데이터 소스 간의 데이터를 이동시킬 수 있습니다.
핵심 기술 아키텍처 DataX는 플래그런 + 플러그인 아키텍처를 사용하며, Reader와 Writer 플러그인을 통해 데이터를 읽고 쓰는 기능을 제공합니다. Reader는 데이터를 수집하고, Writer는 데이터를 목적지에 저장하며, Framework는 두 모듈간의 통로 역할을 합니다.
플러그인 기반 확장성 DataX는 다양한 데이터 소스를 지원하며, 주요 데이터베이스와 클라우드 저장소, NoSQL 데이터베이스 등을 연결할 수 있습니다. 아래 표는 주요 지원 데이터 소스를 요약합니다.
| 유형 | 데이터 소스 | 리더 지원 | 라이터 지원 |
|---|---|---|---|
| RDBMS | MySQL, Oracle, PostgreSQL, SQLServer, DRDS 등 | √ | √ |
| 클라우드 스토리지 | ODPS, OSS, OCS 등 | √ | √ |
| NoSQL | HBase, MongoDB, Hive 등 | √ | √ |
| 텍스트 기반 | _TXT, FTP, HDFS 등 | √ | √ |
작업 실행 프로세스 DataX는 작업(Job)을 실행하기 위해 다음과 같이 단계를 거칩니다:
- 작업(Job)을 시작하면 하나의 프로세스가 할당됩니다.
- 작업은 소스 데이터베이스에 따라 여러개의 서브_TASK로 분할됩니다.
- Scheduler는 분할된 TASK를 그룹 단위로 실행하고, 각 그룹은 병렬로 작업을 처리합니다.
- 각 TASK는 독립적인 스레드를 통해 데이터를 읽고 씁니다.
- 모든 TASK가 완료되면 작업이 완료됩니다.
핵심 기능
- 데이터 통합성 보장: 데이터 손실 없이 안정적인 전송을 보장합니다.
- 데이터 변환: 전송 중에 데이터를 가공하거나 필터링할 수 있습니다.
- 플로우 제어: 통신 속도를 세밀하게 제어할 수 있습니다.
- 성능 최적화: 병렬 처리를 통해 대량 데이터 전송을 효율화합니다.
- 에러 재COVERY: 네트워크 문제 등을 대비한 재시도 기능을 제공합니다.
- 사용자 친화적 인터페이스: 상세한 로그와 성능 모니터링을 제공합니다.
데이터X와 Sqoop의 비교
| 기능 | DataX | Sqoop |
|---|---|---|
| 런타임 모드 | 싱글 프로세스 멀티 스레드 | 맵-리듀스 |
| 분산 실행 | 지원하지 않음(스케ジューラ를 통해 가능) | 지원 |
| 속도 제어 | 지원 | 커스텀 필요 |
| 통계 및 모니터링 | 기본 제공 | 없음 |
사용 방법 DataX 작업을 실행하려면 다음 단계를 수행합니다:
- 필요한 Reader와 Writer를 선택합니다.
- 작업 내용을 JSON 형식의 설정 파일에 기록합니다.
- 명령어를 통해 작업을 실행합니다.
예를 들어 MySQL에서 HDFS로 데이터를 전송하려면 다음과 같이 작업 파일을 작성하고 실행합니다:
{
"job": {
"content": [
{
"reader": {
"name": "mysql리더",
"파라미터": {
"컬럼": ["*"],
"conexion": [
{
"jdbcUrl": ["jdbc:mysql://마스터:3306/DB이름?useUnicode=true&characterEncoding=utf-8"],
"테이블": ["테이블명"]
}
],
"패스워드": "비밀번호",
"유저네임": "사용자명"
}
},
"라이터": {
"이름": "hdfs라이터",
"파라미터": {
"컬럼": [
{"이름": "id", "타입": "int"},
{"이름": "이름", "타입": "string"}
],
"압축": "",
"기본FS": "hdfs://마스터:9000",
"필드Delimiter": ",",
"fileName": "파일명",
"fileType": "텍스트",
"path": "hdfs경로",
"writeMode": "어펜드"
}
}
}
],
"설정": {
"속도": {
"채널": "1"
}
}
}
}
실행 명령어:
python ./bin/datax.py ./작업/작업.json
이러한 방법을 통해 DataX를 통해 다양한 데이터 소스 간의 데이터를 원활하게 동기화할 수 있습니다.