Java11へのマイグレーションガイド ~Apache Hadoopの事例~

3.7K Views

May 21, 19

スライド概要

2019年5月18日開催された JJUG CCC 2019 Spring で発表した資料です。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

Java11への マイグレーションガイド ~Apache Hadoopの事例~ 2019年5月18日 鯵坂 明, 浅沼 孝信 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 鯵坂 明 (@ajis_ka) 浅沼 孝信 (@hayanige) Apache Hadoop PMC Apache Hadoopコミッタ 2018/9 中途入社 2012/4 新卒入社 • Hadoop導入支援 • Hadoop運用・開発 • テクニカルサポート • NiFi導入・運用 • Hadoopバージョンアッ プ + 新機能導入検証 • Hadoopバージョンアッ プ + 新機能導入検証 • HadoopのJava11対応 • HadoopのJava11対応 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2

3.

とは OSSの分散処理基盤 • Hadoop Distributed FileSystem (HDFS) • 分散処理のスケジューリング、クラスタ のリソース管理 (YARN: Yet Another Resource Negotiator) • ほとんどがJavaで実装されている Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 3

4.

HadoopとJava 11 Hadoopは現時点でJava 11に未対応 • Java 11対応のJIRA: HADOOP-15338 • 対応が終わると、Hadoopにまつわる重 大な問題を解決できると期待している • 今回は、重大な問題を2つ紹介 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 4

5.

これ、見覚えありませんか? accessors-smart-1.2.jar animal-sniffer-annotation s-1.17.jar aopalliance-1.0.jar asm-5.0.4.jar asm-commons-6.0.jar asm-tree-6.0.jar audience-annotations-0.5.0 .jar avro-1.7.7.jar bcpkix-jdk15on1.60.jar bcprov-jdk15on-1.60.jar commons-beanutils-1.9.3.jar commons-cli-1.2.jar commons-codec-1.11.jar commons-collections-3.2.2.jar commons-compress-1.18.jar commons-configuration22.1.1.jar commons-csv-1.0.jar commons-daemon-1.0.13.jar commons-io-2.5.jar commons-lang-2.6.jar commons-lang3-3.7.jar commons-logging-1.1.3.jar commons-math3-3.1.1.jar commons-net3.6.jar commons-text-1.4.jar curator-client-2.13.0.jar curator-framework-2.13.0.jar curator-recipes-2.13.0.jar dnsjava-2.1.7.jar ehcache-3.3.1.jar error_prone_annotations-2.2.0.jar fst-2.50.jar geronimo-jcache_1.0_spec-1.0-alpha-1.jar grpc-context-1.15.1.jar grpc-core-1.15.1.jar grpc-netty-1.15.1.jar grpc-protobuf-1.15.1.jar grpc-protobuf-lite-1.15.1 .jar grpc-stub-1.15.1.jar gson-2.2.4.jar guava-11.0.2.jar guava-20.0.jar guice-4.0.jar guice-servlet-4.0.jar hadoop-annotations-3.3 .0-SNAPSH OT.jar hadoop-auth-3.3.0-SNAPSHOT.j ar hadoop-client-api-3.3.0-SN APSHOT .jar hadoop-clientminicluster-3.3.0-SNAPSHOT.jar hadoop-client-runtime-3.3.0-SNAPSHOT.jar hadoop-common-3.3.0-SNAPSHOT.j ar hadoop-common-3.3.0-SNAPSHOT-sources.j ar hadoop-common-3.3.0-SNAPSHOTtests.jar hadoop-common-3.3.0-SNAPSHOT- test- sources.jar hadoop-kms-3.3.0-SNAPSHOT .jar hadoop-mapreduce-clien t-app-3.3.0-SNAPSHOT.j ar hadoop-mapreduce-client- app-3.3.0-SN APSHOT sources.jar hadoop-mapreduce-clien t-app-3.3.0-SNAPSHOT- test- sources.jar hadoop-mapreduce-client-comm on-3.3.0-SNAPSHOT.j ar hadoop-mapreduce-client-c ommon-3.3.0-SN APSHOT -sources.j ar hadoop-mapreduce-client-common-3.3 .0-SNAPSH OT-test- sources.jar hadoop-mapreduce-clien t-core-3.3 .0-SNAPSH OT.jar hadoop-mapreduce-clien t-core-3 .3.0-SNAPSHOT- sources.jar hadoopmapreduce-client-core-3.3.0-SNAPSHOT-test- sources.jar hadoop-mapreduce-clien t-hs-3.3.0-SNA PSHOT.j ar hadoop-mapreduce-client-h s-3.3.0-SN APSHOT- sources.j ar hadoop-mapreduce-client-h s3.3.0-SNAPSHOT-test-sources.j ar hadoop-mapreduce-client-h s- plu gins-3.3.0-SNAPSHOT.j ar hadoop-mapreduce-client-h s- plugins-3 .3.0-SNAPSHOT- sources.jar hadoop-mapreduce-clien t-hs- plu gin s3.3.0-SNAPSHOT-test-sources.j ar hadoop-mapreduce-client-j obclien t-3.3.0-SNAPSHOT.j ar hadoop-mapreduce-client-j obclien t-3.3.0-SNA PSHOT- sources.jar hadoop-mapreduce-client-j obclient-3 .3.0SNAPSHOT-tests.jar hadoop-mapreduce-client-j obclient-3 .3.0-SNAPSHOT-test- sources.jar hadoop-mapreduce-clien t-nativetask-3 .3.0-SNAPSHOT.jar hadoop-mapreduce-client-nativetask -3.3.0SNAPSHOT-sources.jar hadoop-mapreduce-clien t-nativ etask-3 .3.0-SNAPSHOT-test- sources.jar hadoop-mapreduce-clien t- shuffle-3 .3.0-SNAPSHOT.jar hadoop-mapreduce-client- shuffle-3.3.0SNAPSHOT-sources.jar hadoop-mapreduce-clien t- shuffle-3 .3.0-SNAPSHOT-test- sources.jar hadoop-mapreduce-clien t-uploader-3.3.0-SNAPSHOT.j ar hadoop-mapreduce-exam ples-3.3.0-SN APSHOT .jar hadoop-mapreduce-exam ples-3 .3.0-SNA PSHOT- sources.jar hadoop-mapreduce-exam ples-3.3.0-SNAPSHOT- test- sources.jar hadoop-nfs-3.3.0-SNAPSHOT .jar hadoop-registry-3.3 .0-SNAPSH OT.jar hadoop-yarn-api-3.3.0-SNAPSHOT.j ar hadoop-yarn-api-3.3.0-SNAPSH OT-sources.jar hadoop-yarn-api-3.3.0-SNAPSHOT- test- sources.jar hadoop-yarn-application s- distributedshell-3.3.0-SN APSHOT .jar hadoop-yarn-applications- distribu tedsh ell-3 .3.0-SNAPSHOT- sources.jar hadoop-yarn-applications-distributedshell-3.3.0-SNAPSHOT- test- sources.jar hadoop-yarn-application s-unmanaged-am- launcher3.3.0-SNAPSHOT.jar hadoop-yarn-applications-unman aged- am-launcher-3.3.0-SNAPSHOT -sources.j ar hadoop-yarn-applications-unmanaged- am-launcher-3.3.0-SN APSHOT- test-sources.j ar hadoopyarn-client-3.3.0-SNAPSHOT.jar hadoop-yarn-client-3.3.0-SNAPSHOT- sources.j ar hadoop-yarn-client-3.3.0-SNAPSHOT- test-sources.j ar hadoop-yarn-common-3.3.0-SNAPSHOT.j ar hadoop-yarncommon-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-common-3.3.0-SNAPSHOT -test-sources.jar hadoop-yarn-csi-3.3.0-SNAPSHOT .jar hadoop-yarn-registr y-3.3.0-SNA PSHOT.j ar hadoop-yarn-serverapplicationhistory ser vice-3.3.0-SN APSHOT .jar hadoop-yarn-server-applicationhistoryservice-3.3.0-SN APSHOT- sources.j ar hadoop-yarn-server-applicationhistoryservice-3 .3.0-SNAPSHOT-test- sources.jar hadoop-yarn-server-common-3.3 .0-SNAPSH OT.jar hadoop-yarn-server-comm on-3.3.0-SNAPSHOT- sources.jar hadoop-yarn-server-comm on-3.3.0-SNAPSHOT- test- sources.jar hadoop-yarn-servernodemanager-3.3.0-SNAPSHOT.jar hadoop-yarn-server-nodemanager-3.3 .0-SNAPSH OT-sources.jar hadoop-yarn-server-nodemanager-3 .3.0-SNAPSHOT-test- sources.jar hadoop-yarn-serverresourcemanager-3.3.0-SNAPSHOT.jar hadoop-yarn-server-resourceman ager-3.3.0-SNAPSHOT- sources.jar hadoop-yarn-server-resourcemanager-3 .3.0-SNAPSHOT-test- sources.jar hadoop-yarn-serverrouter-3.3.0-SNAPSHOT.jar hadoop-yarn-server-shar edcacheman ager-3.3.0-SNAPSHOT.j ar hadoop-yarn-server-tests-3.3.0-SN APSHOT .jar hadoop-yarn-server-tests-3.3.0-SNAPSHOT- sources.jar hadoop-yarn-server-tests-3 .3.0-SNAPSHOT-tests.jar hadoop-yarn-server-tests-3.3.0-SNA PSHOT- test- sources.j ar hadoop-yarn-server-timeline- plu gin storage-3.3.0-SN APSHOT .jar hadoop-yarn-servertimelineservice-3.3.0-SNAPSHOT.j ar hadoop-yarn-server-timelineserv ice-hbase-client-3.3.0-SN APSHOT .jar hadoop-yarn-server-timelineservice-h base-c ommon-3.3.0-SN APSHOT .jar hadoop-yarn-servertimelineservice-hbase-copr ocessor-3.3.0-SNAPSHOT.j ar hadoop-yarn-server-timelineservice-hbase-tests-3.3.0-SNAPSHOT.j ar hadoop-yarn-server-web- proxy-3.3.0-SN APSHOT .jar hadoop-yarn-serverweb-proxy-3.3.0-SNAPSHOT- sources.jar hadoop-yarn-server- web- proxy -3.3.0-SNAPSHOT- test- sources.jar hadoop-yarn-services-api-3 .3.0-SNAPSHOT.jar hadoop-yarn-services-api-3 .3.0-SNAPSHOTsources.jar hadoop-yarn-services-api-3.3.0-SN APSHOT -test-sources.jar hadoop-yarn-services-c ore-3.3.0-SN APSHOT .jar hadoop-yarn-services-c ore-3.3.0-SN APSHOT- sources.j ar hadoop-yarn-servicescore-3.3.0-SNAPSHOT-test-sources.jar hbase-annotations-1.4.8.jar hbase-client-1.4.8.jar hbase-common-1.4.8.jar hbase-protocol-1.4.8.jar HikariCP-java7-2.4.12.jar hsqldb-2.3.4.jar htrace-core3.1.0-incubating.jar htrace-core4-4.1.0-incubating.jar httpclient-4.5.6.jar httpcore-4.4.10.jar jackson-annotations-2.9.8.j ar jackson-core-2.9.8.jar jackson-core-asl-1.9.13.jar jackson-databind-2.9.8 .jar jackson-jaxrs-1.9.13.jar jackson-jaxrs-base-2.9.8.j ar jackson-jaxrs-json-provider-2.9.8.j ar jackson-mapper-asl-1.9.13.jar jackson-module-jaxb-annotation s-2.9.8 .jar jackson-xc-1.9.13.jar java-util1.9.0.jar javax.activation-api-1.2.0.jar javax.annotation-api-1.3.2 .jar javax.inject-1.jar javax.servlet-api-3.1 .0.jar javax.websocket- api-1.0.j ar javax-websocket-clien t-im pl-9 .3.24.v20180605.jar javaxwebsocket-server- impl-9.3.24.v20180605.jar jaxb-api-2.2.11.jar jaxb-impl-2.2.3-1.jar jcip-annotations-1.0-1.jar jcodings-1.0.13.jar jersey-client-1.19.jar jersey-core-1.19.jar jersey-guice-1.19.jar jersey-json-1.19.jar jersey-server-1.19.jar jersey-servlet-1.19.jar jettison-1.1.jar jetty-annotations-9.3 .24.v20180605.jar jetty-http-9.3.24.v20180605.jar jetty-io-9.3.24.v20180605.jar jetty-jndi9.3.24.v20180605.jar jetty-plus-9.3.24.v20180605.jar jetty-security-9.3.24.v20180605.jar jetty-server-9.3.24.v20180605.jar jetty-servlet-9.3.24.v20180605.jar jetty-util-9.3.24.v20180605.jar jettywebapp-9.3.24.v20180605.jar jetty-xml-9.3.24.v20180605.jar jline-3.9.0.jar joni-2.1.2.jar jsch-0.1.54.jar json-io-2.5.1.jar json-smart-2.3.jar jsp-api-2.1.jar jsr305-3.0.0.jar jsr311-api-1.1.1.jar jul-toslf4j-1.7.25.jar kerb-admin-1.0.1.jar kerb-client-1.0.1.jar kerb-common-1.0.1.jar kerb-core-1.0.1.jar kerb-crypto-1.0.1.jar kerb-identity-1.0.1.jar kerb-server-1.0.1.jar kerb-simplekdc-1.0.1.jar kerbutil-1.0.1.jar kerby-asn1-1.0.1.jar kerby-config-1.0.1.jar kerby-pkix-1.0.1.jar kerby-util-1.0.1.jar kerby-xdr-1.0.1.jar log4j-1.2.17.jar metrics-core-2.2.0.jar metrics-core-3.2.4.jar mssql-jdbc6.2.1.jre7.jar netty-3.10.6.Final.jar netty-all-4.1.27.Final.jar netty-buffer-4.1.27.Final.jar netty-codec-4.1.27.Final.jar netty-codec-http2-4.1.27.Final.jar netty-codec-http-4.1.27.Fin al.j ar netty-codecCopyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 5

6.

問題1: classpathが長すぎる Java One 2015のKeynoteで紹介された classpathが長すぎる、多数のユーザがいるこ とに起因する問題 1. ライブラリが1個紛失してもわからない 2. Conflictが発生したときの修正が困難 3. 内部APIが安全に変更できるかわからない ("Public is TOO public") Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 6

7.

Jigsaw導入に期待 Hadoopコミュニティでshaded jarを用意 • 2. の問題を部分的に解決 ただしメンテナンスが困難 • どのライブラリをshadeすべきか • shade漏れがないか "Jigsaw" を活用することで根本解決したい Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 7

8.

問題2: GCの長期化 HDFSのマスタ(NameNode) • 名前空間とブロックの位置情報を全て ヒープに保持 • 大規模クラスタではヒープが数100GBに • STW(Stop-The-World)が長期化 • ヤフーのある環境では分単位の停止 • STWのたびにフェールオーバー Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 8

9.

新しいGCアルゴリズムに期待 バージョンを上げると利用できるGCが増える • ZGC (Java 11) • Shenandoah GC (Java 12, RHEL同梱の OpenJDK 8にもbackport) いずれもSTWを最小限に抑えることを意図し て開発されている • ヤフーでも検証予定 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 9

10.

バージョンを上げると いいことずくめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Copyright (C) 2019 Yahoo Japan Corporation. AllReserved. Rights Reserved.

11.

なのに、なぜ Hadoopは Java 11対応 できていないのか? Copyright (C) 2019 Yahoo Japan Corporation. All Rights Copyright (C) 2019 Yahoo Japan Corporation. AllReserved. Rights Reserved.

12.

Hadoopの(メンテナにとって良くない)特徴 コードベースが巨大すぎる 全体的にレガシーなコード • 10年以上の歴史 • 非互換にことごとくハマる 後方互換性の維持 • Java 11とJava 8の両方で動くようにする • とんでもなく大変 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 12

13.

ソースコードの規模 *.java ファイルの行数 • JUnit5: 9.8万行 • Apache Tomcat: 14万行 • Spring: 68万行 • Apache Hadoop: 158万行 • JDK 11: 368万行 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 13

14.

レガシーコード実例 • こんなコードがいたるところにある • これはJava 11でもそのまま動くので、まだ まし Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 14

15.

Hadoopが影響を受けた問題 • '_' 1文字の命名の禁止 (JEP 213) • sun.misc.Cleaner が移動 (JEP 260) • Doclet (JEP 221) • HTML5 JavaDoc (JEP 224) • Java EEモジュールの削除 (JEP 320) • などなど Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 15

16.

'_' 1文字の命名が禁止に Milling Project Coins (JEP 213)で禁止 • Unnamed lambda parameterとして 利用するため (JEP 302) • HadoopのWeb UIの一部で利用してい るHamletという独自フレームワークに '_' が大量に含まれていた Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 16

17.

互換性を意識しながら修正 '_' を '__' に変換するだけだと、互換性が崩れる '__' に変換したpackageを新規作成 古いpackageをJava 9以上でコンパイルさせない • Maven compiler plugin で設定 • リリースはJava 8で実施されるため、リリースに 影響しない パッチのサイズは1MBに... (HADOOP-11875) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 17

18.

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 18

19.

Hadoopとsun.misc.Cleaner HadoopにおけるCleanerの利用目的 • munmap(2)の実装 • Linux前提なら、JNIから叩けばよい (mlockを使う場合はそうしている) • WindowsだとJNI経由で叩けないので Cleanerを利用 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 19

20.

パッケージが移動したときに互換性を保つには? Java 8でも動作させる必要があるため、直接 importせずにreflectionを使う (HADOOP12760) • sun.misc.Unsafe#invokeCleaner (移動 先のパッケージ) を呼び出す • Exceptionが出たらJava 8なので、 sun.misc.Cleanerを呼び出す • Apache Luceneの対応を参考にした Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 20

21.

黒魔術 最後の手段であることに注意 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 21

22.

Doclet Javadocの出力を整形してくれるツール • HadoopではDocletの機能を利用してJavadocの生成 を特定のアノテーションが付与されたクラス/メソッド のみに制限していた • Java 10からパッケージが変わった・・・ com.sun.tools.doclets -> jdk.javadoc.doclet • HadoopではJava10以降はDocletの機能を無効化 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 22

23.

Doclet • 無効化したことで全てのクラス/メソッドで Javadocが生成されるようになった • 今まで隠れていたHTMLのフォーマット違反の 大量のJavadocが明るみに・・・ • みんなで頑張って修正(HADOOP-15785, HDFS-13939) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 23

24.

HTMLフォーマット違反の修正 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 24

25.

HTMLフォーマット違反の修正 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 25

26.

JDK11のJavadoc • Java11からJavadocのデフォルト設定が HTML5に変わった(Java10まではHTML4が デフォルト) • そのままJavadocビルドするとまた大量のエ ラーが発生 • JavadocのオプションでHTML4でビルドする ように指定(HADOOP-15902) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 26

27.

EEモジュールがJDKから削除 Java EEモジュール • JDK9でdeprecatedになった • JDK11で削除された(JEP320) • Hadoopで使用していたライブラリを明示的に追加した • javax.activation-api(HADOOP-15775) • javax.annotation-api(HADOOP-15895) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 27

28.

EEモジュールがJDKから削除 基本的にはMavenのdependencyに追加するだけ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 28

29.

ライブラリの バージョンアップ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Copyright (C) 2019 Yahoo Japan Corporation. AllReserved. Rights Reserved.

30.

ライブラリのバージョンアップ いくつかのライブラリではJDK11をサポートしてい るバージョンにアップグレードする必要がある • Log4J • JUnit • Mockito • Jersey などなど Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 30

31.

Log4J Log4J1(1系) • 2015年8月 EOL • 当然Java11はサポート対象外(でも結構動く) Log4J2(2系) • Java8もJava11もサポート • 1系と比べてパフォーマンスが大幅に改善 • 1系からマイグレーションする方法にいくつかの選択肢がある • 1系の設定ファイルと非互換(ユーザーインパクト大) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 31

32.

SLF4Jを使ったマイグレーション Log4J1 → Log4J1 with SLF4J • 実装(Log4J)とインターフェース(SLF4J)を分離 • 1系と2系で非互換なAPIをSLF4Jで吸収 • Jarと設定ファイルを差し替えれば簡単に2系への切り 替えができる • Hadoopでは最近ついに対応完了 追加削除で約1万6千行! Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 32

33.

SLF4Jを使ったマイグレーション Hadoop logging code Hadoop logging code Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Log4J1 log4j.jar Bridge slf4j-log4j12.jar Log4J1 log4j.jar Bridge log4j-slf4jimpl.jar Log4J2 log4j-api.jar log4j-core.jar SLF4J API slf4j-api.jar 33

34.

SLF4Jを使ったマイグレーション Log4J2 with SLF4J • SLF4Jを使っても設定ファイルは実装部分に依存する (1系なら1系の、2系なら2系の設定ファイルが必要) • HadoopのMavenビルド時のオプション(-Plog4j2) でLog4J2の設定ファイルが生成される方針にする予定 (HADOOP-16206) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 34

35.

JUnit JUnit4 • サポートはJava8まで • 11はサポート対象外(でも結構動く) JUnit5 • Java8もJava11もサポート • JUnit4からのマイグレーション手順は整理されている ※それでもHadoopには大量のユニットテストがあるので大変 • junit-vintage-engineを使うとJunit4との共存が可能 徐々にJUnit5へのマイグレーションを進めることができる! Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 35

36.

JUnit4からJUnit5への移行 移行前 • JUnit4のテストのみ存在 移行期(Hadoopはここ) • vintageを使ってJUnit4とJUnit5が共存 • 新しいテストは全てJUnit5で書く(メーリスで合意を得る) • 既存のJUnit4のテストは徐々にJUnit5に直す 移行完了時 • JUnit4へのdependencyを削除 • junit-vintage-engineのdependencyも削除 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 36

37.

Mockito JUnitと組み合わせて使うモックライブラリ • Java11対応で2系へのアップグレードが必要 • (非公式ながら)移行ガイドが整ってる https://asolntsev.github.io/en/2016/10/11/ mockito-2.1 • アップグレード完了済み!(HADOOP-14178) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 37

38.

Jersey RESTfulなWebサービス開発のためのフレームワーク Update jersey from 1.19 to 2.x (HADOOP-15984) • 1系と2系でだいぶ互換性が崩れている • 移行ガイドが結構微妙 • Jersey1系 x JDK11で失敗するテストがある • やばい。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 38

39.

JDK11対応に向けて 残りの作業 • 依存ライブラリのアップグレードをがんばる • JDK11で通らないテストがまだたくさんあるので1つ ずつ潰していく(HADOOP-16264) • 今年中には対応できるかも Thanks to all the contributors! Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 39

40.

最後に Yahoo! JAPANでは多種多様なビッグデータを保 有・利活用するために、Hadoop, Spark, Kafka, NiFi, PrestoなどJVM上で動作する多数のミドル ウェアを取り扱っています。 一緒にJVMのチューニングや、Javaの最新機能を取 り込んでいくためにエンジニアを募集中です! https://about.yahoo.co.jp/hr/ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 40