スタンドアロンモードのマスタープロセスでは、/usr/bin/java
がJVM 1.8に解決され、ワーカープロセス/usr/lib/jvm/java/bin/java
は1.7に解決されます。私のSparkアプリケーションでは、1.8で導入されたいくつかのAPIを使用しています。スパークのマスターとワーカーが異なるJVMバージョンで実行されているようです
スタックトレースを見ると、次のような行が表示されます。Caused by: java.lang.NoClassDefFoundError: Could not initialize class SomeClassDefinedByMe
内部ではjava.time
のインスタンスが作成されていますが、これはJDK 1.8のみと考えられます。
ワーカーにJVM 1.8を強制的に使用させるにはどうすればよいですか?
更新: 今の私は/usr/lib/jvm/java/bin/java
と改名し、/usr/bin/java
を指すリンクを作成しました。これは問題を解決しましたが、なぜ両方のプロセスが異なるバイナリロケーションを使用するのか、そしてこのセットがどこにあるのかを知りたいと思います。