[Hadoop] DistCp 커맨드

최지영·2025년 6월 25일
0

Hadoop DistCp를 활용한 HDFS 디렉토리 병합 및 덮어쓰기 처리 방법

Hadoop의 distcp(Distributed Copy)는 대용량 HDFS 파일이나 디렉토리를 병렬로 복사할 수 있는 강력한 도구입니다. 이 글에서는 기존 경로에 저장된 상품 관련 데이터를 새로운 디렉토리로 병합 복사하는 과정을 소개하며, 덮어쓰기(-overwrite), 삭제(-delete) 옵션까지 함께 설명합니다.


예시 디렉토리 구조

/data/raw/products/{CATEGORY}/{YYYY}/{MM}/{DD}/{HH}
/data/warehouse/products/{CATEGORY}/{YYYY}/{MM}/{DD}/{HH}

  • {CATEGORY} 예시: electronics, furniture, clothing
  • /data/warehouse/products는 이미 존재하며, /data/raw/products에서 데이터를 병합하려는 목적입니다.

기본 병합 복사 명령

hadoop distcp -update -skipcrccheck /data/raw/products/ /data/warehouse/products/
옵션설명
-update대상에 동일한 경로/파일이 없을 때만 복사 (중복 방지)
-skipcrccheckCRC 검사 생략으로 복사 속도 향상
경로 끝 /슬래시(/)가 붙으면 하위 디렉토리만 복사됨

덮어쓰기 및 삭제를 포함한 복사 옵션

1. 무조건 덮어쓰기 (-overwrite)

hadoop distcp -overwrite -skipcrccheck /data/raw/products/ /data/warehouse/products/

기존 파일이 있더라도 무조건 덮어씀

빠르게 전체 파일을 갱신하고 싶을 때 유용

2. 최신 파일로 덮어쓰고, 불필요한 파일 삭제 (-update -delete)

hadoop distcp -update -delete -skipcrccheck /data/raw/products/ /data/warehouse/products/

옵션설명
-update소스에 더 최신 파일이 있을 경우만 덮어쓰기
-delete대상에만 존재하는 파일은 삭제됨 (소스 기준 정리됨)

3. 완전 동기화 복사 (-overwrite -delete)

hadoop distcp -overwrite -delete -skipcrccheck /data/raw/products/ /data/warehouse/products/

소스 기준으로 대상 전체를 동기화

대상에만 있는 파일은 삭제되고, 나머지는 덮어써짐

실수로 데이터 손실이 발생할 수 있으므로 꼭 검증 후 사용

4. 대용량 복사를 위한 성능 최적화 예시

hadoop distcp \
  -m 50 \
  -update \
  -delete \
  -skipcrccheck \
  -strategy dynamic \
  /data/raw/products/ /data/warehouse/products/
옵션설명
-m병렬 복사 태스크 수 지정 (기본값: 20, 예시에서는 50)
-strategy dynamic파일 크기에 따라 작업을 유동적으로 분산

복사 후 검증 명령어

hdfs dfs -count /data/raw/products
hdfs dfs -count /data/warehouse/products

hdfs dfs -du -s /data/raw/products
hdfs dfs -du -s /data/warehouse/products

파일 수와 총 용량을 비교하여 복사 결과를 검증

hdfs dfs -ls -R 명령어로 파일 목록도 비교 가능

결론

hadoop distcp는 단순 복사를 넘어 대용량 데이터에 대한 정합성 유지와 병합 갱신에 매우 유용한 도구입니다. 특히 실시간 동기화나 배치 이동이 필요한 환경에서는 -update, -overwrite, -delete 옵션을 조합해 다양한 상황에 대응할 수 있습니다.

정기적인 데이터 이관이나 데이터 레이크 최적화에도 효과적이며, 필요 시 Airflow나 Shell Script와 연동하여 자동화할 수도 있습니다.

0개의 댓글