복붙노트

[HADOOP] hadoop에서 hdfs로 S3 복사하기

HADOOP

hadoop에서 hdfs로 S3 복사하기

나는 Amazon EMR에서 마호 타고 벡터 라이징 작업을 성공적으로 마쳤다. 이제 HDFS에서 S3로 결과를 복사하려고합니다 (향후 클러스터링에서 사용하기 위해).

For that I've used hadoop distcp:

den@aws:~$ elastic-mapreduce --jar s3://elasticmapreduce/samples/distcp/distcp.jar \
> --arg hdfs://my.bucket/prj1/seqfiles \
> --arg s3n://ACCESS_KEY:SECRET_KEY@my.bucket/prj1/seqfiles \
> -j $JOBID

실패한. 그 제안을 발견 : 사용 s3distcp 시도해보십시오 :

elastic-mapreduce --jobflow $JOBID \
> --jar --arg s3://eu-west-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \
> --arg --s3Endpoint --arg 's3-eu-west-1.amazonaws.com' \
> --arg --src --arg 'hdfs://my.bucket/prj1/seqfiles' \
> --arg --dest --arg 's3://my.bucket/prj1/seqfiles'

두 경우 모두 동일한 오류가 있습니다 : java.net.UnknownHostException : 알 수없는 호스트 : my.bucket 두 번째 경우의 전체 오류 출력보다 낮습니다.

2012-09-06 13:25:08,209 FATAL com.amazon.external.elasticmapreduce.s3distcp.S3DistCp (main): Failed to get source file system
java.net.UnknownHostException: unknown host: my.bucket
    at org.apache.hadoop.ipc.Client$Connection.<init>(Client.java:214)
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1193)
    at org.apache.hadoop.ipc.Client.call(Client.java:1047)
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225)
    at $Proxy1.getProtocolVersion(Unknown Source)
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:401)
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384)
    at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:127)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:249)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:214)
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1413)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:68)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1431)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:256)
    at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:431)
    at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:216)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
    at com.amazon.external.elasticmapreduce.s3distcp.Main.main(Main.java:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:187)

해결법

  1. ==============================

    1.버그를 발견했습니다.

    버그를 발견했습니다.

    그러나:

    2012-09-06 13:27:33,909 FATAL com.amazon.external.elasticmapreduce.s3distcp.S3DistCp (main): Failed to get source file system
    

    그래서. 소스 경로에 슬래시를 1 개 더 추가 한 후 문제없이 작업이 시작되었습니다. 올바른 명령은 다음과 같습니다.

    elastic-mapreduce --jobflow $JOBID \
    > --jar --arg s3://eu-west-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \
    > --arg --s3Endpoint --arg 's3-eu-west-1.amazonaws.com' \
    > --arg --src --arg 'hdfs:///my.bucket/prj1/seqfiles' \
    > --arg --dest --arg 's3://my.bucket/prj1/seqfiles'
    

    추신 그래서. 그것은 효과가있다. 작업이 올바르게 완료되었습니다. 30Gb 파일로 dir을 성공적으로 복사했습니다.

  2. from https://stackoverflow.com/questions/12301613/hadoop-copying-from-hdfs-to-s3 by cc-by-sa and MIT license