[hadoop] hadoop distcp
hadoo2의 distcp를 사용하여 hdfs끼리 복사하는 예시이다.
(문서를 보면, distcp2를 설명하지만, 사실 지금은 distcp를 쓰면 자동으로 distcp2이다..)
/usr/lib/hadoop-mapreduce/hadoop-distcp-2.6.0-cdh5.5.1.jar)
$ hadoop distcp -m 12 hdfs://internal-hadoop1.google.com/user/www/score /user/www/score
m은 동시에 copy할 수 있는 map 개수인데, 12라고 적어도 12개의 mapper가 동작하지 않을 수 있다. 실제 보니까, 내부 hadoop에서 13개의 mapper가 동작했다.
만약 특정 사용자를 owner로 하고 싶다면, HADOOP_USER_NAME를 사용한다.
$ HADOOP_USER_NAME=google hadoop distcp -m 12 hdfs://internal-hadoop1.google.com/user/www/score /user/www/score
$ hadoop fs -ls /user/www/score
drwxr-xr-x - google supergroup 0 2016-02-05 11:21 /user/www/score
만약 이미 존재하는 파일이 있으면, overwite가 되지 않는다. chown을 잘 쓰거나 -overwrite와 -delete 하려 super user 권한(hdfs)이 필요하다.
$ HADOOP_USER_NAME=hdfs hadoop fs -chown deploy /user/www/score
$ HADOOP_USER_NAME=hdfs hadoop distcp -m 12 -overwrite -delete hdfs://internal-hadoop1.google.com/user/www/score /user/www/score
권한이 없으면, 아래와 같이 에러가 발생한다.
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=deploy, access=WRITE, inode="/user/www/score":hdfs:supergroup:drwxr-xr-x
또한, 다중 복사가 가능하다.
hadoop fs -cp A디렉토리 B디렉토리 C디렉토리 하면, C 디렉토리에 A디렉토리와 B디렉토리가 복사된다.
출처 :