[hadoop] hadoop distcp

hadoop 2016. 2. 5. 11:59


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디렉토리가 복사된다. 



출처 :

https://hadoop.apache.org/docs/r1.2.1/distcp.html

Posted by '김용환'
,