Your SlideShare is downloading. ×
Hdfsソースコードリーディング第一回
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

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

3,305
views

Published on


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

No Downloads
Views
Total Views
3,305
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
42
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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