Size: a a a

2021 August 16

NN

No Name in Moscow Spark
Понял.
источник
2021 August 18

A

Alex in Moscow Spark
а тут есть люди которые spark гоняют на 11 java?
источник

A

Alex in Moscow Spark
вкратце:

собрали свой спарк с jdk 11
позже в других местах при запуске на jdk 8 получили такую ошибку

[info] java.lang.NoSuchMethodError: java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer;
[info]  at org.apache.spark.util.io.ChunkedByteBufferOutputStream.toChunkedByteBuffer(ChunkedByteBufferOutputStream.scala:115)
[info]  at org.apache.spark.broadcast.TorrentBroadcast$.blockifyObject(TorrentBroadcast.scala:323)

в процессе разбора нашли вот это

https://stackoverflow.com/questions/61267495/exception-in-thread-main-java-lang-nosuchmethoderror-java-nio-bytebuffer-flip

проверка байткода подтвердила что там написано

код при генерации java 8
invokevirtual #218                // Method java/nio/ByteBuffer.flip:()Ljava/nio/Buffer;

код при генерации jdk 11
invokevirtual #219                // Method java/nio/ByteBuffer.flip:()Ljava/nio/ByteBuffer;

смотря на него понимаю что попытка запустить вещи собранный 8кой (это офф релиз спарка с сайта апача) на 11 java тоже по идее должно упасть с похожей ошибкой
но уже в виде
java.lang.NoSuchMethodError: java.nio.ByteBuffer.flip()Ljava/nio/Buffer;
источник

SI

Sergey Ivanychev in Moscow Spark
Мы гоняем
источник

SI

Sergey Ivanychev in Moscow Spark
Но мы все собираем под 11
источник

SI

Sergey Ivanychev in Moscow Spark
Подожди, собранный спарк с jdk11 запустили из-под jdk8 — это вообще легально?
источник

A

Alex in Moscow Spark
почему нет?
источник

A

Alex in Moscow Spark
мейвен давно умеет в параметры чтобы указывать под какую версию java собирать либы
источник

A

Alex in Moscow Spark
тут больше претензии что даже в
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/ByteBuffer.html

не указано что flip стал возвращать другой тип данных
всё так же висит инфа о том что метод наследуется и возвращает Buffer
источник

A

Alex in Moscow Spark
даже сам спарк?
источник

SI

Sergey Ivanychev in Moscow Spark
Да, мы в кубере гоняем, базовый образ собран с 11 jdk
источник

A

Alex in Moscow Spark
спасибо, поэтому видимо у вас и нету проблем =)
источник

A

Alex in Moscow Spark
что не апач спарк гоняете
источник

SI

Sergey Ivanychev in Moscow Spark
мы именно его и гоняем
источник

SI

Sergey Ivanychev in Moscow Spark
3.1.2, докер образ собирается прямо ванильными скриптами из репо спарка с 11 JDK
источник

A

Alex in Moscow Spark
а не, всё
источник

A

Alex in Moscow Spark
я идиот
источник

A

Alex in Moscow Spark
теперь получается 2 метода

один наследованный public Buffer flip()
второй (начиная с 9) переопределённый public ByteBuffer flip()

поэтому собранный код на 8ке в рантайме на 11  всётаки находит версию переопределённую и продолжает работать
а вот собранный 11 в рантайме на 8ке уже не находит переопределённого метода, так как есть только наследованный
источник

SI

Sergey Ivanychev in Moscow Spark
Слушай, но запускать код собранный на старшей версией JDK чем в рантайме — это вообще невалидный сценарий
источник

SI

Sergey Ivanychev in Moscow Spark
Обратной совместимости в JVM ведь нет
источник