LoginSignup
3
2

More than 5 years have passed since last update.

Apache HadoopとJava 9 (その1)

Last updated at Posted at 2017-12-02

概要

2017年5月にApache: Big Data North Americaで、Apache HadoopはJava 9に現状対応してないよー、あれもこれも大変、っていう話をしたときからどれだけ状況が変わったか紹介します。

Apache: Big Dataの発表資料

2017年3月のHadoopソースコードリーディングでの発表資料(日本語)

Java 9でHadoopのコンパイルを通す

手元のMacBook Pro(High Sierra)でさっそくコンパイルしましょう。以下のバージョンで試します。

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)

何気に、正式リリース後のJava 9を触るのは初めてです。

Revert HADOOP-14986

がーん、今までに見たことのない落ち方をしていた...

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

どうやら、HADOOP-14986. Enforce JDK limitationsで追加されたanimal-sniffer-maven-pluginがJava 9で動作しないらしい。とりあえず手元でrevertしてみます。

mbpaa:hadoop$ git revert b50def36970e0afa65bd3fd3f40d8c4f81119200

Apply HADOOP-12760

次のエラーはこちらです。

[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

これは見覚えがあるエラーです。HADOOP-12760. sun.misc.Cleaner has moved to a new location in OpenJDK 9のパッチを当てれば解決するので、当てましょう。dev-support/bin/smart-apply-patchが便利です。私はdev-support/binPATHに追加しています。

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

次のエラーはこちらです。

[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

これも見覚えのあるエラーです。HDFS-11610. sun.net.spi.nameservice.NameService has moved to a new locationのパッチを当てましょう。

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

無事コンパイルできました。

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

以前との差分

HADOOP-11875. Add a second copy of Hamlet without _ as a one-character identifierをマージしたり、いくつかのMaven pluginのバージョンを上げたおかげで、コンパイルするための手順は減りました。

また、Java側のアップデートのおかげで、コンパイルオプション--add-opensをつけなくてもよくなりました。

今後の展望

上記3つの修正も早いうちにコミュニティにマージしたいです。あとはライブラリのアップデートも。Log4JとJUnitが特に大変。最近はApache Hadoopコミュニティでの活動以外の仕事が忙しく時間がとれてない。。。

最後に

忙しい人のために、この3つをまとめたパッチをgistに貼っておきました。

次はApache Hadoopを動かしてみたいと思います。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2