sqoop의 용도

외부의 rdbms와 분산 스토리지 사이를 연결하여 데이터를 주고받기 위한 도구

정말 이 하나의 목적만을 위해서 나왔다보니, 실질적으로 대체할 수 있는 방법이 거의 없어왔다

sqoop의 장점(왜 사용하나요?)

  1. RDBMS의 데이터를 하둡 에코시스템의 분산 스토리지에 빠르게 전달하기 위해서 Sqoop이 사용됨
    1. MapReduce application은 외부의 RDBMS에 직접적으로 접근할 수 없으므로, 이에 접근하여 데이터를 추출하기 위해서 Sqoop이 등장했다. 이러한 외부의 데이터베이스 시스템과 연결되기 위한 JDBC extension을 제공해준다.
  2. Sqoop의 작업은 "straightforward" 즉, 간단하다.
    1. 물론 이 간단하다는 simple과는 다르다. 좀 더 직관적이고 확실하게 전달된다는 의미이며 전달과정에서 데이터에 변형이 있을 가능성없이 그대로 전달된다는 의미로 이해하였다.
  3. 병렬적으로 데이터 전송이 이루어 진다.
    1. sqoop내의 mapper로 데이터 세트들이 서로 다른 파티션으로 분할되고 전송되는 각각의 레코드는 데이터베이스 메타 데이터를 사용하여 데이터 유형을 추론하기 때문이 안전한 방식으로 처리된다.
    2. 즉 수평적 확장성이 크고, 대용량 데이터 처리가 유용하다.
    3. 추출이후 바로 가공하여 로드하는 효율적인 ETL 방식에 유용하다.
  4. 프로세스를 자동화하여 효율적으로 운영된다.
  5. 분산 스토리지로의 import 뿐 아니라 export도 지원
  6. HDFS뿐 아니라, S3 스토리지도 지원한다.
  7. 다양한 Datatype을 지원한다
    1. decimal, unsigned bigint 등...

sqoop의 단점

  1. 외부 데이터베이스와 연결함에 있어서 비효율적
    1. RDBMS와 연결하기 위해서 결국 JDBC connection을 사용하고 이는 즉, 데이터베이스 연결을 위한 추가 과정이 필요함을 의미한다.
    2. 또한 특정 데이터 베이스에서는 활용하기 어려운 connector를 제공하여 결국 외부 데이터베이스와 효율적으로 연결하는 것 자체가 어려울 수도 있다.
  2. 멈추거나 다시 시작할 수 없다.
    1. sqoop의 각 step은 atomic 즉 원자성을 띈다.
  3. 데이터 추출은, 데이터 소스 서버에 영향을 받는다.
    1. 데이터를 추출하고자 하는 RDBMS의 성능에 따라 sqoop 작업의 효율성이 달라지게 된다.
    2. 이는 즉, 대량의 데이터를 추출하고자 하면 역으로 비즈니스를 운영하는 RDBMS의 성능에도 영향을 미치게 된다는 것 또한 의미한다.
  4. MapReduce 기반으로 작업되다 보니 느리다.