Thanks for your work on this! We've since gone back to the original AWS SDK, but I'll give AWS2 another try once 2.27.0 is out.
Dec 15, 2020, 04:17 by [email protected]: > Too fast “Send” button click =) > > You can find snapshot artifacts here: > https://repository.apache.org/content/repositories/snapshots/org/apache/beam/beam-sdks-java-io-amazon-web-services2/2.27.0-SNAPSHOT/ > > >> On 15 Dec 2020, at 13:14, Alexey Romanenko <[email protected]> wrote: >> >> Quick update on this. >> >> We have fixed an issue with AwsCredentialsProvider serialisation [1] for AWS >> v2 IOs (well, why it’s not serialisable by default it’s a different >> question) in 2.27.0. >> Since it’s not yet released, feel free to test it with snapshot artifacts. >> >> [1] >> https://issues.apache.org/jira/browse/BEAM-11016 >> >> >>> On 6 Oct 2020, at 23:25, >>> [email protected]>>> wrote: >>> >>> Yep, same stacktrace. NPE originating from line 41 of >>> SqsUnboundedSource.java. >>> >>> I'll see about getting a remote debugger attached to the process. >>> >>> Oct 6, 2020, 14:06 by >>> [email protected]>>> : >>> >>>> Hmm, do you have the same stack trace in this case? >>>> >>>> Can you debug it in runtime and make sure that read.sqsClientProvider() >>>> returns null in SqsUnboundedSource(Read)? I’m curious if all calls to >>>> SqsUnboundedSource(Read) were done in the same JVM. >>>> >>>> >>>>> On 6 Oct 2020, at 22:14, >>>>> [email protected]>>>>> wrote: >>>>> >>>>> To test this, I tried a workaround of an implementation of >>>>> AwsCredentialsProvider that also implemented Serializable. The >>>>> resolveCredentials method of this class would call that static create >>>>> function of DefaultCredentialsProvider and forward the task to that. >>>>> There are no fields in the class that should actually need to be >>>>> serialized. >>>>> >>>>> However, this approach is failing in the exact same manner. I suspect >>>>> something else might be the culprit here. >>>>> >>>>> Oct 5, 2020, 08:56 by >>>>> [email protected]>>>>> : >>>>> >>>>>> Seems like there is an issue with non-serialisable >>>>>> AwsCredentialsProvider as a member of BasicSqsClientProvider (which is >>>>>> Serializable). >>>>>> >>>>>> >>>>>>> On 2 Oct 2020, at 20:11, >>>>>>> [email protected]>>>>>>> wrote: >>>>>>> >>>>>>> The app itself is developed in Clojure, but here's the gist of how it's >>>>>>> getting configured: >>>>>>> >>>>>>> AwsCredentialsProvider credProvider = >>>>>>> EnvrionmentVariableCredentialsProvider.create(); >>>>>>> >>>>>>> pipeline.apply( >>>>>>> SqsIO.read() >>>>>>> .withQueueUrl(url) >>>>>>> .withSqsClientProvider(credProvider, region, endpoint)); >>>>>>> >>>>>>> Oct 1, 2020, 08:48 by >>>>>>> [email protected]>>>>>>> : >>>>>>> >>>>>>>> Could you send a code snippet of your pipeline with SqsIO v2 Read >>>>>>>> transform configuration? >>>>>>>> >>>>>>>>> On 30 Sep 2020, at 22:56, >>>>>>>>> [email protected]>>>>>>>>> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> I've been attempting to migrate to the AWS2 SDK (version 2.24.0) on >>>>>>>>> Apache Spark 2.4.7. However, >>>>>>>>> when switching over to the new API and running it I keep getting the >>>>>>>>> following exceptions: >>>>>>>>> >>>>>>>>> 2020-09-30 20:38:32,428 ERROR streaming.StreamingContext: Error >>>>>>>>> starting the context, marking it as stopped >>>>>>>>> org.apache.spark.SparkException: Job aborted due to stage failure: >>>>>>>>> Task 0 in stage 2.0 failed 4 times, most recent failure: Lost task >>>>>>>>> 0.3 in stage 2.0 (TID 6, 10.42.180.18, executor 0): >>>>>>>>> java.lang.NullPointerException >>>>>>>>> at >>>>>>>>> org.apache.beam.sdk.io.aws2.sqs.SqsUnboundedSource.lambda$new$e39e7721$1(SqsUnboundedSource.java:41) >>>>>>>>> at >>>>>>>>> org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Suppliers$MemoizingSupplier.get(Suppliers.java:129) >>>>>>>>> at >>>>>>>>> org.apache.beam.sdk.io.aws2.sqs.SqsUnboundedSource.getSqs(SqsUnboundedSource.java:74) >>>>>>>>> at >>>>>>>>> org.apache.beam.sdk.io.aws2.sqs.SqsUnboundedReader.pull(SqsUnboundedReader.java:165) >>>>>>>>> at >>>>>>>>> org.apache.beam.sdk.io.aws2.sqs.SqsUnboundedReader.advance(SqsUnboundedReader.java:108) >>>>>>>>> at >>>>>>>>> org.apache.beam.runners.spark.io.MicrobatchSource$Reader.advanceWithBackoff(MicrobatchSource.java:246) >>>>>>>>> at >>>>>>>>> org.apache.beam.runners.spark.io.MicrobatchSource$Reader.start(MicrobatchSource.java:224) >>>>>>>>> at >>>>>>>>> org.apache.beam.runners.spark.stateful.StateSpecFunctions$1.apply(StateSpecFunctions.java:168) >>>>>>>>> at >>>>>>>>> org.apache.beam.runners.spark.stateful.StateSpecFunctions$1.apply(StateSpecFunctions.java:107) >>>>>>>>> at >>>>>>>>> org.apache.spark.streaming.StateSpec$$anonfun$1.apply(StateSpec.scala:181) >>>>>>>>> at >>>>>>>>> org.apache.spark.streaming.StateSpec$$anonfun$1.apply(StateSpec.scala:180) >>>>>>>>> at >>>>>>>>> org.apache.spark.streaming.rdd.MapWithStateRDDRecord$$anonfun$updateRecordWithData$1.apply(MapWithStateRDD.scala:57) >>>>>>>>> >>>>>>>>> Examining the source of SqsUnboundedSource reveals a lambda where >>>>>>>>> it's trying to chain a few references: >>>>>>>>> read.sqsClientProvider().getSqsClient() >>>>>>>>> >>>>>>>>> Which is odd as I explicitly set the client provider on the read >>>>>>>>> transform. This was working well enough with the old SqsIO API to >>>>>>>>> connect and process messages off the queue. >>>>>>>>> >>>>>>>>> Any thoughts on why this might be happening? Or avenues to pursue in >>>>>>>>> debugging this? >>>>>>>>> >>>>>>>>> Thanks. >>>>>>>>> >>>>>>> >>>>>>> >>>>> >>>>> >>> >>>
