2014-10-11 5 views
8

아마존 S3 파일 크기 제한이 announcement에 따라 5T 있어야하지만,EntityTooLarge 오류가 아마존 S3에 5G 파일을 업로드 할 때

'/mahler%2Fparquet%2Fpageview%2Fall-2014-2000%2F_temporary%2F_attempt_201410112050_0009_r_000221_2222%2Fpart-r-222.parquet' XML Error Message: 
    <?xml version="1.0" encoding="UTF-8"?> 
    <Error> 
    <Code>EntityTooLarge</Code> 
    <Message>Your proposed upload exceeds the maximum allowed size</Message> 
    <ProposedSize>5374138340</ProposedSize> 
    ... 
    <MaxSizeAllowed>5368709120</MaxSizeAllowed> 
    </Error> 

이 그것을 만드는 5G 파일을 업로드 할 때 나는 다음과 같은 오류를 얻고있다 S3가 5G 업로드 만 수락하는 것처럼 보입니다. Apache Spark SQL을 사용하여 SchemRDD.saveAsParquetFile 메소드를 사용하여 Parquet 데이터 세트를 작성합니다. 전체 스택 추적

org.apache.hadoop.fs.s3.S3Exception: org.jets3t.service.S3ServiceException: S3 PUT failed for '/mahler%2Fparquet%2Fpageview%2Fall-2014-2000%2F_temporary%2F_attempt_201410112050_0009_r_000221_2222%2Fpart-r-222.parquet' XML Error Message: <?xml version="1.0" encoding="UTF-8"?><Error><Code>EntityTooLarge</Code><Message>Your proposed upload exceeds the maximum allowed size</Message><ProposedSize>5374138340</ProposedSize><RequestId>20A38B479FFED879</RequestId><HostId>KxeGsPreQ0hO7mm7DTcGLiN7vi7nqT3Z6p2Nbx1aLULSEzp6X5Iu8Kj6qM7Whm56ciJ7uDEeNn4=</HostId><MaxSizeAllowed>5368709120</MaxSizeAllowed></Error> 
     org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.storeFile(Jets3tNativeFileSystemStore.java:82) 
     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     java.lang.reflect.Method.invoke(Method.java:606) 
     org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82) 
     org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59) 
     org.apache.hadoop.fs.s3native.$Proxy10.storeFile(Unknown Source) 
     org.apache.hadoop.fs.s3native.NativeS3FileSystem$NativeS3FsOutputStream.close(NativeS3FileSystem.java:174) 
     org.apache.hadoop.fs.FSDataOutputStream$PositionCache.close(FSDataOutputStream.java:61) 
     org.apache.hadoop.fs.FSDataOutputStream.close(FSDataOutputStream.java:86) 
     parquet.hadoop.ParquetFileWriter.end(ParquetFileWriter.java:321) 
     parquet.hadoop.InternalParquetRecordWriter.close(InternalParquetRecordWriter.java:111) 
     parquet.hadoop.ParquetRecordWriter.close(ParquetRecordWriter.java:73) 
     org.apache.spark.sql.parquet.InsertIntoParquetTable.org$apache$spark$sql$parquet$InsertIntoParquetTable$$writeShard$1(ParquetTableOperations.scala:305) 
     org.apache.spark.sql.parquet.InsertIntoParquetTable$$anonfun$saveAsHadoopFile$1.apply(ParquetTableOperations.scala:318) 
     org.apache.spark.sql.parquet.InsertIntoParquetTable$$anonfun$saveAsHadoopFile$1.apply(ParquetTableOperations.scala:318) 
     org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:62) 
     org.apache.spark.scheduler.Task.run(Task.scala:54) 
     org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:177) 
     java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     java.lang.Thread.run(Thread.java:745) 

여전히 업로드 제한 5T입니다? 그것이 왜 내가이 오류를 얻고 있다면 어떻게 해결할 수 있습니까?

답변

12

객체 크기는 5 TB로 제한된다.

  • 개체 업로드에 :

    이 업로드되는 데이터의 크기에 따라, 아마존 S3는 다음과 같은 옵션을 제공하십시오 업로드 크기는 5 GB, 매뉴얼에 설명 된대로 여전히 단일 작업-으로 하나의 PUT 작업을 업로드 할 수의 크기는 5 GB의 최대 객체. 에서

  • 개체 업로드 부품-사용하면 5 TB까지 큰 개체를 업로드 할 수있는 멀티 파트 업로드 API를.

http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObjects.html

당신이 다중 업로드를 수행하면, S3가 검증하고 부품을 재결합하고,로 다운로드 할 수있는 크기가 5TB까지 당신이 다음 S3에서 하나의 개체가 당신이 병렬로 부품을 업로드하고 심지어 첫 번째 시도에서 성공하지 아니하는 부분의 업로드를 다시 시도 할 수 있기 때문에 하나의 단일 HTTP GET 요청 entitity, ...하지만 업로드, 심지어 5기가바이트보다 작은 파일에 훨씬 더 빨리 잠재적 인 .

3

비결은 일반적으로 다중 업로드를 할 S3를 확인하는 방법을 알아내는 것 같다.

hdfs dfs -Dfs.s3n.awsAccessKeyId=ACCESS_KEY -Dfs.s3n.awsSecretAccessKey=SUPER_SECRET_KEY -Dfs.s3n.multipart.uploads.enabled=true -cp hdfs:///path/to/source/data s3n://bucket/folder/ 

또한 구성이 여기에서 찾을 수있다 : S3에 HDFS 데이터를 복사하는 데,이 fs.s3n.multipart.uploads.enabled=true

이와 다중 업로드를 가능 구체적 S3N 파일 시스템을 사용하여 수행 할 수처럼 수행 될 수 https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html

관련 문제