Apache Hadoop et Java 9 (partie 1)

Aperçu

Chez Apache: Big Data North America en mai 2017, je vais vous montrer à quel point la situation a changé depuis que j'ai parlé d'Apache Hadoop ne prenant actuellement pas en charge Java 9 et c'est beaucoup de travail.

Apache: Présentation Big Data

Matériel de présentation lors de la lecture du code source Hadoop en mars 2017 (japonais)

Grâce à la compilation Hadoop en Java 9

Compilons-le avec votre MacBook Pro (High Sierra). Essayez les versions suivantes.

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)

C'est la première fois que je touche Java 9 après sa sortie officielle.

Revert HADOOP-14986

Hmmm, je tombais comme je n'avais jamais vu auparavant ...

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

Apparemment, le plugin animal-sniffer-maven ajouté dans HADOOP-14986. Appliquer les limitations JDK ne fonctionne pas sur Java 9. Je vais essayer de revenir à portée de main pour le moment.

mbpaa:hadoop$ git revert b50def36970e0afa65bd3fd3f40d8c4f81119200

Apply HADOOP-12760

La prochaine erreur est ici.

[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

C'est une erreur familière. HADOOP-12760. Sun.misc.Cleaner a déménagé vers un nouvel emplacement dans OpenJDK 9 résoudra le problème. Faisons le. dev-support / bin / smart-apply-patch est utile. J'ajoute dev-support / bin à PATH.

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

La prochaine erreur est là.

[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

C'est aussi une erreur familière. Appliquez le correctif HDFS-11610. Sun.net.spi.nameservice.NameService a été déplacé vers un nouvel emplacement.

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(-)

J'ai pu le compiler avec succès.

[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] ------------------------------------------------------------------------

Différence d'avant

HADOOP-11875. Ajoutez une deuxième copie de Hamlet sans _ comme identifiant à un caractère peut être fusionné ou certains plugins Maven Grâce à la version améliorée, il y a moins d'étapes à compiler.

De plus, grâce à la mise à jour côté Java, il n'est plus nécessaire d'ajouter l'option de compilation --add-opens.

Perspectives d'avenir

Je souhaite fusionner les trois correctifs ci-dessus dans la communauté dès que possible. Mettez également à jour la bibliothèque. Log4J et JUnit sont particulièrement difficiles. Récemment, j'ai été occupé par d'autres travaux que des activités dans la communauté Apache Hadoop et je n'ai pas eu le temps. .. ..

finalement

Pour les gens occupés, j'ai mis un patch sur l'essentiel qui résume ces trois.

Ensuite, je voudrais exécuter Apache Hadoop.

Recommended Posts

Apache Hadoop et Java 9 (partie 1)
Apache et Tomcat
Java et JavaScript
XXE et Java
[Java] La partie déroutante de String et StringBuilder
JSON avec Java et Jackson Part 2 XSS mesures
Getter et Setter (Java)
[Java] Thread et exécutable
Java vrai et faux
[Java] Comparaison des chaînes de caractères et && et ||
Java - Sérialisation et désérialisation
[Java] Arguments et paramètres
Étudier Java ~ Partie 8 ~ Cast
timedatectl et Java TimeZone
[Java] Branchement et répétition
Classe et instant part2
[Java] Types de variables et types
Apache Shiro Quickstart, partie 2
java (classe et instance)
[Java] Surcharge et remplacement
Etudier Java # 2 (\ marque et opérateur)
45 Techniques d'optimisation des performances Java (partie 1)
Java version 8 et fonctionnalités ultérieures
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Agrégation de fenêtres de données de capteurs avec Apache Flink et Java 8
[Java] Différence entre == et égal
[Java] Zone de pile et zone statique
[Java] Classe générique et méthode générique
Programmation Java (variables et données)
Cryptage et décryptage Java PDF
Ce que j'ai appris en Java (partie 4) Branchement conditionnel et répétition
Définition et instanciation de classe Java
[Java] À propos de String et StringBuilder
[Java] HashCode et remplacement égal
☾ Instruction Java / Repeat et instruction de contrôle de répétition
Méthodes Java et surcharges de méthodes
java Generics T et? Différence
Avantages et inconvénients de Java
java (branchement conditionnel et répétition)
À propos du package Java et de l'importation
[Java] Téléchargez une image et convertissez-la en Base64
Histoire de remplacement C # et Java
Méthodes et classes abstraites Java
Instructions Java while et for
Encapsulation Java et getters et setters
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 1)
Java Beginner Escape Boot Camp Partie 2 Comprendre les classes Java et l'encapsulation
Ce que j'ai appris en Java (partie 1) Flux de développement Java et présentation
À propos des méthodes Java statiques et non statiques
Portée de la requête Java Servlet / JSP, partie 1
J'ai comparé les constructeurs PHP et Java
Java pour apprendre avec les ramen [Partie 1]
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
[Java] Différence entre Hashmap et HashTable
Déclaration, initialisation et types de variables Java
Insertion Java Excel et extraction d'images
Installez Java et Tomcat avec Ansible
SDK AWS pour Java 1.11.x et 2.x
[Java] Types de base et notes d'instructions
Date de sortie de Java et résumé EOL