SlideShare a Scribd company logo
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
2019年5月18日
鯵坂 明, 浅沼 孝信
Java11への
マイグレーションガイド
~Apache Hadoopの事例~
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
自己紹介
鯵坂 明 (@ajis_ka)
Apache Hadoop PMC
2018/9 中途入社
• Hadoop導入支援
• テクニカルサポート
• Hadoopバージョンアッ
プ + 新機能導入検証
• HadoopのJava11対応
2
浅沼 孝信 (@hayanige)
Apache Hadoopコミッタ
2012/4 新卒入社
• Hadoop運用・開発
• NiFi導入・運用
• Hadoopバージョンアッ
プ + 新機能導入検証
• HadoopのJava11対応
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
とは
3
OSSの分散処理基盤
• Hadoop Distributed FileSystem
(HDFS)
• 分散処理のスケジューリング、クラスタ
のリソース管理 (YARN: Yet Another
Resource Negotiator)
• ほとんどがJavaで実装されている
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
HadoopとJava 11
4
Hadoopは現時点でJava 11に未対応
• Java 11対応のJIRA: HADOOP-15338
• 対応が終わると、Hadoopにまつわる重
大な問題を解決できると期待している
• 今回は、重大な問題を2つ紹介
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
これ、見覚えありませんか?
5
accessors-smart-1.2.jar animal-sniffer-annotations-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-jdk15on-
1.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-configuration2-
2.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-net-
3.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-SNAPSHOT.jar hadoop-auth-3.3.0-SNAPSHOT.jar hadoop-client-api-3.3.0-SNAPSHOT.jar hadoop-client-
minicluster-3.3.0-SNAPSHOT.jar hadoop-client-runtime-3.3.0-SNAPSHOT.jar hadoop-common-3.3.0-SNAPSHOT.jar hadoop-common-3.3.0-SNAPSHOT-sources.jar hadoop-common-3.3.0-SNAPSHOT-
tests.jar hadoop-common-3.3.0-SNAPSHOT-test-sources.jar hadoop-kms-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-app-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-app-3.3.0-SNAPSHOT-
sources.jar hadoop-mapreduce-client-app-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-common-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-common-3.3.0-SNAPSHOT-sources.jar
hadoop-mapreduce-client-common-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-core-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-core-3.3.0-SNAPSHOT-sources.jar hadoop-
mapreduce-client-core-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-hs-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-hs-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-client-hs-
3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-hs-plugins-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-hs-plugins-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-client-hs-plugins-
3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-jobclient-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-jobclient-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-client-jobclient-3.3.0-
SNAPSHOT-tests.jar hadoop-mapreduce-client-jobclient-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-nativetask-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-nativetask-3.3.0-
SNAPSHOT-sources.jar hadoop-mapreduce-client-nativetask-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-shuffle-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-shuffle-3.3.0-
SNAPSHOT-sources.jar hadoop-mapreduce-client-shuffle-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-uploader-3.3.0-SNAPSHOT.jar hadoop-mapreduce-examples-3.3.0-SNAPSHOT.jar
hadoop-mapreduce-examples-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-examples-3.3.0-SNAPSHOT-test-sources.jar hadoop-nfs-3.3.0-SNAPSHOT.jar hadoop-registry-3.3.0-SNAPSHOT.jar
hadoop-yarn-api-3.3.0-SNAPSHOT.jar hadoop-yarn-api-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-api-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-applications-distributedshell-3.3.0-SNAPSHOT.jar
hadoop-yarn-applications-distributedshell-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-applications-distributedshell-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-applications-unmanaged-am-launcher-
3.3.0-SNAPSHOT.jar hadoop-yarn-applications-unmanaged-am-launcher-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-applications-unmanaged-am-launcher-3.3.0-SNAPSHOT-test-sources.jar hadoop-
yarn-client-3.3.0-SNAPSHOT.jar hadoop-yarn-client-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-client-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-common-3.3.0-SNAPSHOT.jar hadoop-yarn-
common-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-registry-3.3.0-SNAPSHOT.jar hadoop-yarn-server-
applicationhistoryservice-3.3.0-SNAPSHOT.jar hadoop-yarn-server-applicationhistoryservice-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-server-applicationhistoryservice-3.3.0-SNAPSHOT-test-sources.jar
hadoop-yarn-server-common-3.3.0-SNAPSHOT.jar hadoop-yarn-server-common-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-server-common-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-server-
nodemanager-3.3.0-SNAPSHOT.jar hadoop-yarn-server-nodemanager-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-server-nodemanager-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-server-
resourcemanager-3.3.0-SNAPSHOT.jar hadoop-yarn-server-resourcemanager-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-server-resourcemanager-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-server-
router-3.3.0-SNAPSHOT.jar hadoop-yarn-server-sharedcachemanager-3.3.0-SNAPSHOT.jar hadoop-yarn-server-tests-3.3.0-SNAPSHOT.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-SNAPSHOT-test-sources.jar hadoop-yarn-server-timeline-pluginstorage-3.3.0-SNAPSHOT.jar hadoop-yarn-server-
timelineservice-3.3.0-SNAPSHOT.jar hadoop-yarn-server-timelineservice-hbase-client-3.3.0-SNAPSHOT.jar hadoop-yarn-server-timelineservice-hbase-common-3.3.0-SNAPSHOT.jar hadoop-yarn-server-
timelineservice-hbase-coprocessor-3.3.0-SNAPSHOT.jar hadoop-yarn-server-timelineservice-hbase-tests-3.3.0-SNAPSHOT.jar hadoop-yarn-server-web-proxy-3.3.0-SNAPSHOT.jar hadoop-yarn-server-
web-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-SNAPSHOT-
sources.jar hadoop-yarn-services-api-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-services-core-3.3.0-SNAPSHOT.jar hadoop-yarn-services-core-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-services-
core-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-core-
3.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.jar 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.jar jackson-jaxrs-json-provider-2.9.8.jar jackson-mapper-asl-1.9.13.jar jackson-module-jaxb-annotations-2.9.8.jar jackson-xc-1.9.13.jar java-util-
1.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.jar javax-websocket-client-impl-9.3.24.v20180605.jar javax-
websocket-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-jndi-
9.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 jetty-
webapp-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-to-
slf4j-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 kerb-
util-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-jdbc-
6.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.Final.jar netty-codec-
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
問題1: classpathが長すぎる
6
Java One 2015のKeynoteで紹介された
classpathが長すぎる、多数のユーザがいるこ
とに起因する問題
1. ライブラリが1個紛失してもわからない
2. Conflictが発生したときの修正が困難
3. 内部APIが安全に変更できるかわからない
("Public is TOO public")
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Jigsaw導入に期待
7
Hadoopコミュニティでshaded jarを用意
• 2. の問題を部分的に解決
ただしメンテナンスが困難
• どのライブラリをshadeすべきか
• shade漏れがないか
"Jigsaw" を活用することで根本解決したい
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
問題2: GCの長期化
8
HDFSのマスタ(NameNode)
• 名前空間とブロックの位置情報を全て
ヒープに保持
• 大規模クラスタではヒープが数100GBに
• STW(Stop-The-World)が長期化
• ヤフーのある環境では分単位の停止
• STWのたびにフェールオーバー
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
新しいGCアルゴリズムに期待
9
バージョンを上げると利用できるGCが増える
• ZGC (Java 11)
• Shenandoah GC (Java 12, RHEL同梱の
OpenJDK 8にもbackport)
いずれもSTWを最小限に抑えることを意図し
て開発されている
• ヤフーでも検証予定
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
バージョンを上げると
いいことずくめ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
なのに、なぜ Hadoopは
Java 11対応
できていないのか?
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Hadoopの(メンテナにとって良くない)特徴
12
コードベースが巨大すぎる
全体的にレガシーなコード
• 10年以上の歴史
• 非互換にことごとくハマる
後方互換性の維持
• Java 11とJava 8の両方で動くようにする
• とんでもなく大変
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ソースコードの規模
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.
レガシーコード実例
14
• こんなコードがいたるところにある
• これはJava 11でもそのまま動くので、まだ
まし
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Hadoopが影響を受けた問題
15
• '_' 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.
'_' 1文字の命名が禁止に
16
Milling Project Coins (JEP 213)で禁止
• Unnamed lambda parameterとして
利用するため (JEP 302)
• HadoopのWeb UIの一部で利用してい
るHamletという独自フレームワークに
'_' が大量に含まれていた
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
互換性を意識しながら修正
17
'_' を '__' に変換するだけだと、互換性が崩れる
'__' に変換したpackageを新規作成
古いpackageをJava 9以上でコンパイルさせない
• Maven compiler plugin で設定
• リリースはJava 8で実施されるため、リリースに
影響しない
パッチのサイズは1MBに... (HADOOP-11875)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 18
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Hadoopとsun.misc.Cleaner
19
HadoopにおけるCleanerの利用目的
• munmap(2)の実装
• Linux前提なら、JNIから叩けばよい
(mlockを使う場合はそうしている)
• WindowsだとJNI経由で叩けないので
Cleanerを利用
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
パッケージが移動したときに互換性を保つには?
20
Java 8でも動作させる必要があるため、直接
importせずにreflectionを使う (HADOOP-
12760)
• sun.misc.Unsafe#invokeCleaner (移動
先のパッケージ) を呼び出す
• Exceptionが出たらJava 8なので、
sun.misc.Cleanerを呼び出す
• Apache Luceneの対応を参考にした
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
黒魔術
21
最後の手段であることに注意
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Doclet
22
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.
Doclet
23
• 無効化したことで全てのクラス/メソッドで
Javadocが生成されるようになった
• 今まで隠れていたHTMLのフォーマット違反の
大量のJavadocが明るみに・・・
• みんなで頑張って修正(HADOOP-15785,
HDFS-13939)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
HTMLフォーマット違反の修正
24
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
HTMLフォーマット違反の修正
25
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JDK11のJavadoc
26
• Java11からJavadocのデフォルト設定が
HTML5に変わった(Java10まではHTML4が
デフォルト)
• そのままJavadocビルドするとまた大量のエ
ラーが発生
• JavadocのオプションでHTML4でビルドする
ように指定(HADOOP-15902)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
EEモジュールがJDKから削除
27
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.
EEモジュールがJDKから削除
28
基本的にはMavenのdependencyに追加するだけ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ライブラリの
バージョンアップ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ライブラリのバージョンアップ
30
いくつかのライブラリではJDK11をサポートしてい
るバージョンにアップグレードする必要がある
• Log4J
• JUnit
• Mockito
• Jersey
などなど
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Log4J
31
Log4J1(1系)
• 2015年8月 EOL
• 当然Java11はサポート対象外(でも結構動く)
Log4J2(2系)
• Java8もJava11もサポート
• 1系と比べてパフォーマンスが大幅に改善
• 1系からマイグレーションする方法にいくつかの選択肢がある
• 1系の設定ファイルと非互換(ユーザーインパクト大)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
SLF4Jを使ったマイグレーション
32
Log4J1 → Log4J1 with SLF4J
• 実装(Log4J)とインターフェース(SLF4J)を分離
• 1系と2系で非互換なAPIをSLF4Jで吸収
• Jarと設定ファイルを差し替えれば簡単に2系への切り
替えができる
• Hadoopでは最近ついに対応完了
追加削除で約1万6千行!
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
SLF4Jを使ったマイグレーション
33
Hadoop
logging code
SLF4J API
slf4j-api.jar
Bridge
slf4j-
log4j12.jar
Log4J1
log4j.jar
Bridge
log4j-slf4j-
impl.jar
Log4J2
log4j-api.jar
log4j-core.jar
Hadoop
logging code
Log4J1
log4j.jar
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
SLF4Jを使ったマイグレーション
34
Log4J2 with SLF4J
• SLF4Jを使っても設定ファイルは実装部分に依存する
(1系なら1系の、2系なら2系の設定ファイルが必要)
• HadoopのMavenビルド時のオプション(-Plog4j2)
でLog4J2の設定ファイルが生成される方針にする予定
(HADOOP-16206)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JUnit
35
JUnit4
• サポートはJava8まで
• 11はサポート対象外(でも結構動く)
JUnit5
• Java8もJava11もサポート
• JUnit4からのマイグレーション手順は整理されている
※それでもHadoopには大量のユニットテストがあるので大変
• junit-vintage-engineを使うとJunit4との共存が可能
徐々にJUnit5へのマイグレーションを進めることができる!
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JUnit4からJUnit5への移行
36
移行前
• JUnit4のテストのみ存在
移行期(Hadoopはここ)
• vintageを使ってJUnit4とJUnit5が共存
• 新しいテストは全てJUnit5で書く(メーリスで合意を得る)
• 既存のJUnit4のテストは徐々にJUnit5に直す
移行完了時
• JUnit4へのdependencyを削除
• junit-vintage-engineのdependencyも削除
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Mockito
37
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.
Jersey
38
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.
JDK11対応に向けて
39
残りの作業
• 依存ライブラリのアップグレードをがんばる
• JDK11で通らないテストがまだたくさんあるので1つ
ずつ潰していく(HADOOP-16264)
• 今年中には対応できるかも
Thanks to all the contributors!
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
最後に
40
Yahoo! JAPANでは多種多様なビッグデータを保
有・利活用するために、Hadoop, Spark, Kafka,
NiFi, PrestoなどJVM上で動作する多数のミドル
ウェアを取り扱っています。
一緒にJVMのチューニングや、Javaの最新機能を取
り込んでいくためにエンジニアを募集中です!
https://about.yahoo.co.jp/hr/

More Related Content

What's hot

Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
Yuki Morishita
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
 
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
NTT DATA Technology & Innovation
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介ksk_ha
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
オラクルエンジニア通信
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo!デベロッパーネットワーク
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
Amazon Web Services Japan
 
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
NTT DATA Technology & Innovation
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
 
Ansibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみたAnsibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみた
KeijiUehata1
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
hamaken
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Cloudera Japan
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
Hadoop入門
Hadoop入門Hadoop入門
Hadoop入門
Preferred Networks
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころFargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
Yuto Komai
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
yoku0825
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
ksk_ha
 

What's hot (20)

Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
 
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
 
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Ansibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみたAnsibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみた
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
 
Hadoop入門
Hadoop入門Hadoop入門
Hadoop入門
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころFargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 

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

Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Yahoo!デベロッパーネットワーク
 
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreadingApache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
 
Apache Hadoopの現在と未来
Apache Hadoopの現在と未来Apache Hadoopの現在と未来
Apache Hadoopの現在と未来
Yahoo!デベロッパーネットワーク
 
サーバー設定のお話
サーバー設定のお話サーバー設定のお話
サーバー設定のお話
Kazunori Inaba
 
最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの
cyberagent
 
Cake Matsuri Nanapi
Cake Matsuri NanapiCake Matsuri Nanapi
Cake Matsuri NanapiShuichi Wada
 
HAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたHAWQをCDHで動かしてみた
HAWQをCDHで動かしてみた
adachij2002
 
データ活用を効率化するHadoop WebUIと権限管理改善事例
データ活用を効率化するHadoop WebUIと権限管理改善事例データ活用を効率化するHadoop WebUIと権限管理改善事例
データ活用を効率化するHadoop WebUIと権限管理改善事例
Masahiro Kiura
 
Antenna 20180306 AzureのIaaSで構築する、シンプルなWebサーバ環境
Antenna 20180306 AzureのIaaSで構築する、シンプルなWebサーバ環境Antenna 20180306 AzureのIaaSで構築する、シンプルなWebサーバ環境
Antenna 20180306 AzureのIaaSで構築する、シンプルなWebサーバ環境
akio doi
 
Apache Ambari Overview -- Hadoop for Everyone
Apache Ambari Overview -- Hadoop for EveryoneApache Ambari Overview -- Hadoop for Everyone
Apache Ambari Overview -- Hadoop for Everyone
Yifeng Jiang
 
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
オラクルエンジニア通信
 
Railsの運用について
Railsの運用についてRailsの運用について
Railsの運用についてYuuki Namikawa
 
20150803 baas meetup
20150803 baas meetup20150803 baas meetup
20150803 baas meetup
Daichi Morifuji
 
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API DragonJOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
Naoto Gohko
 
[Oracle big data jam session #1] Apache Spark ことはじめ
[Oracle big data jam session #1] Apache Spark ことはじめ[Oracle big data jam session #1] Apache Spark ことはじめ
[Oracle big data jam session #1] Apache Spark ことはじめ
Kenichi Sonoda
 
Hadoop -ResourceManager HAの仕組み-
Hadoop -ResourceManager HAの仕組み-Hadoop -ResourceManager HAの仕組み-
Hadoop -ResourceManager HAの仕組み-
Yuki Gonda
 
Apache Kylinについて #hcj2016
Apache Kylinについて #hcj2016Apache Kylinについて #hcj2016
Apache Kylinについて #hcj2016
Yahoo!デベロッパーネットワーク
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
 
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
NTT DATA OSS Professional Services
 

Similar to Java11へのマイグレーションガイド ~Apache Hadoopの事例~ (20)

Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
 
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreadingApache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
 
Apache Hadoopの現在と未来
Apache Hadoopの現在と未来Apache Hadoopの現在と未来
Apache Hadoopの現在と未来
 
サーバー設定のお話
サーバー設定のお話サーバー設定のお話
サーバー設定のお話
 
Hadoop ~Yahoo! JAPANの活用について~
Hadoop ~Yahoo! JAPANの活用について~Hadoop ~Yahoo! JAPANの活用について~
Hadoop ~Yahoo! JAPANの活用について~
 
最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの最新版Hadoopクラスタを運用して得られたもの
最新版Hadoopクラスタを運用して得られたもの
 
Cake Matsuri Nanapi
Cake Matsuri NanapiCake Matsuri Nanapi
Cake Matsuri Nanapi
 
HAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたHAWQをCDHで動かしてみた
HAWQをCDHで動かしてみた
 
データ活用を効率化するHadoop WebUIと権限管理改善事例
データ活用を効率化するHadoop WebUIと権限管理改善事例データ活用を効率化するHadoop WebUIと権限管理改善事例
データ活用を効率化するHadoop WebUIと権限管理改善事例
 
Antenna 20180306 AzureのIaaSで構築する、シンプルなWebサーバ環境
Antenna 20180306 AzureのIaaSで構築する、シンプルなWebサーバ環境Antenna 20180306 AzureのIaaSで構築する、シンプルなWebサーバ環境
Antenna 20180306 AzureのIaaSで構築する、シンプルなWebサーバ環境
 
Apache Ambari Overview -- Hadoop for Everyone
Apache Ambari Overview -- Hadoop for EveryoneApache Ambari Overview -- Hadoop for Everyone
Apache Ambari Overview -- Hadoop for Everyone
 
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
 
Railsの運用について
Railsの運用についてRailsの運用について
Railsの運用について
 
20150803 baas meetup
20150803 baas meetup20150803 baas meetup
20150803 baas meetup
 
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API DragonJOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
JOSUG2014 OpenStack 4th birthday party in Japan; the way of OpenStack API Dragon
 
[Oracle big data jam session #1] Apache Spark ことはじめ
[Oracle big data jam session #1] Apache Spark ことはじめ[Oracle big data jam session #1] Apache Spark ことはじめ
[Oracle big data jam session #1] Apache Spark ことはじめ
 
Hadoop -ResourceManager HAの仕組み-
Hadoop -ResourceManager HAの仕組み-Hadoop -ResourceManager HAの仕組み-
Hadoop -ResourceManager HAの仕組み-
 
Apache Kylinについて #hcj2016
Apache Kylinについて #hcj2016Apache Kylinについて #hcj2016
Apache Kylinについて #hcj2016
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
 

More from Yahoo!デベロッパーネットワーク

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
Yahoo!デベロッパーネットワーク
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
Yahoo!デベロッパーネットワーク
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
 
LakeTahoe
LakeTahoeLakeTahoe
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
Yahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
Yahoo!デベロッパーネットワーク
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo!デベロッパーネットワーク
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
Yahoo!デベロッパーネットワーク
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
Yahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo!デベロッパーネットワーク
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
Yahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
Yahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
Yahoo!デベロッパーネットワーク
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
Yahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
Yahoo!デベロッパーネットワーク
 

More from Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
 

Recently uploaded

This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 

Recently uploaded (9)

This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 

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

  • 1. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2019年5月18日 鯵坂 明, 浅沼 孝信 Java11への マイグレーションガイド ~Apache Hadoopの事例~
  • 2. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 自己紹介 鯵坂 明 (@ajis_ka) Apache Hadoop PMC 2018/9 中途入社 • Hadoop導入支援 • テクニカルサポート • Hadoopバージョンアッ プ + 新機能導入検証 • HadoopのJava11対応 2 浅沼 孝信 (@hayanige) Apache Hadoopコミッタ 2012/4 新卒入社 • Hadoop運用・開発 • NiFi導入・運用 • Hadoopバージョンアッ プ + 新機能導入検証 • HadoopのJava11対応
  • 3. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. とは 3 OSSの分散処理基盤 • Hadoop Distributed FileSystem (HDFS) • 分散処理のスケジューリング、クラスタ のリソース管理 (YARN: Yet Another Resource Negotiator) • ほとんどがJavaで実装されている
  • 4. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. HadoopとJava 11 4 Hadoopは現時点でJava 11に未対応 • Java 11対応のJIRA: HADOOP-15338 • 対応が終わると、Hadoopにまつわる重 大な問題を解決できると期待している • 今回は、重大な問題を2つ紹介
  • 5. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. これ、見覚えありませんか? 5 accessors-smart-1.2.jar animal-sniffer-annotations-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-jdk15on- 1.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-configuration2- 2.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-net- 3.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-SNAPSHOT.jar hadoop-auth-3.3.0-SNAPSHOT.jar hadoop-client-api-3.3.0-SNAPSHOT.jar hadoop-client- minicluster-3.3.0-SNAPSHOT.jar hadoop-client-runtime-3.3.0-SNAPSHOT.jar hadoop-common-3.3.0-SNAPSHOT.jar hadoop-common-3.3.0-SNAPSHOT-sources.jar hadoop-common-3.3.0-SNAPSHOT- tests.jar hadoop-common-3.3.0-SNAPSHOT-test-sources.jar hadoop-kms-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-app-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-app-3.3.0-SNAPSHOT- sources.jar hadoop-mapreduce-client-app-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-common-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-common-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-client-common-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-core-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-core-3.3.0-SNAPSHOT-sources.jar hadoop- mapreduce-client-core-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-hs-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-hs-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-client-hs- 3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-hs-plugins-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-hs-plugins-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-client-hs-plugins- 3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-jobclient-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-jobclient-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-client-jobclient-3.3.0- SNAPSHOT-tests.jar hadoop-mapreduce-client-jobclient-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-nativetask-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-nativetask-3.3.0- SNAPSHOT-sources.jar hadoop-mapreduce-client-nativetask-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-shuffle-3.3.0-SNAPSHOT.jar hadoop-mapreduce-client-shuffle-3.3.0- SNAPSHOT-sources.jar hadoop-mapreduce-client-shuffle-3.3.0-SNAPSHOT-test-sources.jar hadoop-mapreduce-client-uploader-3.3.0-SNAPSHOT.jar hadoop-mapreduce-examples-3.3.0-SNAPSHOT.jar hadoop-mapreduce-examples-3.3.0-SNAPSHOT-sources.jar hadoop-mapreduce-examples-3.3.0-SNAPSHOT-test-sources.jar hadoop-nfs-3.3.0-SNAPSHOT.jar hadoop-registry-3.3.0-SNAPSHOT.jar hadoop-yarn-api-3.3.0-SNAPSHOT.jar hadoop-yarn-api-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-api-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-applications-distributedshell-3.3.0-SNAPSHOT.jar hadoop-yarn-applications-distributedshell-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-applications-distributedshell-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-applications-unmanaged-am-launcher- 3.3.0-SNAPSHOT.jar hadoop-yarn-applications-unmanaged-am-launcher-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-applications-unmanaged-am-launcher-3.3.0-SNAPSHOT-test-sources.jar hadoop- yarn-client-3.3.0-SNAPSHOT.jar hadoop-yarn-client-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-client-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-common-3.3.0-SNAPSHOT.jar hadoop-yarn- common-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-registry-3.3.0-SNAPSHOT.jar hadoop-yarn-server- applicationhistoryservice-3.3.0-SNAPSHOT.jar hadoop-yarn-server-applicationhistoryservice-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-server-applicationhistoryservice-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-server-common-3.3.0-SNAPSHOT.jar hadoop-yarn-server-common-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-server-common-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-server- nodemanager-3.3.0-SNAPSHOT.jar hadoop-yarn-server-nodemanager-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-server-nodemanager-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-server- resourcemanager-3.3.0-SNAPSHOT.jar hadoop-yarn-server-resourcemanager-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-server-resourcemanager-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-server- router-3.3.0-SNAPSHOT.jar hadoop-yarn-server-sharedcachemanager-3.3.0-SNAPSHOT.jar hadoop-yarn-server-tests-3.3.0-SNAPSHOT.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-SNAPSHOT-test-sources.jar hadoop-yarn-server-timeline-pluginstorage-3.3.0-SNAPSHOT.jar hadoop-yarn-server- timelineservice-3.3.0-SNAPSHOT.jar hadoop-yarn-server-timelineservice-hbase-client-3.3.0-SNAPSHOT.jar hadoop-yarn-server-timelineservice-hbase-common-3.3.0-SNAPSHOT.jar hadoop-yarn-server- timelineservice-hbase-coprocessor-3.3.0-SNAPSHOT.jar hadoop-yarn-server-timelineservice-hbase-tests-3.3.0-SNAPSHOT.jar hadoop-yarn-server-web-proxy-3.3.0-SNAPSHOT.jar hadoop-yarn-server- web-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-SNAPSHOT- sources.jar hadoop-yarn-services-api-3.3.0-SNAPSHOT-test-sources.jar hadoop-yarn-services-core-3.3.0-SNAPSHOT.jar hadoop-yarn-services-core-3.3.0-SNAPSHOT-sources.jar hadoop-yarn-services- core-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-core- 3.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.jar 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.jar jackson-jaxrs-json-provider-2.9.8.jar jackson-mapper-asl-1.9.13.jar jackson-module-jaxb-annotations-2.9.8.jar jackson-xc-1.9.13.jar java-util- 1.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.jar javax-websocket-client-impl-9.3.24.v20180605.jar javax- websocket-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-jndi- 9.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 jetty- webapp-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-to- slf4j-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 kerb- util-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-jdbc- 6.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.Final.jar netty-codec-
  • 6. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 問題1: classpathが長すぎる 6 Java One 2015のKeynoteで紹介された classpathが長すぎる、多数のユーザがいるこ とに起因する問題 1. ライブラリが1個紛失してもわからない 2. Conflictが発生したときの修正が困難 3. 内部APIが安全に変更できるかわからない ("Public is TOO public")
  • 7. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Jigsaw導入に期待 7 Hadoopコミュニティでshaded jarを用意 • 2. の問題を部分的に解決 ただしメンテナンスが困難 • どのライブラリをshadeすべきか • shade漏れがないか "Jigsaw" を活用することで根本解決したい
  • 8. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 問題2: GCの長期化 8 HDFSのマスタ(NameNode) • 名前空間とブロックの位置情報を全て ヒープに保持 • 大規模クラスタではヒープが数100GBに • STW(Stop-The-World)が長期化 • ヤフーのある環境では分単位の停止 • STWのたびにフェールオーバー
  • 9. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 新しいGCアルゴリズムに期待 9 バージョンを上げると利用できるGCが増える • ZGC (Java 11) • Shenandoah GC (Java 12, RHEL同梱の OpenJDK 8にもbackport) いずれもSTWを最小限に抑えることを意図し て開発されている • ヤフーでも検証予定
  • 10. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. バージョンを上げると いいことずくめ
  • 11. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. なのに、なぜ Hadoopは Java 11対応 できていないのか?
  • 12. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Hadoopの(メンテナにとって良くない)特徴 12 コードベースが巨大すぎる 全体的にレガシーなコード • 10年以上の歴史 • 非互換にことごとくハマる 後方互換性の維持 • Java 11とJava 8の両方で動くようにする • とんでもなく大変
  • 13. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ソースコードの規模 13 *.java ファイルの行数 • JUnit5: 9.8万行 • Apache Tomcat: 14万行 • Spring: 68万行 • Apache Hadoop: 158万行 • JDK 11: 368万行
  • 14. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. レガシーコード実例 14 • こんなコードがいたるところにある • これはJava 11でもそのまま動くので、まだ まし
  • 15. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Hadoopが影響を受けた問題 15 • '_' 1文字の命名の禁止 (JEP 213) • sun.misc.Cleaner が移動 (JEP 260) • Doclet (JEP 221) • HTML5 JavaDoc (JEP 224) • Java EEモジュールの削除 (JEP 320) • などなど
  • 16. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. '_' 1文字の命名が禁止に 16 Milling Project Coins (JEP 213)で禁止 • Unnamed lambda parameterとして 利用するため (JEP 302) • HadoopのWeb UIの一部で利用してい るHamletという独自フレームワークに '_' が大量に含まれていた
  • 17. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 互換性を意識しながら修正 17 '_' を '__' に変換するだけだと、互換性が崩れる '__' に変換したpackageを新規作成 古いpackageをJava 9以上でコンパイルさせない • Maven compiler plugin で設定 • リリースはJava 8で実施されるため、リリースに 影響しない パッチのサイズは1MBに... (HADOOP-11875)
  • 18. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 18
  • 19. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Hadoopとsun.misc.Cleaner 19 HadoopにおけるCleanerの利用目的 • munmap(2)の実装 • Linux前提なら、JNIから叩けばよい (mlockを使う場合はそうしている) • WindowsだとJNI経由で叩けないので Cleanerを利用
  • 20. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. パッケージが移動したときに互換性を保つには? 20 Java 8でも動作させる必要があるため、直接 importせずにreflectionを使う (HADOOP- 12760) • sun.misc.Unsafe#invokeCleaner (移動 先のパッケージ) を呼び出す • Exceptionが出たらJava 8なので、 sun.misc.Cleanerを呼び出す • Apache Luceneの対応を参考にした
  • 21. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 黒魔術 21 最後の手段であることに注意
  • 22. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Doclet 22 Javadocの出力を整形してくれるツール • HadoopではDocletの機能を利用してJavadocの生成 を特定のアノテーションが付与されたクラス/メソッド のみに制限していた • Java 10からパッケージが変わった・・・ com.sun.tools.doclets -> jdk.javadoc.doclet • HadoopではJava10以降はDocletの機能を無効化
  • 23. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Doclet 23 • 無効化したことで全てのクラス/メソッドで Javadocが生成されるようになった • 今まで隠れていたHTMLのフォーマット違反の 大量のJavadocが明るみに・・・ • みんなで頑張って修正(HADOOP-15785, HDFS-13939)
  • 24. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. HTMLフォーマット違反の修正 24
  • 25. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. HTMLフォーマット違反の修正 25
  • 26. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JDK11のJavadoc 26 • Java11からJavadocのデフォルト設定が HTML5に変わった(Java10まではHTML4が デフォルト) • そのままJavadocビルドするとまた大量のエ ラーが発生 • JavadocのオプションでHTML4でビルドする ように指定(HADOOP-15902)
  • 27. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. EEモジュールがJDKから削除 27 Java EEモジュール • JDK9でdeprecatedになった • JDK11で削除された(JEP320) • Hadoopで使用していたライブラリを明示的に追加した • javax.activation-api(HADOOP-15775) • javax.annotation-api(HADOOP-15895)
  • 28. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. EEモジュールがJDKから削除 28 基本的にはMavenのdependencyに追加するだけ
  • 29. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ライブラリの バージョンアップ
  • 30. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ライブラリのバージョンアップ 30 いくつかのライブラリではJDK11をサポートしてい るバージョンにアップグレードする必要がある • Log4J • JUnit • Mockito • Jersey などなど
  • 31. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Log4J 31 Log4J1(1系) • 2015年8月 EOL • 当然Java11はサポート対象外(でも結構動く) Log4J2(2系) • Java8もJava11もサポート • 1系と比べてパフォーマンスが大幅に改善 • 1系からマイグレーションする方法にいくつかの選択肢がある • 1系の設定ファイルと非互換(ユーザーインパクト大)
  • 32. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. SLF4Jを使ったマイグレーション 32 Log4J1 → Log4J1 with SLF4J • 実装(Log4J)とインターフェース(SLF4J)を分離 • 1系と2系で非互換なAPIをSLF4Jで吸収 • Jarと設定ファイルを差し替えれば簡単に2系への切り 替えができる • Hadoopでは最近ついに対応完了 追加削除で約1万6千行!
  • 33. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. SLF4Jを使ったマイグレーション 33 Hadoop logging code SLF4J API slf4j-api.jar Bridge slf4j- log4j12.jar Log4J1 log4j.jar Bridge log4j-slf4j- impl.jar Log4J2 log4j-api.jar log4j-core.jar Hadoop logging code Log4J1 log4j.jar
  • 34. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. SLF4Jを使ったマイグレーション 34 Log4J2 with SLF4J • SLF4Jを使っても設定ファイルは実装部分に依存する (1系なら1系の、2系なら2系の設定ファイルが必要) • HadoopのMavenビルド時のオプション(-Plog4j2) でLog4J2の設定ファイルが生成される方針にする予定 (HADOOP-16206)
  • 35. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JUnit 35 JUnit4 • サポートはJava8まで • 11はサポート対象外(でも結構動く) JUnit5 • Java8もJava11もサポート • JUnit4からのマイグレーション手順は整理されている ※それでもHadoopには大量のユニットテストがあるので大変 • junit-vintage-engineを使うとJunit4との共存が可能 徐々にJUnit5へのマイグレーションを進めることができる!
  • 36. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JUnit4からJUnit5への移行 36 移行前 • JUnit4のテストのみ存在 移行期(Hadoopはここ) • vintageを使ってJUnit4とJUnit5が共存 • 新しいテストは全てJUnit5で書く(メーリスで合意を得る) • 既存のJUnit4のテストは徐々にJUnit5に直す 移行完了時 • JUnit4へのdependencyを削除 • junit-vintage-engineのdependencyも削除
  • 37. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Mockito 37 JUnitと組み合わせて使うモックライブラリ • Java11対応で2系へのアップグレードが必要 • (非公式ながら)移行ガイドが整ってる https://asolntsev.github.io/en/2016/10/11/ mockito-2.1 • アップグレード完了済み!(HADOOP-14178)
  • 38. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Jersey 38 RESTfulなWebサービス開発のためのフレームワーク Update jersey from 1.19 to 2.x (HADOOP-15984) • 1系と2系でだいぶ互換性が崩れている • 移行ガイドが結構微妙 • Jersey1系 x JDK11で失敗するテストがある • やばい。
  • 39. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JDK11対応に向けて 39 残りの作業 • 依存ライブラリのアップグレードをがんばる • JDK11で通らないテストがまだたくさんあるので1つ ずつ潰していく(HADOOP-16264) • 今年中には対応できるかも Thanks to all the contributors!
  • 40. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 最後に 40 Yahoo! JAPANでは多種多様なビッグデータを保 有・利活用するために、Hadoop, Spark, Kafka, NiFi, PrestoなどJVM上で動作する多数のミドル ウェアを取り扱っています。 一緒にJVMのチューニングや、Javaの最新機能を取 り込んでいくためにエンジニアを募集中です! https://about.yahoo.co.jp/hr/

Editor's Notes

  1. 2. 多数のlibraryが相互依存している状態なので、バージョンのデッドロックみたいなことがよく起こる。Hadoopを利用している、言い換えると、Hadoopに依存しているライブラリは世の中に多数あるが、それらのライブラリの開発者も、このjar hellと呼ばれる状況に困っています。 3. Hadoopはmulti packageのプロダクトなので、別のpackageから呼び出される内部APIはpublicにしてあげないといけないが、"Public is too public"。Hadoopだと、developer向けのannotationをつけてこのpublicは変更されるかもしれない、という警告をしてあげているけど、publicだと使えてしまうので、ユーザがうっかり使ってしまうかもしれない。
  2. C4 GCもあるけど高い...
  3. 引数および戻り値がListではなく配列 拡張for文ですらない もちろんLambdaではない Null checkを書きたくない