하둡(Hadoop)에서 데이터 복사하는 방법

  • HDFS에서 데이터를 복사하는 방법은 아주 다양하다.
  • 하지만 효율적으로 데이터를 복사하는게 중요하다

데이터를 복사하는 다양한 방법

  • 일단 데이터를 복사하는 방법은 다양하다

로컬 <-> 클러스터

  • 아래 속성을 통해서 로컬에 있는 데이터를, 클러스터에 있는 데이터를 옮길 수 있다.
    • copyToLocal
    • put
    • get

클러스터 <-> 클러스터

  • 클러스터간에 데이터를 옮기기 위해서는 아래와 같이 하면 된다.
  • 클러스터 -> 로컬 -> 클러스터

과연 이렇게 하는 사람이 있을까 싶지만, 이렇게 하는 사람을 내가 보았음 클러스터 -> 클러스터 로 데이터를 옮기는 방법은 한가지가 아니다.

  • cp
  • distcp

두 가지 방법의 차이를 알지 못한다면, 작업에 엄청난 문제가 생길 것이다.

  • 만약 distcp를 이용하면 아래와 같은 에러가 발생할 수 있다.
  • 아래 에러는 distcp는 MR을 사용하기 때문에 block-size가 맞지 않아서 생기는 문제,
  • checksum-checks를 skip을 할 수 있으나, 문제가 생길 수 있기 때문에
  • -bp 옵션을 사용해 block-sizes를 보존(preserver)하는게 좋다.

Caused by: java.io.IOException: Check-sum mismatch between Source and target differ in block-size. Use -pb to preserve block-sizes during copy. Alternatively, skip checksum-checks altogether, using -skipCrc. (NOTE: By skipping checksums, one runs the risk of masking data-corruption during file-transfer.)

  • cp는 하나의 pipeline으로 복사하기 때문에 상당히 속도가 느리다.
  • 반면, distcp는 mapreduce를 이용하기 때문에 속도가 빠르다.
  • 위에서 block-size를 고려해야 하는 이유도 mr을 이용하기 때문이다.

bash hadoop distcp hdfs://A/user/jslee/data hdfs://B/user/jslee/data

shell hadoop fs -cp hdfs://A/user/jslee/data hdfs://B/user/jslee/data

+ Recent posts