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 | 대상에 동일한 경로/파일이 없을 때만 복사 (중복 방지) |
-skipcrccheck | CRC 검사 생략으로 복사 속도 향상 |
경로 끝 / | 슬래시(/ )가 붙으면 하위 디렉토리만 복사됨 |
hadoop distcp -overwrite -skipcrccheck /data/raw/products/ /data/warehouse/products/
기존 파일이 있더라도 무조건 덮어씀
빠르게 전체 파일을 갱신하고 싶을 때 유용
hadoop distcp -update -delete -skipcrccheck /data/raw/products/ /data/warehouse/products/
옵션 | 설명 |
---|---|
-update | 소스에 더 최신 파일이 있을 경우만 덮어쓰기 |
-delete | 대상에만 존재하는 파일은 삭제됨 (소스 기준 정리됨) |
hadoop distcp -overwrite -delete -skipcrccheck /data/raw/products/ /data/warehouse/products/
소스 기준으로 대상 전체를 동기화
대상에만 있는 파일은 삭제되고, 나머지는 덮어써짐
실수로 데이터 손실이 발생할 수 있으므로 꼭 검증 후 사용
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와 연동하여 자동화할 수도 있습니다.