외부의 rdbms와 분산 스토리지 사이를 연결하여 데이터를 주고받기 위한 도구
정말 이 하나의 목적만을 위해서 나왔다보니, 실질적으로 대체할 수 있는 방법이 거의 없어왔다
sqoop의 장점(왜 사용하나요?)
- RDBMS의 데이터를 하둡 에코시스템의 분산 스토리지에 빠르게 전달하기 위해서 Sqoop이 사용됨
- MapReduce application은 외부의 RDBMS에 직접적으로 접근할 수 없으므로, 이에 접근하여 데이터를 추출하기 위해서 Sqoop이 등장했다. 이러한 외부의 데이터베이스 시스템과 연결되기 위한 JDBC extension을 제공해준다.
- Sqoop의 작업은 "straightforward" 즉, 간단하다.
- 물론 이 간단하다는 simple과는 다르다. 좀 더 직관적이고 확실하게 전달된다는 의미이며 전달과정에서 데이터에 변형이 있을 가능성없이 그대로 전달된다는 의미로 이해하였다.
- 병렬적으로 데이터 전송이 이루어 진다.
- sqoop내의 mapper로 데이터 세트들이 서로 다른 파티션으로 분할되고 전송되는 각각의 레코드는 데이터베이스 메타 데이터를 사용하여 데이터 유형을 추론하기 때문이 안전한 방식으로 처리된다.
- 즉 수평적 확장성이 크고,
대용량 데이터 처리
가 유용하다.
추출이후 바로 가공하여 로드하는 효율적인 ETL 방식
에 유용하다.
- 프로세스를 자동화하여 효율적으로 운영된다.
- 분산 스토리지로의 import 뿐 아니라 export도 지원
- HDFS뿐 아니라, S3 스토리지도 지원한다.
- 다양한 Datatype을 지원한다
- decimal, unsigned bigint 등...
sqoop의 단점
- 외부 데이터베이스와 연결함에 있어서 비효율적
- RDBMS와 연결하기 위해서 결국 JDBC connection을 사용하고 이는 즉, 데이터베이스 연결을 위한 추가 과정이 필요함을 의미한다.
- 또한 특정 데이터 베이스에서는 활용하기 어려운 connector를 제공하여 결국 외부 데이터베이스와 효율적으로 연결하는 것 자체가 어려울 수도 있다.
- 멈추거나 다시 시작할 수 없다.
- sqoop의 각 step은 atomic 즉 원자성을 띈다.
- 데이터 추출은, 데이터 소스 서버에 영향을 받는다.
- 데이터를 추출하고자 하는 RDBMS의 성능에 따라 sqoop 작업의 효율성이 달라지게 된다.
- 이는 즉, 대량의 데이터를 추출하고자 하면 역으로 비즈니스를 운영하는 RDBMS의 성능에도 영향을 미치게 된다는 것 또한 의미한다.
- MapReduce 기반으로 작업되다 보니 느리다.