Sqoop 작업을 돌릴 때마다 HDFS 의 staging 경로 아래에 libjars 디렉터리가 생기고 JAR 이 복사된다. Sqoop 이 MapReduce 작업을 만들면서, 태스크가 실행될 노드에 필요한 라이브러리를 DistributedCache 로 전달하기 때문이다. 작업마다 독립적으로 동작하게 하는 구조라 재사용을 전제하지 않는다.
작업 수가 많으면 이 복사가 매번 발생해 제출 시간이 늘고 HDFS 에 작은 파일이 쌓인다. 줄이는 방법은 두 갈래다.
가장 확실한 방법은 필요한 JAR 을 모든 NodeManager 노드의 로컬 경로에 미리 배치하는 것이다. 이러면 매 작업마다 전달할 필요가 없다. JDBC 드라이버처럼 바뀌지 않고 모든 작업이 공통으로 쓰는 것에 적합하다.
# 각 노드에서
sudo cp ojdbc11.jar $SQOOP_HOME/lib/
배포판에 따라 경로가 다르므로(/opt/cloudera/parcels/CDH/lib/sqoop/lib 등) 실제 위치를 확인한다. 노드가 늘어날 때 빠뜨리기 쉬우므로 노드 프로비저닝 절차에 넣어 둔다.
노드마다 배포하기 어렵다면 HDFS 한 곳에 올려 두고 매번 그 경로를 가리킨다. 복사 자체는 없어지지 않지만 관리 지점이 한 곳으로 모이고, 버전을 바꿀 때 파일 하나만 갈아 끼우면 된다.
hdfs dfs -mkdir -p /user/common/libjars
hdfs dfs -put -f ojdbc11.jar /user/common/libjars/
sqoop import \
-libjars hdfs:///user/common/libjars/ojdbc11.jar \
-Dmapreduce.job.queuename=root.batch \
--connect jdbc:oracle:thin:@//db.example.net:1521/ORCLPDB \
--username ${DB_USER} \
--password-file /user/svc/.sqoop/db.password \
--table ORDERS \
--target-dir /data/staging/orders \
--num-mappers 4
-libjars 는 하이픈 하나이고 반드시 도구 이름(import 등) 바로 뒤, 도구 고유 옵션(--connect 등)보다 앞에 와야 한다. Hadoop 의 공통 옵션이라 파서가 그 위치에서만 인식한다. --connect 뒤에 두면 조용히 무시되고 클래스를 찾지 못한다는 오류로 돌아온다. -D 옵션도 마찬가지다.
여러 개를 줄 때는 쉼표로 잇는다. 와일드카드는 쓸 수 없으므로 파일을 하나하나 적는다.
--password 로 값을 직접 주면 ps 출력과 셸 히스토리에 그대로 남는다. 파일이나 자격증명 저장소를 쓴다.
# 비밀번호 파일 — 개행이 들어가지 않게 만든다
echo -n "${DB_PASSWORD}" > /tmp/db.password
hdfs dfs -put /tmp/db.password /user/svc/.sqoop/db.password
hdfs dfs -chmod 400 /user/svc/.sqoop/db.password
rm -f /tmp/db.password
--password-file 은 파일 내용을 그대로 읽으므로 끝에 개행이 있으면 비밀번호의 일부로 취급된다. echo -n 을 쓴다.
--as-parquetfile 은 Sqoop 1 에서 Kite SDK 에 의존하며 배포판에 따라 동작이 다르다. 안정적으로 쓰려면 Hive 테이블로 받거나, 중간 포맷으로 받은 뒤 변환한다.
sqoop import \
-libjars hdfs:///user/common/libjars/ojdbc11.jar \
--connect jdbc:oracle:thin:@//db.example.net:1521/ORCLPDB \
--username ${DB_USER} --password-file /user/svc/.sqoop/db.password \
--table ORDERS \
--hive-import --create-hive-table --hive-table staging.orders \
--num-mappers 4
Apache Sqoop 은 2021년 6월 종료(retired)돼 Apache Attic 으로 옮겨졌다[1]. 더는 새 릴리스가 나오지 않으므로 신규 구성이라면 Spark JDBC 나 NiFi 같은 대체 수단을 먼저 검토한다. 위 내용은 Cloudera 배포판에 포함된 Sqoop 1.4.x 계열 기준이며, 벤더 배포판마다 경로와 패치 수준이 다를 수 있다. 배포판별 지원 종료 시점은 벤더 공지를 확인한다. (확인 필요)
Apache Attic — Sqoop. 2026-09-20 확인. https://attic.apache.org/projects/sqoop.html ↩︎