Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20170303 java9 hadoop

3,023 views

Published on

Apache HadoopとJava9とJigsaw

Published in: Engineering
  • Be the first to comment

20170303 java9 hadoop

  1. 1. © 2017 NTT DATA Corporation 2017年3月3日 NTTデータ OSSプロフェッショナルサービス 鯵坂 明 Apache HadoopとJava 9とJigsaw
  2. 2. © 2017 NTT DATA Corporation 2 鯵坂 明 (Akira Ajisaka)  Apache Hadoopなど分散処理に関連するOSSを利用したPoC や、商用導入における技術支援  商用導入後のサポートサービス  Apache Hadoop Committer/PMC member  JIRAへのバグレポート  修正、レビュー、マージ  リリース作業の手伝い  脆弱性の修正・開示  などなど 自己紹介 https://github.com/apache/hadoop/graphs/contributors
  3. 3. © 2017 NTT DATA Corporation 3  2017/7/27 リリース予定  現在 b158 が入手可能  Jigsawなど、多数の新機能  非互換な変更も多い  一方、Java 8はもうすぐEoL  Oracleのサポート期限: 2017/9 (延長の可能性 あり、Extended Supportなら2025/3)  RHELのサポート期限: 2020/10  アップグレードの準備が必要 Java 9
  4. 4. © 2017 NTT DATA Corporation 4 Apache HadoopのJava 9への対応状況 mvn install -DskipTests を実行 そもそもコンパイルが通らない!
  5. 5. © 2017 NTT DATA Corporation 5  原因は大きく分けて5つ  sun.misc.Cleanerが移動した (JEP 260)  _ 1文字の命名が禁止 (JEP 213)  バージョンのつけ方が変わった (JEP 223)  JavadocのHTML5対応 (JEP 224)  Jigsawの影響  HADOOP-11123で対応中 (Umbrella JIRA) どうしてコンパイルが通らないのか
  6. 6. © 2017 NTT DATA Corporation 6 NoClassDefFoundError
  7. 7. © 2017 NTT DATA Corporation 7  sun.misc.Cleanerの遍歴  9b99: java.lang.ref.Cleaner  9b105: jdk.internal.ref.Cleaner  9b150: sun.misc.Unsafe::invokeCleaner (イマココ)  Hadoopでの使われ方  munmap(2)の実装  mlockと違い、WindowsだとJNIで叩けない のでCleanerに頼る JEP 260: Encapsulate most internal APIs
  8. 8. © 2017 NTT DATA Corporation 8  パッケージを変えると、Java9で動作する  ただし、Java8で動作しなくなる  両方で動かすため、リフレクションを活用  sun.misc.Unsafe#invokeCleanerを呼ぶ  例外が出たら、sun.misc.Cleanerを使う  Apache Luceneのコードが参考になった  https://issues.apache.org/jira/browse/LUCENE-6989  HADOOP-12760にパッチ投稿中 Java 8対応をおろそかにしてはいけない
  9. 9. © 2017 NTT DATA Corporation 9 HamletSpec.java Java 9では禁止に
  10. 10. © 2017 NTT DATA Corporation 10  _ 1文字の命名が禁止された  Hamletという独自フレームワークに _ が頻出  Hamlからインスパイアされた  YARN WebUIで利用 JEP 213: Milling Project Coin <html> <body> <table id="applications"> <thead> <tr> <td>ApplicationId</td> <td>ApplicationState</td> </tr> </thead> <tbody>
  11. 11. © 2017 NTT DATA Corporation 11  _ を __ にするだけでは駄目  YARN applicationが影響を受ける  例: Apache Slider (Incubating)  以下の手順で修正  _ を __ にした新しいHamletを作成  古いHamletをdeprecatedにする  既存のコードを __ に置き換える  (1回以上のリリースを経て)古いHamletを消す  HADOOP-11875 にパッチ投稿中 互換性を意識して修正すべし
  12. 12. © 2017 NTT DATA Corporation 12 mvn javadoc:javadoc を実行 バージョンが 認識されない
  13. 13. © 2017 NTT DATA Corporation 13  1.8 -> 9  正規表現でマッチングしている場合に注意  Maven Javadoc Pluginに影響  2.10.4以降へアップグレードすべし JEP 223: New Version-String Scheme
  14. 14. © 2017 NTT DATA Corporation 14 Java 9ではエラー package.html
  15. 15. © 2017 NTT DATA Corporation 15  HTML5対応のため、既存のHTMLファイルに 対するvalidationが厳しくなった  <table>タグにはsummary or captionが必須  <pre>タグの中にある < は &lt; に書き直し  などなど  HADOOP-14057 にパッチ投稿中 JEP 224: HTML5 Javadoc
  16. 16. © 2017 NTT DATA Corporation 16 mvn install -DskipTests を実行 見慣れないエラー
  17. 17. © 2017 NTT DATA Corporation 17  ところで、これは何でしょう? Java One 2015 keynoteの引用
  18. 18. © 2017 NTT DATA Corporation 18  答: Hadoopのclasspath  classpathが長いと何がいけないのか  依存するライブラリが多く、Hadoop上で動 作するアプリやミドルに悪影響 (jar hell)  Jigsaw: moduleという概念を導入  module単位で依存関係を記述  import時にバージョンが指定可能  jar hellの解消  互換性に大きな影響 Jigsaw
  19. 19. © 2017 NTT DATA Corporation 19 エラーの解説  private fieldにアクセスするパターン  通常はアクセスできない  Field.setAccessible(true)でアクセス可能に  ただし、Java 9では設定されたmodule以外からはアク セス不可  コンパイルオプションをつけることで回避可能  "--add-opens java.base/java.util=ALL-UNNAMED"
  20. 20. © 2017 NTT DATA Corporation 20  現時点で、適用は難しい  Java8とJava9の両方に対応するため  jar hellは解消されないのか?  別の方法を使う -> Classpath Isolation Apache HadoopへのJigsawの適用
  21. 21. © 2017 NTT DATA Corporation 21  hadoop-client module  クライアント用のjar (以前から存在)  Jetty, Jersey, ZooKeeperなど依存ライブ ラリが付属  (New!) hadoop-client-api module  hadoop-clientからtransitive dependency を除去  org.apache.hadoop.* のみ Classpath Isolation (HADOOP-11656)
  22. 22. © 2017 NTT DATA Corporation 22  (New!) hadoop-client-runtime module  hadoop-client-api に存在しない 3rd party dependencyを追加  ただし、org.apache.hadoop.shaded. 配下に再配置  Maven Shade Pluginを利用  他にもいろいろあるが省略 Classpath Isolation (HADOOP-11656)
  23. 23. © 2017 NTT DATA Corporation 23  手元のリポジトリに導入 Classpath Isolationを試す (1/2) 3.0.0-alpha2から 利用可能 compileではなく runtime client-apiだけでOK
  24. 24. © 2017 NTT DATA Corporation 24  同一ライブラリ、異なるバージョンが同居 Classpath Isolationを試す (2/2)
  25. 25. © 2017 NTT DATA Corporation 25  Apache Hadoopは Java 9 に未対応  パッチ・レビュー大歓迎  jar hell問題は徐々に解消されていく  Classpath Isolationを試してみよう  フィードバックをお待ちしております まとめ
  26. 26. © 2017 NTT DATA Corporation本資料中に記載されている会社名、商品名、ロゴは、各社の商標または登録商標です。

×