Hdfsソースコードリーディング第一回

3,641 views
3,550 views

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,641
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
43
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Hdfsソースコードリーディング第一回

  1. 1. HDFS ソースコードリーディング(第一回)<br />三上俊輔 @shun0102<br />2010/08/17<br />
  2. 2. 自己紹介<br />筑波大学大学院1年<br />Hadoop, Gfarmなど分散ファイルシステムを研究中(主に性能評価など)<br />クックパッドでインターン中<br />Twitter: @shun0102<br />三上俊輔の研究日記 : http://shun0102.net<br />
  3. 3. HDFSリーディング概要<br />Hadoopのバージョンは 0.20.1<br />対象はorg.apache.hadoop.fsと hdfs<br />クライアント側から見ていく<br />全3回くらい<br />
  4. 4. HDFSソースコード概要<br />cdsrc/hdfs/org/apache/hadoop/hdfs/<br />wc -l *.java */*.java */*/*.java36690 total<br />hdfs<br />DistributedFileSystem.java<br />protocol<br />tools<br />server<br />datanode<br />namenode<br />
  5. 5. 今回の概要<br />Hadoopの FileSystem周りのスタック<br />0.21以降で導入されるFileContextについて<br />FileSystem API の使用法からソースを見る<br />FileSystem<br />FSDataInputStream<br />FSDataOutputStream<br />HDFS側の実装を見る<br />DistributedFileSystem<br />
  6. 6. Hadoopのファイルシステム周りのスタック<br />HadoopMapReduce<br />org.apache.hadoop.fs.FileSystem<br />HDFS client<br />Other Filesystems client<br />HDFS server<br />Other Filesystems server<br />
  7. 7. org.apache.hadoop.fs.FileSystem<br />Hadoopにおけるファイルシステムを抽象化して、汎用的なAPIを提供している<br />各ファイルシステムの実装はこのクラスを継承している<br />しかし、0.21以降からは新しいAPIになる予定<br />
  8. 8. FileContext<br />Old: 1Layer (0.20まで)<br />New: 2Layer (0.21以降)<br />FileContext<br />UserAPI<br />UserAPI<br />FS Imple API<br />FileSystem<br />AbstractFileSystem<br />FS Imple API<br />DistributedFS<br />S3<br />Local<br />FS<br />FS<br />implementations<br />DistributedFS<br />S3<br />Local<br />FS<br />
  9. 9. FileContextに関する詳細<br />http://www.slideshare.net/hadoopusergroup/file-context<br />HADOOP-4952<br />HADOOP-6223<br />
  10. 10. FileSystem APIの使い方<br />ファイルシステムのインスタンスを取得<br />FileSystem get(URI uri, Configuration conf)<br />入力ストリームを取得<br />FSDataInputStream open(Path path)<br />データ読み出し<br />int read(long position, byte[] buffer, int offset, int length)<br />void seek(long position)<br />
  11. 11. ソースコードを見てみましょう<br />org.apache.hadoop.fs.FileSystem<br />org.apache.hadoop.fs.FSDataInputStream<br />org.apache.hadoop.fs.FSDataOutputStream<br />
  12. 12. 設定ファイルからそのスキームに対応するファイルシステムのクラスを取得<br />fs.hdfs.impl<br />org.apache.hadoop.hdfs.DistributedFileSystem<br />fs.s3.impl<br />org.apache.hadoop.fs.s3.S3FileSystem<br />
  13. 13. HDFSでの実装は?<br />org.apache.hadoop.fs.FileSystem<br />DistributedFileSystem<br />org.apache.hadoop.fs.FSDataInputStream<br />DFSClient.DFSInputStream<br />org.apache.hadoop.fs.FSDataOutputStream<br />DFSClient.DFSOutputStream<br />
  14. 14. DFSOutputStream<br />データは64KB のパケットに分割される<br />それぞれのパケットは 512KB のチャンクを形成<br />パケットはまずdataQueueに入れられる<br />そこからDataNodeへパケットを転送開始して、ackQueueに移す<br />全てのDataNodeからackを受け取ったらackQueueから削除する<br />
  15. 15. DFSOutputStream(エラーが起こった場合)<br />ackQueueからdataQueueへパケットを移動し、エラーの起こったDataNodeを除外して、再度dataQueueから転送を開始<br />
  16. 16. その他のFileSystemクラスのメソッド<br />ファイルシステム操作<br />mkdir(), rename(), delete(), copyFromLocalFile(), setPermission(),setOwener()<br />ファイルシステムの情報取得<br />listStatus(), globStatus()<br />ブロックの配置情報取得<br />getBlockSize( )<br />getFileBlockLocations()<br />
  17. 17. まとめ<br />HadoopのFileSystem周りのコードを見ていった<br />Hadoopはファイルシステムがプラガブルになっている<br />DistributeFileSystemからHDFSのコードを見ていった<br />DFSOutputStream<br />getFileBlockLocations()<br />

×