2017-05-08 20 views
0

HDFS에 2 개의 파일과 1 개의 디렉토리가 있습니다.s3distcp 단일 명령으로 HDFS에서 S3으로 파일 및 디렉토리 복사

-rw-R - 1 r-- 사용 하둡 하둡 11,194,859 2017년 5월 5일 19시 53분 HDFS : ///outputfiles/abc_output.txt drwxr
-XR-X - 하둡 하둡 0 2017-05- 05 19시 28분 HDFS : /// outputfiles/sample_directory
-rw-R - r--로 1 하둡 하둡 68507436 2017년 5월 5일 19시 55분 HDFS :

I ///outputfiles/sample_output.txt 한 명령으로 HDFS에서 gzip 형식의 abc_output.txt 및 sample_directory를 S3에 복사하려고합니다. S3에 파일을 결합하지 않으려합니다. sample_directory.gzip abc_output.txt.gzip

나는 다음과 같은 시도 :

내 S3 버킷에는 다음이 포함되어야

S3 - 거리-CP --s3Endpoint = s3.amazonaws.com - -src = hdfs : /// outputfiles/--dest = s3 : // bucket-name/outputfiles/--outputCodec = gzip

그러나 소스에서 대상으로 모든 파일과 폴더를 복사합니다. Deduce the HDFS path at runtime on EMR 참조함으로써

는, I는 아래의 명령을 시도 :

S3-CP-DIST = --s3Endpoint s3.amazonaws.com --src = HDFS : /// outputfiles/S3 = --dest : // bucket-name/outputfiles/--srcPattern =. * abc_output.txt. sample_directory. --outputCodec = gzip하지만 실패했습니다.

답변

1

S3DistCp는 원본에서 대상으로 데이터를 압축하는 방법에 대한 두 가지 옵션을 지원합니다. --srcPattern --groupBy http://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html

문서는 무엇을 할 수 있는지에 대한 자기 분명하다. 나머지는 할 수 없습니다.

srcPattern을 사용하면 원본 파일과 일치하는 RegEx를 작성할 수 있습니다. s3distcp는 일치하는 파일을 대상에 개별적으로 복사하기 만합니다.

예를 들어

: --srcPattern='.*(txt|sample_folder).*' 그것은 대상에 이름 sample_folder을 가진 소스 폴더 안에 파일을 복사 할 대상에 일치하는 디렉토리를 생성합니다 txt 확장 &을 가진 모든 파일을 복사합니다

http://regexr.com/3ftn0 (당신은 정규식의 기반을 디자인 할 수 있습니다 귀하의 요구 사항입니다.)

--srcPattern 외에도 --outputCodec=gzip 옵션을 적용하면 일치하는 개별 파일이 그에 따라 압축됩니다. 그들은 전체적으로 압축되지 않습니다. 일치하는 모든 파일을 하나의 단일 파일로 연결해야하는 경우 (내용이 연결되지 않은 경우) s3-dist-cp와 압축 명령을 개별적으로 실행해야합니다.

abc_output.txt 파일과 sample_directory 내의 모든 파일을 하나의 파일로 연결하고 gzip 형식으로 압축하려면 --groupBy를 사용해야합니다. groupby를 사용하는 경우 일치하는 정규식 패턴이 비슷해야합니다. 정규식에 괄호가 있어야 파일을 그룹화하는 방법을 나타내야하며 괄호 문과 일치하는 모든 항목은 단일 출력 파일로 결합됩니다.http://regexr.com/3ftn9

--groupBy='.*(file|noname).*[0-9].*' --outputCodec=gz 

이 일치하는 모든 파일의 내용을 연결하고 하나는

파일 .GZ 생성합니다 : 예를 들어