Vorwort
Mit immer mehr internen Geschäftssystemen in den Unternehmensdiensten und JVM-basierten Diensten gibt es möglicherweise mehrere Sätze von JDKs, die unterschiedliche Dienste in der Online-Umgebung ausführen. Jeder weiß, dass Dienste, die auf der höheren Version der Java -Spezifikation geschrieben wurden, auf der unteren Version von JVM angezeigt werden: java.lang.UnsupportedClassVersionError -Ausnahme.
Spark 2.2 hat begonnen, die Unterstützung für Java zu entfernen. Wenn die JDK -Version 7, von der Hadoop abhängig ist, ist 7, dann wird es Probleme mit der darauf basierenden auf JDK 8 geschriebenen Anwendung geben.
In diesem Artikel wird hauptsächlich vorgelegt, wie verschiedene JDK -Versionen für die Spark -Anwendung in verschiedenen Szenarien angegeben werden.
Der Cluster hat die angegebene JDK -Version bereitgestellt
Angenommen, der Bereitstellungspfad von JDK für jeden Knoten im Cluster ist: /usr/java/jdk1.8
Spark bietet spark.executorEnv.[EnvironmentVariableName] Konfiguration, mit der Umgebungsvariablen zum Ausführungsverfahren hinzugefügt werden können. Wenn der von Spark Application verwendete Cluster -Manager Standalone ist, müssen Sie nur den JDK -Pfad der Seite der Testamentsvollstrecker über spark.executorEnv.JAVA_HOME wie folgt formulieren:
$ Spark_home/bin/spark-submit/-conf "spark.executorenv.java_home =/usr/java/jdk1.8"/...
Im Garnmodus müssen Sie auch verschiedene java_home -Umgebungsvariablen für den Anwendungsmaster angeben, wie folgt:
$ Spark_home/bin/spark-submit/--conf "spark.executorenv.java_home =/usr/java/jdk1.8"/--conf "spark.yarn.appmasterenv.java_home =/usr/java/jdk1.8"/...
Beim Bereitstellen von Garn im Cluster -Modus ist spark.yarn.appMasterEnv.JAVA_HOME gleichwertig mit der Einstellung einer bestimmten JDK -Version für den Treiber der Spark -Anwendung.
Beim Bereitstellen im Client -Modus legt spark.yarn.appMasterEnv.JAVA_HOME einfach eine bestimmte JDK -Version für Executor -Launcher fest.
Die JDK-Version der Treiberseite entspricht der Umgebungsvariablen für Spark_Home in der Maschine, auf der sich Spark-Submit befindet, und kann direkt in Spark-env.sh angegeben werden.
Dem Cluster fehlt eine bestimmte JDK -Version und verfügt über keine Verwaltungsberechtigungen für den Cluster.
In einigen besonderen Szenarien haben wir keine Verwaltungsberechtigungen für den Cluster und können nur die Bewerbung über Garn einreichen, und die JDK -Version, die wir benötigen, wird im Cluster nicht bereitgestellt. In diesem Fall müssen wir das JDK -Installationspaket gemeinsam einreichen.
Hier verlangen wir, dass unser JDK -Installationspaket im GZ -Format vorhanden sein muss und nach dem Verpacken Ihres Codes im selben Verzeichnis wie das JAR -Paket platziert werden muss. Angenommen, das von uns heruntergeladene JDK-Installationspaket lautet: JDK-8U141-linux-x64.tar.gz.
关键配置如下:
$ Spark_home/bin/spark-submit/--conf "spark.yarn.dist.archives = jdk-8u141-linux-x64.tar.gz"/---conf "spark.executorenv.java_home =./Jdk-8u141-linux-x64.tar.gz/jdk1.8.0_141"/----Conf. "spark.yarn.appmasterenv.java_home =./jdk-8u141-linux-x64.tar.gz/jdk1.8.0_141"/...
Wir können das JDK -Installationspaket an das Arbeitsverzeichnis aller ausführenden (einschließlich des Ausführers des Anwendungsmasters) verteilen, indem wir die Konfiguration von spark.yarn.dist.archives angeben. Darüber hinaus wird das komprimierte Tar.gz -Paket automatisch dekomprimiert. Unter der Annahme, dass das dekomprimierte Verzeichnis von JDK-8U141-linux-X64.tar.gz JDK1.8.0_141 ist, ist das Verzeichnis unseres spezifischen JDK:
HINWEIS: Da Spark Standalone nicht die Funktion zur Verteilung von JDK -Installationspaketen und der automatischen Dekomprimierung bietet, kann diese Methode nur unter Garn verwendet werden.
verifizieren
Über PS -f Grep können Sie feststellen, dass der Java -Start -up -Pfad in unserem speziellen JDK -Verzeichnis erfolgreich für Java konfiguriert ist.
Im Folgenden finden Sie die Informationen zum Prozessstart für den ausführenden Executor I, das die JDK -Version im Garnmodus angibt:
Stan 590751 590745 0 20:45? 00:00:14. -Xx: initiingheapoccupancypercent = 35 -xx: permsize = 256m -xx:+printgcdetails -xx:+printgcDatestamps -xloggc: ./ gc.log -verbose: gc -Djava.io.tmpdir =/home/stan/tmp/hadoop-stan/nm-local-dir/usercache/stan/appcache/application_1508397483453_0095/container_1508397483453_0095_01_000004/tmp -dspark.driver.Park -Dspark.yarn.app.container.log.dir =/home/stan // hadoop -2.6.4/logs/userLogs/application_1508397483453_0095/Container_1508397483453_0095_01_000004 --xx: OnoutoutofMemoryEr = P. org.apache.spark.executor.coarsegrainexecutorbackend ---driver-url spark: //[email protected]: 52986-Executor-ID 3-Hostname Stan--Cores 1-App-ID Application_1508397483453_0095 --user-classe-path Datei:/home/stan/tmp/hadoop-stan/nm-local-dir/usercache/stan/Appcache/application_1508397483453_0095/Container_1508397483453_0095_01_000004/__ App __. JAR
Anhang: Lösung zum inkompatiblen Fehler der Spark Application Runtime Version
17/06/27 14:34:41 Info Abschalt: mapred.map.tasks ist veraltet. Verwenden Sie stattdessen MapReduce.job.maps 17/06/27 14:34:41 Info Memorystore: Block Broadcast_0 als Werte im Speicher gespeichert (geschätzte Größe 788.8 KB, kostenlos 1246.5 mb) 17/06/27 14:34:41 Info Memorystore: Block: Block Sende_PACE, FRAGE_PACE, BITDED IN DEMBEDEKTEM MEBEN (Schätzungsweise) (geschätzt) (geschätzt) (geschätzt) (schätzungsweise) (schätzungsweise) (schätzungsweise) wurde in Erinnerung (Schätzung in Erinnerung) (geschätzt. 17/06/27 14:34:41 Info BlockManagerInfo: Hinzufügen von Broadcast_0_Piece0 in Speicher am 10.50.70.121:37335 (Größe: 54.0 kb, kostenlos: 1247.2 MB) 17/06/27 14:34:41 Info -SparkContext: Ausnahme von Thread ". java.lang.nosuchMethoderror: scala.reflect.api.javauniverse.runtimemirror (ljava/lang/classloader;) lscala/reflektiert/api/javauniverse $ javamirror; unter com.fangdd.data.profile.outlier.tradeinfooutlier $ .main (TradeInfooutlier.scala: 30) unter com.fangdd.data.profile.outlier.TradeInfooutlier.main (TradeInfooutlier.scala) bei Sun.Reflect.NATIVATICECT.NATIVETICET.NATIVETICET.NATIVATICED.NATIVETICET.NATIVETHET. sun.reflect.nativemethodaccessorimpl.invoke (nativemethodaccessorimpl.java:62) at sun.reflect.delegatingMethodaccessorImpl.invoke (DelegatingMethodaccessorimpl.java:43) bei java.lang.lang.rang. org.apache.spark.deploy.sparksubmit $ .org $ apache $ spark $ bereitet $ sparkssubmit $$ Runmain (SparksSubmit.scala: 745) bei org.apache.spark.deploy.Sparksubmit $ .dorunmain $ 1 (Sparksubmit.Scala: 181) ATORNMAIN $ 1 (Sparksubmit. org.apache.spark.deploy.Sparksubmit $ .Submit (Sparksubmit.scala: 206) at org.apache.spark.deploy.SparksSubmit $ .main (Sparksubmit.Scala: 121) at org. 14:34:42 Info SparkContext: Aufrufen von Stop () vom Stilldown -Hook
Dieser Fehler liegt daran, dass die Produktionsumgebung die laufende Umgebung von Scala 2.10 + Spark1.6.3 verwendet, und das lokale Anwendungsjar die Kompilierungsumgebung von Scala 2.11 + Spark.1.6.3. Daher wurde der obige Fehler im Produktionsumfeldcluster gemeldet. Nachdem die Scala-Version geändert und das JAR-Paket erneut eingeführt wurde, wurde der obige Fehler gemeldet.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.