Más contenido relacionado
Más de shunsuke Mikami (7)
広域分散ファイルシステムGfarm上でのMapReduceを用いた大規模分散データ処理 @ SWoPP2010
- 2. 2 発表の概要 研究の背景 MapReduceと分散ファイルシステム 研究の目的 提案システムの設計と実装 性能評価 関連研究 結論と今後の課題
- 3. 研究の背景 データの大規模化 インターネット規模 生命情報学,天文学,素粒子物理学 ペタバイト、エクサバイト級 分散ファイルシステム Google file system, HDFS,Gfarm, PVFS, Ceph 大容量,スケーラブルな並列I/Oバンド幅 コモディティで構成 分散処理 MPI (Message Passing Interface) MapReduce 3
- 4. MapReduce, Hadoop MapReduce [2004 Dean] 大規模データの並列処理のフレームワーク 処理をMapフェーズとReduce フェーズにわける Google の実装ではデータの入出力にGoogle File Systemを使用 Hadoop Google MapReduceのオープンソース実装 データの入出力にはHDFS(Hadoop Distributed File System)を使用 4 Sawzall Hive Pig MapReduce HadoopMapReduce Google File System Hadoop Distributed File System Google の基盤技術 OSSの基盤技術
- 6. HDFS Architecture 6 HDFSメタデータサーバー HDFSストレージサーバー HDFSストレージサーバー HDFSストレージサーバー Client Metadata ops Read or Write Read or Write 仮想的な共有ファイルシステム(HDFS)
- 9. Gfarm[2002 建部ら] 広域分散ファイルシステム マスター ファイルのメタデータを管理し、単一名前空間を提供 スレーブ データを保存 ファイルの局所性を利用したスケーラブルな性能 複製による信頼性の向上とアクセスの負荷分散 ファイル単位で保存 POSIX準拠のAPI FUSEによって既存のソフトウェアから透過にアクセス可能 9
- 10. 提案システム Hadoop-Gfarmプラグインの概要 10 FUSEを使ってアクセスすることも考えられるが、FUSEのオーバーヘッド、データの位置を取得できないなどの欠点 Hadoopから直接Gfarm上のファイルへアクセス プラグインを開発する必要 HadoopMapReduce applications File System API 本研究で開発 HDFS client library Gfarm JNI shim layer Gfarm client library Gfarm servers HDFS servers ソフトウェアスタック
- 11. Hadoop-Gfarmプラグインの実装 HadoopがHDFS以外のファイルシステムを利用できるように,抽象化されたFile System APIを備えている org.apache.hadoop.fs.FileSystem Gfarm用にそのインターフェースを実装 initialize, terminate, checkPath, makeQualified, setWorkingDirectory, getWorkingDirectory, open, create, rename, delete, getFileSize, delete, listStatus, mkdirs, getFileStatus, getFileBlockLocations, read, isOpen, write, flush, sync, seek, tell, close ファイルの複製の格納場所一覧を返す関数getFileBlockLocationsを実装 HadoopMapReduceがこの関数を使用し,Mapタスクをデータに近いノードに割り当てる Java Native Interface(JNI) を使用 コピーは発生しない 11
- 12. Hadoop-Gfarmプラグインの実装 Java 側のコード private final static native long open(String path); C++ のコード #include <gfarm/gfarm.h> JNIEXPORT jlong JNICALL Java_org_apache_hadoop_fs_gfarmfs_GfarmFSNativeInputChannel_open (JNIEnv *env, jclasscls, jstringjstrpath) { string path = jstr2cppstr(env, jstrpath); GFS_File f = NULL; gfarm_error_t e = gfs_pio_open(path.c_str(), GFARM_FILE_RDONLY, &f); return (jlong)f; } 12