112 Views
November 21, 18
スライド概要
2018年11月19日開催された第25回Hadoopソースコードリーディングで発表した資料です。
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
Hadoop-3.2.0の新機能の紹介と Java9+対応のコミュニティ動向 ヤフー株式会社 浅沼孝信 2018年11月19日
自己紹介 名前 – 浅沼 孝信 業務履歴 – 2012年新卒入社 – Apache HadoopやApache NiFiを用いた社内インフラの設計・開発 – HadoopのOSS開発(Erasure Coding, Java9+対応など) – 2018年7月からHadoopコミッター Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2
目次 Router-Based Federation (RBF) Hadoop {Submarine} Project HadoopのJava9+対応 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3
目次 Router-Based Federation (RBF) Hadoop {Submarine} Project HadoopのJava9+対応 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4
HDFSのアーキテクチャ Client 128MB b1 128MB b2 NameNode metadata b3 DataNode b1 b2 b1 b3 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 b2 b1 b3 b2 b3 5
HDFSのアーキテクチャ Client 128MB b1 128MB b2 NameNode NameSpace metadata b3 DataNode b1 File -> BlockID Block Map BlockID -> DN EditLog b2 b1 b3 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 b2 b1 b3 b2 b3 6
HDFSの特徴 1台のマスターノード(NameNode)がメモリ上で全てのメタデータ を管理している 長所 – 強い一貫性を保証 短所 – NameNodeのメモリサイズがスケーラビリティの制限になる – 特に大量の小さなファイルを扱うのが苦手 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7
HDFSのネームスペースを分割する NameNodeのメモリサイズは数百GBが限界なので、より大きなHDFS が必要な場合はネームスペースを分割する必要がある ネームスペースを分割するには単純にクラスタを分割すれば良い A B C しかしながら複数のネームスペースはクライアントにとって扱いにく いのでクライアントから見て1つのクラスタに見えるようにしたい Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8
Router-Based Federation (RBF) Router – クライアントのリクエストを 受け取り適切なNameNode にルーティング State Store – マウント情報を中央管理 クライアントは何も気にせずに 大きなHDFSとして参照すること ができる / A data log B C tmp ④ State Store ② ① Cluster A Cluster B R R ③ NN DN DN Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 NN DN DN DN DN 9
開発状況 多くの企業が開発に参加! – Microsoft, Uber, VipShop, Huawei, LinkedIn, Hortonworks, Oath, Yahoo! JAPAN... 開発が完了した機能(Hadoop-3.2.0に含まれる) – Router WebUI (WebHDFS)(HDFS-12615) – クラスタ全体に渡るクォータ制限(HDFS-12934) – 1 対 * のマウントポイント(HDFS-13224) 開発中の機能 – セキュリティ対応(HDFS-13532) – クラスタ間のバランサー(HDFS-13123) Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10
補足:セキュリティ対応 ケルベロス認証(HDFS-12284) – ベースの実装が最近完了した! – 残念ながら3.2.0には入らない – 弊社でも検証してフィードバックしていきたい Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11
目次 Router-Based Federation (RBF) Hadoop {Submarine} Project HadoopのJava9+対応 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12
Hadoop {Submarine} Project とは Tensorflowプログラムを特別な変更を加せずにそのままYARNの上で 動かすことを目標にしたプロジェクト 名前の由来 – Submarine is the only vehicle that can take humans to deep places. 潜水艦は人間を深い場所に連れて行くことができる唯一の乗り物 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13
{Submarine} に至るまでのYARNの進化 2.9 •Docker on YARN: YARNコンテナとしてDockerコンテナが利用可能に •YARN Service framework: 長時間のアプリケーション実行をサポート 3.1 •GPU on YARN •Hadoop {Submarine} Project 3.2 •上記のYARNの新機能を利用 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14
Hadoop {Submarine} projectの特徴 Tensorflowの分散処理を簡単な設定で実行可能 HDFSや他のストレージに簡単にアクセスできる 任意のDockerイメージを実行できる(Docker on YARN) – 任意のバージョンのTensorflow、Pythonが使える リソースにアイソレーションしたGPUを指定可能(GPU on YARN) モデル提供のサービスを起動可能(YARN Service) TensorBoardを起動可能(YARN Service) Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15
Submarineのジョブの実行例
yarn jarコマンドでSubmarineのjarを指定して実行
– 将来的にはsubmarineコマンドができる模様
$ yarn jar hadoop-yarn-applications-submarine-3.2.0.jar job run
--input_path hdfs://path/to/dataset \
--checkpoint_path hdfs://path/to/checkpoint \
--name tf-job-001 --docker_image <docker image> \
--num_workers 2 \
--worker_resources memory=8G,vcores=2,gpu=2 \
--worker_launch_cmd "..." \
--ps_docker_image <docker image> \
--num_ps 1 --ps_resources memory=4G,vcores=2,gpu=0 \
--ps_launch_cmd "..." \
--tensorboard --tensorboard_docker_image <docker image>
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
16
Submarineのジョブの実行例
yarn jarコマンドでSubmarineのjarを指定して実行
– 将来的にはsubmarineコマンドができる模様
$ yarn jar hadoop-yarn-applications-submarine-3.2.0.jar job run
--input_path hdfs://path/to/dataset \
Data source
--checkpoint_path hdfs://path/to/checkpoint \
--name tf-job-001 --docker_image <docker image> \
--num_workers 2 \
Worker
--worker_resources memory=8G,vcores=2,gpu=2 \
--worker_launch_cmd "..." \
--ps_docker_image <docker image> \
PS
--num_ps 1 --ps_resources memory=4G,vcores=2,gpu=0 \
--ps_launch_cmd "..." \
--tensorboard --tensorboard_docker_image <docker image>
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
17
補足:TonY LinkedInが開発したTensorflow on YARNのフレームワーク 既存のTensorflow on YARNプロダクトがニーズに合わなかったので自社で開発 → OSS化 特徴 – – – – GPU on YARNのAPIを利用してGPUのスケジューリング TensorBoardのサポート フォールトトレランス(チェックポイントをHDFSに保存できる) 最近Docekr on YARNにも対応した 現時点ではSubmarineと別のプロジェクトだが将来的にSubmarineのランタイムとして も動くようになるらしい Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18
目次 Router-Based Federation (RBF) Hadoop {Submarine} Project HadoopのJava9+対応 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19
本日話すこと 前のHSCRで話された発表(↓)以降のコミュニティの活動 – Apache HadoopとJava9とJigsaw https://www.slideshare.net/hadoopxnttdata/20170303-java9-hadoop-72688327 – このときはまだJava9でビルドができなかった・・・ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20
現在の対応状況 Java9でビルドとMapReduceが成功! 最近Java11でもビルドできるようになった Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21
これまでに完了したこと – – – – – sun.misc.Cleanerの問題を解決(HADOOP-12760) ファイルとメモリのマッピングを解消するのに使用 Java9以降でパッケージが変わった Java8とJava9+で同時に対応するためにリフレクションによる黒魔術が必要 ずっとブロッカーになっていたがついにクローズ 削除されたjavaxライブラリを追加(HADOOP-15775, HADOOP-15895) javaxの一部のライブラリが標準のJavaライブラリから削除されたのでmaven dependencyに明示して追加する必要がある ここまででJava9でビルド/MapReduceの動作が可能になった Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22
これまでに完了したこと Docletの問題を解決 – HadoopではDocletの機能を利用して、Javadocの生成を @InterfaceAudience.Publicアノテーションが付与された クラス/メソッドのみに制限していた – Java10以降でDocletのパッケージが変更されたので、Docletを無効化して 全てのJavadocを生成することにした(HADOOP-15304) – 今まで隠れていたフォーマット違反の大量のJavadocが明るみに・・・ (みんなで修正:HADOOP-15785, HDFS-13939) ここまでの対応でJava11でもビルドが可能になった Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23
まだ完了していないこと – – – 依存ライブラリをJava9+サポートしているバージョンへ アップグレードが必要 JUnit 4 ➡︎JUnit 5 Mockito 1 ➡︎Mockito 2 Log4j 1 ➡︎SLF4Jアダプター with Log4j 1 ➡︎SLF4Jアダプター with Log4j 2 非互換 Jigsaw対応(nice to have) – モジュール機能でパッケージの公開範囲を制御 – もっとコミュニティで議論する必要がありそう Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24
Java9+対応の副次効果 プレゼンスの向上(会社・個人) – Yahoo! JAPANからJava9+対応で貢献したJIRAは27個! いろいろな開発者に感謝される Hadoopのソースコードの全体像が把握できる – Common, HDFS, YARN, MapReduce, HDDS Mavenビルド職人になれる – pom.xmlについてとても詳しくなった Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25
今後の予定 HadoopのJava9+対応 - Java9とJava10はEOL - HadoopとしてはLTSのJava11対応がメインになりそう - いろいろなエコシステムから依存されているので早めの対応が必要 - Java8のサポートも引き続き継続(期限は未定) OpenJDKのサポート期限(2018年11月 時点) JDK 8 JDK 11 RedHat OpenJDK ~2023/06 ~2024/10 AdoptOpenJDK ~2023/09 ~2022/09 コントリビュート歓迎! Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26