Movatterモバイル変換


[0]ホーム

URL:


HDFS basics from API perspective

2017年9月7日に開催されたdb tech showcase Tokyo 2017での講演資料です。

Embed presentation

© 2017 NTT DATA Corporation07/09/2017NTT DATAMasatake Iwasaki今さら聞きにくいHDFSの基本
© 2017 NTT DATA Corporation 2Apache Hadoopの分散ファイルシステムであるHDFSについて、アーキテクチャ、ファイルシステムとしての特徴、オブジェクトストアとの違いについて、ユーザAPIという切り口から、最近の開発動向や新機能、ちょっと細かい実装の話などを混じえながら解説します。はじめに
© 2017 NTT DATA Corporation 3I. HDFSの概要II. HadoopのFileSystem APIIII. HDFSの機能IV. HadoopとオブジェクトストレージAgenda
© 2017 NTT DATA Corporation 4HDFSの概要
© 2017 NTT DATA Corporation 5Hadoopの構成Hadoop 2分散ファイルシステムHDFSMapReduceYARNデータを格納リソース(CPU/メモリ)制御リソースを利用して様々な処理系を実行データを処理...
© 2017 NTT DATA Corporation 6Hadoopは集中管理型の分散処理システムデータを保存する場所(スレーブノード)でデータを処理するHadoopの構成マスターノードスレーブノード群実データを格納分散処理タスクを実行メタデータ, ノード, ジョブを管理
© 2017 NTT DATA Corporation 7Hadoop Distributed File System大きなファイル(100+MB)の格納に最適化分散処理フレームワークに高スループットなデータアクセスを提供ファイルシステムとしての機能を提供階層的な名前空間(ファイルとディレクトリ)ファイルデータの読み書きパーミッションによるアクセス制御quotaシンボリックリンクは未サポート一度追加されたが色々問題があることが分かりdisabledにソースコード上に実装は残っているxfsやext4などのネイティブファイルシステムの上(ユーザ空間)で動くPOSIX準拠ではないHDFSとは何か
© 2017 NTT DATA Corporation 8NameNode:メタデータを管理するマスターファイルとブロックとの対応関係を管理:fsimageとして永続化レプリカとそれを保持するDataNodeとの対応を関係管理:ブロックレポートで更新されるメモリ上のみの情報DataNode:データブロック(レプリカ)を格納するスレーブNameNodeに対して定期/不定期でレポート送信クライアント:まずNameNodeにリクエスト送信指定されたDataNodeに接続してデータを読み書きHDFSのアーキテクチャNameNodeDataNodeDataNodeDataNodeDataNode
© 2017 NTT DATA Corporation 9データ保全性と可用性データは自動的に冗長化されるノード故障で低下した冗長度は自動的に回復されるラックを跨ぐようなデータの配置戦略(rack awareness)ノードダウン時にもクライアントが透過的にリトライ/リカバリ分散処理フレームワークにデータローカリティを提供データを持ってきて処理するのではなく処理をデータのある場所に持っていくメタデータを1箇所(NameNode)で管理することによる一貫性ただしNameNodeがスケーラビリティのボトルネックになるとはいえスレーブ数千台くらいはいけるただしNameNodeがSPOFになりうるなのでActive-Standby型のHA構成をビルトインでサポートHDFSの特徴
© 2017 NTT DATA Corporation 10クライアントからNameNodeにブロック割り当てリクエスト指定されたDataNodeに対して書き込みパイプライン構築DataNodeからNameNodeにブロック情報を報告IBR: Incremental Block Reportブロック書き込み開始時/書き込み完了時/sync要求受信時レポートを受けてNameNode上のブロック情報が状態遷移HDFSのデータ書き込みの流れDataNodeNameNodeDataNodeClientDataNodewriteackwritereport1. addBlockLocatedBlock2. writeBlockackack
© 2017 NTT DATA Corporation 11ブロックレプリカを保存するスレーブノードの選び方1つ目はクライアントがいるノードクライアントがスレーブ上にいなければランダム2つ目は1つ目と別のラックにあるノード3つ目は2つ目と同一ラックにあるノード4つ目以降はランダム1つのラックに重なり過ぎない範囲で調整Rack Awareness
© 2017 NTT DATA Corporation 12Active NNはメタデータの更新(edits)をJournalNodeのquorumに送るStandby NNはそれをtailして再生クライアントはActiveにアクセスできなければ透過的にStandbyに接続ファイルの書き込みロック払い出し情報もStandby側に伝搬する以下のような状況にも対応1. クライアントAがNameNode 1にファイル書き込みオープン要求2. NameNode 1からNameNode 2にフェールオーバ3. クライアントAがNameNode 2にファイルのcloseを要求hadoop-3.0.0からはStandby NameNodeを複数持てるようになるNameNode HAJournalNodeNameNode(Active)JournalNodeNameNode(Standby)JournalNodejournal getJournal
© 2017 NTT DATA Corporation 13HadoopのFileSystem API
© 2017 NTT DATA Corporation 14Hadoopが提供するファイルシステムにアクセスするためのAPIHDFS以外のバックエンドにも透過的にアクセスできるように抽象化(基本的にはHDFSにできる範囲の機能を提供)ビルトインで付いてくる実装もいろいろ:LocalFileSystemDistributedFileSystemS3AFileSystemNativeAzureFileSystemAdlFileSystemSwiftNativeFileSystemAliyunOSSFileSystem...FileSystem#getで各実装のインスタンスを取得URLのschemeで使い分けられるfile://..., hdfs://..., s3a://..., ...各インスタンスは重量級なのでキャッシュされて使い回されるHadoop FileSystem API
© 2017 NTT DATA Corporation 15ファイル一覧(ls)FileStatus[]を返すFileStatusにはファイルの情報が格納されている(e.g. サイズ、所有者)FileSystem#listStatuspublic class FileStatus implements Writable, Comparable<Object>,Serializable, ObjectInputValidation {private static final long serialVersionUID = 0x13caeae8;private Path path;private long length;private Boolean isdir;private short block_replication;private long blocksize;private long modification_time;private long access_time;private FsPermission permission;private String owner;private String group;private Path symlink;private Set<AttrFlags> attr;...
© 2017 NTT DATA Corporation 16ファイル一覧(ls)の派生RemoteIterator<LocatedFileStatus>を返すLocatedFileStatusから各データブロックを持つノードがわかるフレームワークはタスクをブロックを持っているノードに割り当てネットワークIOなしで処理できる => データローカリティBlockLocationが意味を持つかはFileSystem実装によるFileSystem#listLocatedStatuspublic class LocatedFileStatus extends FileStatus {private static final long serialVersionUID = 0x17339920;private BlockLocation[] locations;...
© 2017 NTT DATA Corporation 17書き込みopeno.a.h.fs.FSDataOutputStreamが返るFSDataOutputStream#writeで書き込みFSDataOutputStream#closeでクローズSee also o.a.h.fs.CreateFlagFileSystem#createpublic void write(byte b[], int off, int len) throws IOException {
© 2017 NTT DATA Corporation 18書き込み再openo.a.h.fs.FSDataOutputStreamが返るHDFSでは一度書かれたデータを上書き更新することはできないだが、ファイル末尾への追記はできる(ようになった)HDFSの場合:データブロックを持っているDataNodeに対してパイプライン再構築実装直後はバグが多く、使わないほうが無難なAPIだったcatで済むならそのほうがよいS3の場合:Not supportedFileSystem#append
© 2017 NTT DATA Corporation 19読み込みopeno.a.h.fs.FSDataInputStreamが返るFSDataInputStream#readでデータを読むHDFSの場合:任意の場所を読めるスレッドセーフなpositional readありopen時点でvisibleなところまでしかreadできない他のプロセスがwriteする内容をtailingしたい場合に問題例: HBaseのレプリケーション機能: WAL(HLog)をtailingして送信解: 末尾まで読んだらファイルをopenしなおすFileSystem#openpublic int read(long position, byte[] buffer, int offset, int length)throws IOException {
© 2017 NTT DATA Corporation 20ファイルやディレクトリの名前変更(mv)HDFSの場合:atomicな操作ジョブのoutputをcommit処理としてrenameが使われる::$ hdfs dfs mv 00001.out.tmp 00001.out他のクライアント、後続ジョブに中途半端な状態を見せないS3の場合:別の名前にコピーして、元のオブジェクトを削除ディレクトリのrenameは、上記の繰り返しFileSystem#rename
© 2017 NTT DATA Corporation 21新しい?ユーザAPI (HADOOP-4952)ユーザ側とFileSystem実装者側でインタフェースを分離してクリーンにFileSystemをdeprecatedにしてこちらに移行したいという意図だった結果として、あまり使われていないような...FileContext
© 2017 NTT DATA Corporation 22APIを定める過程で整理された内容がある程度文書化されているhttps://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/filesystem/index.htmlファイルシステム仕様
© 2017 NTT DATA Corporation 23HDFSの機能
© 2017 NTT DATA Corporation 24HDFSへのアクセスを提供HDFS固有の機能もあるクラスタ内のノードへのアクセスを抽象化エラーに対してもクライアント内部で自動的にリカバリ/リトライNameNodeが落ちたらstandby側にリトライDataNodeが落ちたら:読み込み中: 同一レプリカを持つ別ノードにリトライ書き込み中: パイプライン上のノードを入れ替えてリトライDistributedFileSystem extends FileSystem
© 2017 NTT DATA Corporation 25fsyncに相当(closeせずに)writeしたデータの書き込みを確定させるFSDataOutputStream#hflush:パイプライン上の全DataNodeがデータを受け取ったらreturnFSDataOutputStream#hsync:パイプライン上の全DataNodeでfsyncしてからreturnユースケース: HBaseのWAL(HLog)書き込みWALエントリの書き込みを確定してからクライアントに成功を返すhflush/hsync
© 2017 NTT DATA Corporation 26dfs.datanode.synconcloseデフォルト設定はfalse:HDFSはファイルのsyncをOSに任せるHDFS的にファイルをcloseしてもsyncされないパイプライン上の全DNがsync前に電源断 => データロストtrueにするとclose時にfsyncデータセンター障害的な状況で整合性を保つために使えるdfs.datanode.sync.behind.writessyncをOSに任せると、書き込みレイテンシにムラが出る書き込んだデータをこまめにsyncすることでレイテンシを平滑化データストア(e.g. HBase)のバックエンドとして使う場合に有用Linuxのsync_file_rangeシステムコールを利用ディスクアクセスの制御
© 2017 NTT DATA Corporation 27dfs.datanode.drop.cache.behind.{reads|writes}ブロックファイルをOSのキャッシュから積極的に消すLinuxのposix_fadviseシステムコールを利用でも、DataNode単位では使いにくいストリーム単位での調整もできるFSDataInputStream#setDropBehindFSDataInputStream#setReadaheadFSDataOutputStream#setDropBehindキャッシュ戦略のチューニング
© 2017 NTT DATA Corporation 28「HDFSのこのファイルをメモリに乗せておきたい」と指定できる指定されたファイルに紐づくブロックをオフヒープにキャッシュmmap/mlockにもとづく仕組みhdfs cacheadmin
© 2017 NTT DATA Corporation 29データローカリティがあってもDataNode経由でreadすると無駄があるDataNodeがファイルからreadクライアントにソケット経由で送信クライアントがブロックファイルを直接readできると高効率しかしローカルファイルを直接openできるとアクセス制御がきかないShort Cirtcuit Local Readの仕組み:パーミッションのチェックをNameNodeで行うDataNodeからopen済みのfdをクライアントに渡す:Linuxのsendmsg/recvmsgシステムコールを利用Short Circuit Local Read
© 2017 NTT DATA Corporation 30Javaから直接使えない機能をCで書いてJNIで呼び出すここで紹介した機能の多くはnativeライブラリが前提コミュニティ版を使う場合、自分でビルドしたほうがよいかも::$ mvn package -Pnative -Pdist -Dtar -DskipTestschecknativeコマンドでライブラリが利用可能かチェックできるnativeライブラリ(libhadoop.so)$ hadoop checknativeNative library checking:hadoop: true /path/to/hadoop/lib/native/libhadoop.so.1.0.0zlib: true /lib64/libz.so.1snappy: falselz4: true revision:10301bzip2: true /lib64/libbz2.so.1openssl: true /lib64/libcrypto.so
© 2017 NTT DATA Corporation 31libhdfsHDFSクライアントAPIのC言語バインディングJavaのAPIと機能性は近いJNIでJavaのクライアントAPIを呼ぶつくりWebHDFSREST APIクラスタの外側のネットワークからアクセスする際に便利クラスタ間のデータコピーによく利用されるJava以外のバインディング
© 2017 NTT DATA Corporation 32Hadoopとオブジェクトストレージ
© 2017 NTT DATA Corporation 33Amazon S3をバックエンドとするFileSystem実装S3FileSystem, NativeS3FileSystemの後継Hadoop on Cloudを使う場合の低コストなデータ保存場所として便利ファイルはオブジェクトに対応づけられるS3にディレクトリという概念はない"mkdir /foo/bar" => /foo/bar/ というキーで空オブジェクトを作成S3にrenameという概念はないオブジェクトを別の名前でコピーして、コピー元を消す"mv /dir1 /dir2" => /dir1/* なキーを持つオブジェクトを全コピーeventual consistencyファイルを作成した直後にlsすると見えないことがあるdeleteしたファイルがしばらく見えることがあるS3AFileSystem extends FileSystem
© 2017 NTT DATA Corporation 34S3をバックエンドにした場合でも一貫性を提供する試みDynamoDBをファイルメタデータストアとして使うAmazon EMRで提供されているEMRFSのコミュニティ版hadoop-3.0.0-beta1から利用可能S3Guard (HADOOP-13345)
© 2017 NTT DATA Corporation 35EMRのHBaseのデータディレクトリをS3上に置くhttp://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hbase-s3.htmlデータディレクトリと独立にWALディレクトリを設定することで実現(HBASE-17437)hbase.root.dir: on S3hbase.wal.dir: on HDFSEMRFSが前提HBase on Amazon S3
© 2017 NTT DATA Corporation 36HDFSのパーツでオブジェクトストレージを作る試み特にブロックコンテナとしてのDataNodeNameNodeは以下の2つのモジュールが密結合FSNameSystem: メタデータ(inode)を管理BlockManager: ブロックレプリカを管理キー空間とコンテナの対応づけだけならスケールアウトしやすいブロックメタデータはDataNode側で持ち、RAFTで冗長化HDFS-7240ブランチでアクティブに開発されている果たしてマージできるのかOzone (HDFS-7240)
© 2017 NTT DATA Corporation 37まとめ
© 2017 NTT DATA Corporation 38HDFSはファイルシステムのセマンティクスを提供データローカリティを活かした高スループットな分散処理の基盤スループットだけではなくレイテンシもそれなりに追求HBaseのようなデータストアのバックエンドとしても使えるFileSystem APIを使えばバックエンドを透過的に切り替え可能オブジェクトストアその他とうまく使い分けるとよい今回紹介できなかったHDFSならではの機能は他にもいろいろTransparent EncryptionExtended AttributesStorage PoliciesErasure CodingSummary
© 2017 NTT DATA Corporation

Recommended

PDF
HDFS Router-based federation
PDF
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
PDF
Apache Hadoopの新機能Ozoneの現状
PDF
Apache Hadoopの未来 3系になって何が変わるのか?
PDF
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
PDF
Distributed data stores in Hadoop ecosystem
PDF
Hadoopエコシステムのデータストア振り返り
PDF
Apache Hadoop and YARN, current development status
PDF
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
PDF
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
PPTX
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
PDF
Hadoop ecosystem NTTDATA osc15tk
PPTX
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
PDF
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
PDF
Apache Spark 1000 nodes NTT DATA
PDF
Hadoop2.6の最新機能+
PDF
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PDF
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
PDF
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
PDF
[db tech showcase Tokyo 2015] B34:データの仮想化を具体化するIBMのロジカルデータウェアハウス by 日本アイ・ビー・エ...
PDF
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
PDF
20170303 java9 hadoop
PDF
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...
PDF
Hadoop概要説明
PDF
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
PPTX
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
PDF
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)

More Related Content

PDF
HDFS Router-based federation
PDF
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
PDF
Apache Hadoopの新機能Ozoneの現状
PDF
Apache Hadoopの未来 3系になって何が変わるのか?
PDF
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
PDF
Distributed data stores in Hadoop ecosystem
PDF
Hadoopエコシステムのデータストア振り返り
PDF
Apache Hadoop and YARN, current development status
HDFS Router-based federation
サポートメンバは見た! Hadoopバグワースト10 (adoop / Spark Conference Japan 2016 ライトニングトーク発表資料)
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの未来 3系になって何が変わるのか?
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
Distributed data stores in Hadoop ecosystem
Hadoopエコシステムのデータストア振り返り
Apache Hadoop and YARN, current development status

What's hot

PDF
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
PDF
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
PPTX
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
PDF
Hadoop ecosystem NTTDATA osc15tk
PPTX
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
PDF
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
PDF
Apache Spark 1000 nodes NTT DATA
PDF
Hadoop2.6の最新機能+
PDF
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PDF
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
PDF
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
PDF
[db tech showcase Tokyo 2015] B34:データの仮想化を具体化するIBMのロジカルデータウェアハウス by 日本アイ・ビー・エ...
PDF
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
PDF
20170303 java9 hadoop
PDF
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...
PDF
Hadoop概要説明
PDF
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
HDFS新機能総まとめin 2015 (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo 2015 講演資料)
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Hadoop ecosystem NTTDATA osc15tk
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
Apache Spark 1000 nodes NTT DATA
Hadoop2.6の最新機能+
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
[db tech showcase Tokyo 2015] B34:データの仮想化を具体化するIBMのロジカルデータウェアハウス by 日本アイ・ビー・エ...
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
20170303 java9 hadoop
[db tech showcase Tokyo 2017] D33: Deep Learningや、Analyticsのワークロードを加速するには-Ten...
Hadoop概要説明
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)

Similar to HDFS basics from API perspective

PPTX
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
PDF
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
PDF
AI・HPC・ビッグデータで利用される分散ファイルシステムを知る
PDF
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
PDF
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
PDF
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
PDF
分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...
PDF
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
PDF
[DI06] 並列分散処理の考え方とオープンソース分散処理系の動向
PDF
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
PPT
Hadoopの紹介
 
PPTX
Tuning maniax 2014 Hadoop編
PDF
Osc2012 spring HBase Report
PDF
Hadoop, NoSQL, GlusterFSの概要
PPTX
Cloudera大阪セミナー 20130219
PDF
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
PDF
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
PDF
Hadoop book-2nd-ch3-update
PDF
Hadoopによる大規模分散データ処理
Hadoop Compatible File Systems (Azure編) (セミナー「Big Data Developerに贈る第二弾 ‐ Azur...
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
AI・HPC・ビッグデータで利用される分散ファイルシステムを知る
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
分散処理基盤Apache Hadoop入門とHadoopエコシステムの最新技術動向 (オープンソースカンファレンス 2015 Tokyo/Spring 講...
Apache Hadoop HDFSの最新機能の紹介(2018)#dbts2018
[DI06] 並列分散処理の考え方とオープンソース分散処理系の動向
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
Hadoopの紹介
 
Tuning maniax 2014 Hadoop編
Osc2012 spring HBase Report
Hadoop, NoSQL, GlusterFSの概要
Cloudera大阪セミナー 20130219
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
Hadoop book-2nd-ch3-update
Hadoopによる大規模分散データ処理

More from NTT DATA OSS Professional Services

PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
PDF
本当にあったHadoopの恐い話 Blockはどこへきえた? (Hadoop / Spark Conference Japan 2016 ライトニングトー...
PDF
SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)
PDF
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PDF
商用ミドルウェアのPuppet化で気を付けたい5つのこと
PDF
Spark SQL - The internal -
PDF
Global Top 5 を目指す NTT DATA の確かで意外な技術力
PDF
Structured Streaming - The Internal -
PDF
PostgreSQLコミュニティに飛び込もう
PPTX
ブロックチェーンの仕組みと動向(入門編)
PDF
Application of postgre sql to large social infrastructure
PPTX
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
PDF
Apache Hadoop 2.8.0 の新機能 (抜粋)
PDF
Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...
PDF
Application of postgre sql to large social infrastructure jp
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
本当にあったHadoopの恐い話 Blockはどこへきえた? (Hadoop / Spark Conference Japan 2016 ライトニングトー...
SIプロジェクトでのインフラ自動化の事例 (第1回 Puppetユーザ会 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
商用ミドルウェアのPuppet化で気を付けたい5つのこと
Spark SQL - The internal -
Global Top 5 を目指す NTT DATA の確かで意外な技術力
Structured Streaming - The Internal -
PostgreSQLコミュニティに飛び込もう
ブロックチェーンの仕組みと動向(入門編)
Application of postgre sql to large social infrastructure
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
Apache Hadoop 2.8.0 の新機能 (抜粋)
Hadoopのメンテナンスリリースバージョンをリリースしてみた (日本Hadoopユーザー会 ライトニングトーク@Cloudera World Tokyo...
Application of postgre sql to large social infrastructure jp

HDFS basics from API perspective

  • 1.
    © 2017 NTTDATA Corporation07/09/2017NTT DATAMasatake Iwasaki今さら聞きにくいHDFSの基本
  • 2.
    © 2017 NTTDATA Corporation 2Apache Hadoopの分散ファイルシステムであるHDFSについて、アーキテクチャ、ファイルシステムとしての特徴、オブジェクトストアとの違いについて、ユーザAPIという切り口から、最近の開発動向や新機能、ちょっと細かい実装の話などを混じえながら解説します。はじめに
  • 3.
    © 2017 NTTDATA Corporation 3I. HDFSの概要II. HadoopのFileSystem APIIII. HDFSの機能IV. HadoopとオブジェクトストレージAgenda
  • 4.
    © 2017 NTTDATA Corporation 4HDFSの概要
  • 5.
    © 2017 NTTDATA Corporation 5Hadoopの構成Hadoop 2分散ファイルシステムHDFSMapReduceYARNデータを格納リソース(CPU/メモリ)制御リソースを利用して様々な処理系を実行データを処理...
  • 6.
    © 2017 NTTDATA Corporation 6Hadoopは集中管理型の分散処理システムデータを保存する場所(スレーブノード)でデータを処理するHadoopの構成マスターノードスレーブノード群実データを格納分散処理タスクを実行メタデータ, ノード, ジョブを管理
  • 7.
    © 2017 NTTDATA Corporation 7Hadoop Distributed File System大きなファイル(100+MB)の格納に最適化分散処理フレームワークに高スループットなデータアクセスを提供ファイルシステムとしての機能を提供階層的な名前空間(ファイルとディレクトリ)ファイルデータの読み書きパーミッションによるアクセス制御quotaシンボリックリンクは未サポート一度追加されたが色々問題があることが分かりdisabledにソースコード上に実装は残っているxfsやext4などのネイティブファイルシステムの上(ユーザ空間)で動くPOSIX準拠ではないHDFSとは何か
  • 8.
    © 2017 NTTDATA Corporation 8NameNode:メタデータを管理するマスターファイルとブロックとの対応関係を管理:fsimageとして永続化レプリカとそれを保持するDataNodeとの対応を関係管理:ブロックレポートで更新されるメモリ上のみの情報DataNode:データブロック(レプリカ)を格納するスレーブNameNodeに対して定期/不定期でレポート送信クライアント:まずNameNodeにリクエスト送信指定されたDataNodeに接続してデータを読み書きHDFSのアーキテクチャNameNodeDataNodeDataNodeDataNodeDataNode
  • 9.
    © 2017 NTTDATA Corporation 9データ保全性と可用性データは自動的に冗長化されるノード故障で低下した冗長度は自動的に回復されるラックを跨ぐようなデータの配置戦略(rack awareness)ノードダウン時にもクライアントが透過的にリトライ/リカバリ分散処理フレームワークにデータローカリティを提供データを持ってきて処理するのではなく処理をデータのある場所に持っていくメタデータを1箇所(NameNode)で管理することによる一貫性ただしNameNodeがスケーラビリティのボトルネックになるとはいえスレーブ数千台くらいはいけるただしNameNodeがSPOFになりうるなのでActive-Standby型のHA構成をビルトインでサポートHDFSの特徴
  • 10.
    © 2017 NTTDATA Corporation 10クライアントからNameNodeにブロック割り当てリクエスト指定されたDataNodeに対して書き込みパイプライン構築DataNodeからNameNodeにブロック情報を報告IBR: Incremental Block Reportブロック書き込み開始時/書き込み完了時/sync要求受信時レポートを受けてNameNode上のブロック情報が状態遷移HDFSのデータ書き込みの流れDataNodeNameNodeDataNodeClientDataNodewriteackwritereport1. addBlockLocatedBlock2. writeBlockackack
  • 11.
    © 2017 NTTDATA Corporation 11ブロックレプリカを保存するスレーブノードの選び方1つ目はクライアントがいるノードクライアントがスレーブ上にいなければランダム2つ目は1つ目と別のラックにあるノード3つ目は2つ目と同一ラックにあるノード4つ目以降はランダム1つのラックに重なり過ぎない範囲で調整Rack Awareness
  • 12.
    © 2017 NTTDATA Corporation 12Active NNはメタデータの更新(edits)をJournalNodeのquorumに送るStandby NNはそれをtailして再生クライアントはActiveにアクセスできなければ透過的にStandbyに接続ファイルの書き込みロック払い出し情報もStandby側に伝搬する以下のような状況にも対応1. クライアントAがNameNode 1にファイル書き込みオープン要求2. NameNode 1からNameNode 2にフェールオーバ3. クライアントAがNameNode 2にファイルのcloseを要求hadoop-3.0.0からはStandby NameNodeを複数持てるようになるNameNode HAJournalNodeNameNode(Active)JournalNodeNameNode(Standby)JournalNodejournal getJournal
  • 13.
    © 2017 NTTDATA Corporation 13HadoopのFileSystem API
  • 14.
    © 2017 NTTDATA Corporation 14Hadoopが提供するファイルシステムにアクセスするためのAPIHDFS以外のバックエンドにも透過的にアクセスできるように抽象化(基本的にはHDFSにできる範囲の機能を提供)ビルトインで付いてくる実装もいろいろ:LocalFileSystemDistributedFileSystemS3AFileSystemNativeAzureFileSystemAdlFileSystemSwiftNativeFileSystemAliyunOSSFileSystem...FileSystem#getで各実装のインスタンスを取得URLのschemeで使い分けられるfile://..., hdfs://..., s3a://..., ...各インスタンスは重量級なのでキャッシュされて使い回されるHadoop FileSystem API
  • 15.
    © 2017 NTTDATA Corporation 15ファイル一覧(ls)FileStatus[]を返すFileStatusにはファイルの情報が格納されている(e.g. サイズ、所有者)FileSystem#listStatuspublic class FileStatus implements Writable, Comparable<Object>,Serializable, ObjectInputValidation {private static final long serialVersionUID = 0x13caeae8;private Path path;private long length;private Boolean isdir;private short block_replication;private long blocksize;private long modification_time;private long access_time;private FsPermission permission;private String owner;private String group;private Path symlink;private Set<AttrFlags> attr;...
  • 16.
    © 2017 NTTDATA Corporation 16ファイル一覧(ls)の派生RemoteIterator<LocatedFileStatus>を返すLocatedFileStatusから各データブロックを持つノードがわかるフレームワークはタスクをブロックを持っているノードに割り当てネットワークIOなしで処理できる => データローカリティBlockLocationが意味を持つかはFileSystem実装によるFileSystem#listLocatedStatuspublic class LocatedFileStatus extends FileStatus {private static final long serialVersionUID = 0x17339920;private BlockLocation[] locations;...
  • 17.
    © 2017 NTTDATA Corporation 17書き込みopeno.a.h.fs.FSDataOutputStreamが返るFSDataOutputStream#writeで書き込みFSDataOutputStream#closeでクローズSee also o.a.h.fs.CreateFlagFileSystem#createpublic void write(byte b[], int off, int len) throws IOException {
  • 18.
    © 2017 NTTDATA Corporation 18書き込み再openo.a.h.fs.FSDataOutputStreamが返るHDFSでは一度書かれたデータを上書き更新することはできないだが、ファイル末尾への追記はできる(ようになった)HDFSの場合:データブロックを持っているDataNodeに対してパイプライン再構築実装直後はバグが多く、使わないほうが無難なAPIだったcatで済むならそのほうがよいS3の場合:Not supportedFileSystem#append
  • 19.
    © 2017 NTTDATA Corporation 19読み込みopeno.a.h.fs.FSDataInputStreamが返るFSDataInputStream#readでデータを読むHDFSの場合:任意の場所を読めるスレッドセーフなpositional readありopen時点でvisibleなところまでしかreadできない他のプロセスがwriteする内容をtailingしたい場合に問題例: HBaseのレプリケーション機能: WAL(HLog)をtailingして送信解: 末尾まで読んだらファイルをopenしなおすFileSystem#openpublic int read(long position, byte[] buffer, int offset, int length)throws IOException {
  • 20.
    © 2017 NTTDATA Corporation 20ファイルやディレクトリの名前変更(mv)HDFSの場合:atomicな操作ジョブのoutputをcommit処理としてrenameが使われる::$ hdfs dfs mv 00001.out.tmp 00001.out他のクライアント、後続ジョブに中途半端な状態を見せないS3の場合:別の名前にコピーして、元のオブジェクトを削除ディレクトリのrenameは、上記の繰り返しFileSystem#rename
  • 21.
    © 2017 NTTDATA Corporation 21新しい?ユーザAPI (HADOOP-4952)ユーザ側とFileSystem実装者側でインタフェースを分離してクリーンにFileSystemをdeprecatedにしてこちらに移行したいという意図だった結果として、あまり使われていないような...FileContext
  • 22.
    © 2017 NTTDATA Corporation 22APIを定める過程で整理された内容がある程度文書化されているhttps://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/filesystem/index.htmlファイルシステム仕様
  • 23.
    © 2017 NTTDATA Corporation 23HDFSの機能
  • 24.
    © 2017 NTTDATA Corporation 24HDFSへのアクセスを提供HDFS固有の機能もあるクラスタ内のノードへのアクセスを抽象化エラーに対してもクライアント内部で自動的にリカバリ/リトライNameNodeが落ちたらstandby側にリトライDataNodeが落ちたら:読み込み中: 同一レプリカを持つ別ノードにリトライ書き込み中: パイプライン上のノードを入れ替えてリトライDistributedFileSystem extends FileSystem
  • 25.
    © 2017 NTTDATA Corporation 25fsyncに相当(closeせずに)writeしたデータの書き込みを確定させるFSDataOutputStream#hflush:パイプライン上の全DataNodeがデータを受け取ったらreturnFSDataOutputStream#hsync:パイプライン上の全DataNodeでfsyncしてからreturnユースケース: HBaseのWAL(HLog)書き込みWALエントリの書き込みを確定してからクライアントに成功を返すhflush/hsync
  • 26.
    © 2017 NTTDATA Corporation 26dfs.datanode.synconcloseデフォルト設定はfalse:HDFSはファイルのsyncをOSに任せるHDFS的にファイルをcloseしてもsyncされないパイプライン上の全DNがsync前に電源断 => データロストtrueにするとclose時にfsyncデータセンター障害的な状況で整合性を保つために使えるdfs.datanode.sync.behind.writessyncをOSに任せると、書き込みレイテンシにムラが出る書き込んだデータをこまめにsyncすることでレイテンシを平滑化データストア(e.g. HBase)のバックエンドとして使う場合に有用Linuxのsync_file_rangeシステムコールを利用ディスクアクセスの制御
  • 27.
    © 2017 NTTDATA Corporation 27dfs.datanode.drop.cache.behind.{reads|writes}ブロックファイルをOSのキャッシュから積極的に消すLinuxのposix_fadviseシステムコールを利用でも、DataNode単位では使いにくいストリーム単位での調整もできるFSDataInputStream#setDropBehindFSDataInputStream#setReadaheadFSDataOutputStream#setDropBehindキャッシュ戦略のチューニング
  • 28.
    © 2017 NTTDATA Corporation 28「HDFSのこのファイルをメモリに乗せておきたい」と指定できる指定されたファイルに紐づくブロックをオフヒープにキャッシュmmap/mlockにもとづく仕組みhdfs cacheadmin
  • 29.
    © 2017 NTTDATA Corporation 29データローカリティがあってもDataNode経由でreadすると無駄があるDataNodeがファイルからreadクライアントにソケット経由で送信クライアントがブロックファイルを直接readできると高効率しかしローカルファイルを直接openできるとアクセス制御がきかないShort Cirtcuit Local Readの仕組み:パーミッションのチェックをNameNodeで行うDataNodeからopen済みのfdをクライアントに渡す:Linuxのsendmsg/recvmsgシステムコールを利用Short Circuit Local Read
  • 30.
    © 2017 NTTDATA Corporation 30Javaから直接使えない機能をCで書いてJNIで呼び出すここで紹介した機能の多くはnativeライブラリが前提コミュニティ版を使う場合、自分でビルドしたほうがよいかも::$ mvn package -Pnative -Pdist -Dtar -DskipTestschecknativeコマンドでライブラリが利用可能かチェックできるnativeライブラリ(libhadoop.so)$ hadoop checknativeNative library checking:hadoop: true /path/to/hadoop/lib/native/libhadoop.so.1.0.0zlib: true /lib64/libz.so.1snappy: falselz4: true revision:10301bzip2: true /lib64/libbz2.so.1openssl: true /lib64/libcrypto.so
  • 31.
    © 2017 NTTDATA Corporation 31libhdfsHDFSクライアントAPIのC言語バインディングJavaのAPIと機能性は近いJNIでJavaのクライアントAPIを呼ぶつくりWebHDFSREST APIクラスタの外側のネットワークからアクセスする際に便利クラスタ間のデータコピーによく利用されるJava以外のバインディング
  • 32.
    © 2017 NTTDATA Corporation 32Hadoopとオブジェクトストレージ
  • 33.
    © 2017 NTTDATA Corporation 33Amazon S3をバックエンドとするFileSystem実装S3FileSystem, NativeS3FileSystemの後継Hadoop on Cloudを使う場合の低コストなデータ保存場所として便利ファイルはオブジェクトに対応づけられるS3にディレクトリという概念はない"mkdir /foo/bar" => /foo/bar/ というキーで空オブジェクトを作成S3にrenameという概念はないオブジェクトを別の名前でコピーして、コピー元を消す"mv /dir1 /dir2" => /dir1/* なキーを持つオブジェクトを全コピーeventual consistencyファイルを作成した直後にlsすると見えないことがあるdeleteしたファイルがしばらく見えることがあるS3AFileSystem extends FileSystem
  • 34.
    © 2017 NTTDATA Corporation 34S3をバックエンドにした場合でも一貫性を提供する試みDynamoDBをファイルメタデータストアとして使うAmazon EMRで提供されているEMRFSのコミュニティ版hadoop-3.0.0-beta1から利用可能S3Guard (HADOOP-13345)
  • 35.
    © 2017 NTTDATA Corporation 35EMRのHBaseのデータディレクトリをS3上に置くhttp://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hbase-s3.htmlデータディレクトリと独立にWALディレクトリを設定することで実現(HBASE-17437)hbase.root.dir: on S3hbase.wal.dir: on HDFSEMRFSが前提HBase on Amazon S3
  • 36.
    © 2017 NTTDATA Corporation 36HDFSのパーツでオブジェクトストレージを作る試み特にブロックコンテナとしてのDataNodeNameNodeは以下の2つのモジュールが密結合FSNameSystem: メタデータ(inode)を管理BlockManager: ブロックレプリカを管理キー空間とコンテナの対応づけだけならスケールアウトしやすいブロックメタデータはDataNode側で持ち、RAFTで冗長化HDFS-7240ブランチでアクティブに開発されている果たしてマージできるのかOzone (HDFS-7240)
  • 37.
    © 2017 NTTDATA Corporation 37まとめ
  • 38.
    © 2017 NTTDATA Corporation 38HDFSはファイルシステムのセマンティクスを提供データローカリティを活かした高スループットな分散処理の基盤スループットだけではなくレイテンシもそれなりに追求HBaseのようなデータストアのバックエンドとしても使えるFileSystem APIを使えばバックエンドを透過的に切り替え可能オブジェクトストアその他とうまく使い分けるとよい今回紹介できなかったHDFSならではの機能は他にもいろいろTransparent EncryptionExtended AttributesStorage PoliciesErasure CodingSummary
  • 39.
    © 2017 NTTDATA Corporation

[8]ページ先頭

©2009-2025 Movatter.jp