2011-10-09 4 views
3

나는 HDFS 내에서 특정 레이아웃을 필요로하는 Hadoop 프로그램을 작성했으며 이후에 HDFS에서 파일을 가져와야합니다. 그것은 단일 노드 Hadoop 설정에서 작동하며 Elastic MapReduce 내의 노드 중 10 개에서 작동하도록하고 싶습니다. 내가 해왔 무엇Elastic MapReduce HDFS에서 데이터 가져 오기 및 나가기

이 같은 것입니다 :

./elastic-mapreduce --create --alive 
JOBID="j-XXX" # output from creation 
./elastic-mapreduce -j $JOBID --ssh "hadoop fs -cp s3://bucket-id/XXX /XXX" 
./elastic-mapreduce -j $JOBID --jar s3://bucket-id/jars/hdeploy.jar --main-class com.ranjan.HadoopMain --arg /XXX 

이 비동기이지만, 작업의 완료 때, 나는 그래서이

./elastic-mapreduce -j $JOBID --ssh "hadoop fs -cp /XXX s3://bucket-id/XXX-output" 
./elastic-mapreduce -j $JOBID --terminate 

을 할 수있는이 정렬의 동안가 작동하지만, 내가보기 싫은 clunky. 이것을하는 더 깨끗한 방법이 있습니까?

감사합니다.

답변

9

당신은 맵리 듀스 작업

 
# download from s3 
$ hadoop distcp s3://bucket/path/on/s3/ /target/path/on/hdfs/ 
# upload to s3 
$ hadoop distcp /source/path/on/hdfs/ s3://bucket/path/on/s3/ 

이 S3에서 병렬로 복사 할 전체 클러스터를 사용합니다로 파일을 복사 할 distcp를 사용할 수 있습니다.

(참고 : 각 경로에 슬래시가 중요하다 후행 디렉토리에서 디렉토리에 복사합니다)

+2

: 탄성 맵리 듀스 -j $ JOB_ID --jar S3 : //elasticmapreduce/libs/script-runner/script-runner.jar를 - -args "$는 {S3_BUCKET} /scripts/copy_to_hdfs.sh는 ..."이 copy_to_hdfs.sh가하는 떠들썩한 파티 스크립트입니다 : 하둡 FS의 -cp는 [...] 제어 흐름은 여전히 ​​조금 보인다 복잡한 일이지만 무인으로 실행할 수 있습니다. – rongenre

0

이 매트 kelcey @ 명령이 최소한의 권한 수준을 가지고 S3에있는 파일을 기대 distcp는 무엇입니까? 어떤 이유로 부트 스트랩 또는 단계 스크립트 내에서 파일에 액세스 할 수 있도록 파일의 사용 권한 수준을 "열기/다운로드"및 "모든 사용자"의 "사용 권한보기"로 설정해야합니다.

내가 S3에 저장된 스크립트를 실행하는 EMR의 기능을 사용하여 한 일을 결국 무엇