Spark มีปัญหา NoSuchMethodError: SemaphoredDelegatingExecutor ตอนเขียนไฟล์เข้า S3

พอดีผมลองใช้ hadoop-aws เวอร์ชั่น 3.2.0 ไปแล้วตอนที่เขียนไฟล์เข้า S3 จะเจอ error ประมาณนี้

22/12/07 11:30:32 WARN TaskSetManager: Lost task 0.0 in stage 9.0 (TID 9) (5f52d1d4aab7 executor driver): java.lang.NoSuchMethodError: 'void org.apache.hadoop.util.SemaphoredDelegatingExecutor.<init>(com.google.common.util.concurrent.ListeningExecutorService, int, boolean)'

วิธีแก้ง่ายมาก… ให้เปลี่ยนไปใช้ hadoop-aws เวอร์ชั่น 3.2.2 :joy:

conf = SparkConf()
conf.set("spark.jars.packages", "org.apache.hadoop:hadoop-aws:3.2.2")

ส่วนเวอร์ชั่น Spark ที่ใช้อยู่ก็เป็นเวอร์ชั่น 3.3.0

ปล. เรื่อง package dependency กับ version นี่ปวดหัวจริง… :sweat:

Credit: NoSuchMethodError: SemaphoredDelegatingExecutor while writing files to S3 · Issue #2510 · aws/aws-sdk-java · GitHub

เพราะเหตุนี้ ถึงต้องมี unittest สำหรับ spark jars :joy:
เช็คจริง และถ้ามันพัง ก็จะไปหา ref จาก spark base image แถวๆ github เอา มันต้องมีคนใช้ spark version เดียวกัน และต้องต่อกะ aws/gcp บ้างล่ะ เราไม่น่าเป็นคนเดียวบนโลก

สำหรับ jdbc นี่ก็ถึงขั้นปั่น docker container มาเทสด้วยกันเลย เอาให้รู้ว่าอะไรขยับแล้วพัง!

1 Like