apachespark从s3读取异常:内容长度分隔的消息正文过早结束(预期:2250236;收到:16360)

fykwrbwg  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(575)

我想从s3资源创建apachesparkDataframe。我在aws和ibms3clout对象存储上进行了尝试,都失败了

org.apache.spark.util.TaskCompletionListenerException: Premature end of Content-Length delimited message body (expected: 2,250,236; received: 16,360)

我和你一起跑Pypark

./pyspark --packages com.amazonaws:aws-java-sdk-pom:1.11.828,org.apache.hadoop:hadoop-aws:2.7.0

我正在为ibm设置s3配置

sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", "xx")
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "xx")
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3.eu-de.cloud-object-storage.appdomain.cloud")

或aws

sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", "xx")
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", " xx ")
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3.us-west-2.amazonaws.com")

在这两种情况下,都使用以下代码:df=spark.read.csv(“s3a://drill test/cases.csv”)
它失败了,只有一个例外

org.apache.spark.util.TaskCompletionListenerException: Premature end of Content-Length delimited message body (expected: 2,250,236; received: 16,360)
htzpubme

htzpubme1#

这可能让你很困惑。
错误如下:

org.apache.spark.util.TaskCompletionListenerException: Premature end of Content-Length delimited message body (expected: 2,250,236; received: 16,360)

s3是否告诉您与s3的通信有错误。我猜您使用的是旧版本的spark,它不知道异常是什么,它试图将文件作为xml错误消息带回。
请参阅下面的更新,这些更新应该有助于您的情况,将它们放在您的阅读电话上方,并填写 <aws_key> , <aws_secret> ,和 <aws_region> :

hadoop_conf = spark.sparkContext._jsc.hadoopConfiguration()
hadoop_conf.set("fs.s3a.awsAccessKeyId", "<aws_key>")
hadoop_conf.set("fs.s3a.awsSecretAccessKey", "<aws_secret>")
hadoop_conf.set("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
hadoop_conf.set("fs.s3a.impl","org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoop_conf.set("com.amazonaws.services.s3.enableV4", "true")
hadoop_conf.set("fs.s3a.aws.credentials.provider","org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider")
hadoop_conf.set("fs.s3a.endpoint", "<aws_region>.amazonaws.com")

祝你好运!

kmb7vmvb

kmb7vmvb2#

首先,你应该看看例外情况,它不提供信息
https://spark.apache.org/docs/1.2.2/api/java/org/apache/spark/util/taskcompletionlistenerexception.html
我能想到的一个例子是来自s3和ibmcloud的用户权限错误。您访问的是s3上的公共链接,还是私有链接(如果是)。你应该深入挖掘链接权限。

ukxgm1gy

ukxgm1gy3#

花了好几天的时间想弄明白。。我有openjdk版本“1.8.0\u265”,当我试图读取ibms3cos时,它给了我一个确切的错误。把我的java版本改成了openjdk版本“1.8.0Đ272”,它成功了。

相关问题