Apache Hadoop und Java 9 (Teil 1)

Überblick

Bei Apache: Big Data North America im Mai 2017 werde ich Ihnen zeigen, wie sehr sich die Situation geändert hat, seit ich über Apache Hadoop gesprochen habe, das Java 9 derzeit nicht unterstützt, und das ist eine Menge Arbeit.

Apache: Big Data Presentation

Präsentationsmaterial beim Lesen des Hadoop-Quellcodes im März 2017 (Japanisch)

Durch Hadoop-Kompilierung in Java 9

Kompilieren wir es mit Ihrem MacBook Pro (High Sierra). Probieren Sie die folgenden Versionen aus.

mbpaa:hadoop$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

Es ist mein erstes Mal, dass ich Java 9 nach seiner offiziellen Veröffentlichung berühre.

Revert HADOOP-14986

Hmmm, ich fiel wie nie zuvor ...

mbpaa:hadoop$ mvn install -DskipTests
[INFO] Scanning for projects...

(snip)

[INFO] --- animal-sniffer-maven-plugin:1.16:check (signature-check) @ hadoop-annotations ---
[INFO] Checking unresolved references to org.codehaus.mojo.signature:java18:1.0
[ERROR] /Users/ajisaka/git/hadoop/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/RootDocProcessor.java:56: Undefined reference: com.sun.javadoc.RootDoc
[ERROR] /Users/ajisaka/git/hadoop/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/RootDocProcessor.java:104: Undefined reference: com.sun.javadoc.Doc
[ERROR] /Users/ajisaka/git/hadoop/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/RootDocProcessor.java:106: Undefined reference: com.sun.javadoc.Doc

Anscheinend funktioniert das in HADOOP-14986. JDK-Einschränkungen erzwingen hinzugefügte Animal-Sniffer-Maven-Plugin unter Java 9 nicht. Ich werde versuchen, vorerst zur Hand zu gehen.

mbpaa:hadoop$ git revert b50def36970e0afa65bd3fd3f40d8c4f81119200

Apply HADOOP-12760

Der nächste Fehler ist hier.

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project hadoop-common: Compilation failure: Compilation failure:
[ERROR] /Users/ajisaka/git/hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java:[333,17] cannot find symbol
[ERROR] symbol:   class Cleaner
[ERROR] location: package sun.misc
[ERROR] /Users/ajisaka/git/hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoStreamUtils.java:[40,21] cannot find symbol
[ERROR] symbol:   class Cleaner
[ERROR] location: package sun.misc

Dies ist ein bekannter Fehler. HADOOP-12760. Sun.misc.Cleaner ist an einen neuen Speicherort in OpenJDK 9 umgezogen wird das Problem lösen. Machen wir das. dev-support / bin / smart-apply-patch ist nützlich. Ich füge dev-support / bin zu PATH hinzu.

mbpaa:hadoop$ smart-apply-patch HADOOP-12760
Processing: HADOOP-12760
HADOOP-12760 patch is being downloaded at Sat Dec  2 23:19:19 JST 2017 from
  https://issues.apache.org/jira/secure/attachment/12850964/HADOOP-12760.03.patch -> Downloaded
Applying the patch:
Sat Dec  2 23:19:20 JST 2017
cd /Users/ajisaka/git/hadoop
patch -p1 -E
patching file hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/CryptoStreamUtils.java
patching file hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java
Hunk #1 succeeded at 38 with fuzz 1 (offset 1 line).
Hunk #2 succeeded at 316 (offset 3 lines).
Hunk #3 succeeded at 330 (offset 3 lines).
patching file hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/CleanerUtil.java

Apply HDFS-11610

Der nächste Fehler ist hier.

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project hadoop-hdfs: Compilation failure: Compilation failure:
[ERROR] /Users/ajisaka/git/hadoop/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSClientFailover.java:[66,31] package sun.net.spi.nameservice does not exist

Dies ist auch ein bekannter Fehler. Wenden Sie den Patch an HDFS-11610. Sun.net.spi.nameservice.NameService wurde an einen neuen Speicherort verschoben.

mbpaa:hadoop$ smart-apply-patch HDFS-11610
Processing: HDFS-11610
HDFS-11610 patch is being downloaded at Sat Dec  2 23:27:05 JST 2017 from
  https://issues.apache.org/jira/secure/attachment/12879343/HDFS-11610.001.patch -> Downloaded
Applying the patch:
Sat Dec  2 23:27:06 JST 2017
cd /Users/ajisaka/git/hadoop
git apply --binary -v --stat --apply -p1 /tmp/yetus-30092.22999/patch
Hunk #1 succeeded at 600 (offset 5 lines).
Applied patch hadoop-hdfs-project/hadoop-hdfs/pom.xml cleanly.
 hadoop-hdfs-project/hadoop-hdfs/pom.xml |   19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

Ich konnte es erfolgreich kompilieren.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 08:05 min
[INFO] Finished at: 2017-12-02T23:35:42+09:00
[INFO] Final Memory: 185M/616M
[INFO] ------------------------------------------------------------------------

Unterschied zu früher

HADOOP-11875. Fügen Sie eine zweite Kopie von Hamlet ohne _ als einstellige Kennung hinzu können zusammengeführt oder einige Maven-Plugins Dank der aktualisierten Version müssen weniger Schritte kompiliert werden.

Dank des Updates auf der Java-Seite ist es außerdem nicht mehr erforderlich, die Kompilierungsoption "--add-opens" hinzuzufügen.

Zukunftsaussichten

Ich möchte die oben genannten drei Korrekturen so schnell wie möglich in der Community zusammenführen. Aktualisieren Sie auch die Bibliothek. Log4J und JUnit sind besonders schwierig. Vor kurzem war ich mit anderen Arbeiten als Aktivitäten in der Apache Hadoop-Community beschäftigt und hatte keine Zeit. .. ..

Schließlich

Für vielbeschäftigte Leute habe ich einen Patch auf den Punkt gebracht, der diese drei zusammenfasst.

Als nächstes möchte ich Apache Hadoop ausführen.

Recommended Posts

Apache Hadoop und Java 9 (Teil 1)
Apache und Tomcat
Java und JavaScript
XXE und Java
[Java] Der verwirrende Teil von String und StringBuilder
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
Getter und Setter (Java)
[Java] Thread und ausführbar
Java wahr und falsch
[Java] Vergleich von Zeichenketten und && und ||
Java - Serialisierung und Deserialisierung
[Java] Argumente und Parameter
Java studieren ~ Teil 8 ~ Besetzung
timedatectl und Java TimeZone
[Java] Verzweigen und Wiederholen
Klasse und Sofortteil2
[Java] Variablen- und Typtypen
Apache Shiro Schnellstart Teil 2
Java (Klasse und Instanz)
[Java] Überladen und überschreiben
Studiere Java # 2 (\ mark and operator)
45 Techniken zur Optimierung der Java-Leistung (Teil 1)
Java Version 8 und neuere Funktionen
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Fensteraggregation von Sensordaten mit Apache Flink und Java 8
[Java] Unterschied zwischen == und gleich
[Java] Stapelbereich und statischer Bereich
[Java] Generics-Klasse und Generics-Methode
Java-Programmierung (Variablen und Daten)
Java-Ver- und Entschlüsselung PDF
Was ich in Java gelernt habe (Teil 4) Bedingte Verzweigung und Wiederholung
Definition und Instanziierung von Java-Klassen
[Java] Über String und StringBuilder
[Java] HashCode und gleich Überschreibung
☾ Java / Repeat-Anweisung und Repeat-Steueranweisung
Java-Methoden und Methodenüberladungen
Java Generics T und? Unterschied
Vor- und Nachteile von Java
Java (bedingte Verzweigung und Wiederholung)
Über Java-Paket und Import
[Java] Laden Sie ein Bild hoch und konvertieren Sie es in Base64
C # und Java überschreiben Story
Java abstrakte Methoden und Klassen
Java während und für Anweisungen
Java-Kapselung und Getter und Setter
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 1)
Java Beginner Escape Boot Camp Teil 2 Grundlegendes zu Java-Klassen und -Kapselung
Was ich in Java gelernt habe (Teil 1) Java-Entwicklungsablauf und Überblick
Informationen zu statischen und nicht statischen Java-Methoden
Java Servlet / JSP-Anforderungsbereich Teil 1
Ich habe PHP- und Java-Konstruktoren verglichen
Java mit Ramen lernen [Teil 1]
Verwenden Sie Java mit MSYS und Cygwin
Verteilte Ablaufverfolgung mit OpenCensus und Java
[Java] Unterschied zwischen Hashmap und HashTable
Deklaration, Initialisierung und Typen von Java-Variablen
Java Excel Insertion und Bildextraktion
Installieren Sie Java und Tomcat mit Ansible
AWS SDK für Java 1.11.x und 2.x.
[Java] Grundtypen und Anweisungshinweise
Java-Veröffentlichungsdatum und EOL-Zusammenfassung