My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
ProgrammingGuideSideData  
SSS Mapreduce Programming Guide - SideData
ja, en
Updated Feb 25, 2013

サイドデータ

SideData

SSS MapreduceではリモートのMapper/Reducerにて入力で指定したTupleGroupとは別にTupleGroupを読み込む仕組みとしてSideDataと呼ぶ仕組みを提供しています。 SideDataはContext#getSideDataで生成します。

SideData#getSideDataの宣言は以下のとおりです。

    <OK extends Packable,OV extends Packable> SideData<OK,OV> openSideData(GroupID gid,
            Class<OK> keyClass,
            Class<OV> valClass)
    <OK extends Packable,OV extends Packable> SideData<OK,OV> openSideData(GroupID gid,
            Class<OK> keyClass,
            Class<OV> valClass,
            String sideDataType)

それぞれの引数の意味は以下のとおりです。

  • gid
  • 読み込みTupleGroupの識別子
  • keyClass
  • 読み込むTupleGroupのキーの型
  • valueClass
  • 読み込むTupleGroupのバリューの型
  • sideDataType
  • SideDataのタイプを指定します。"inadvance"を指定するとTupleを最初にすべてメモリ上に読み込みます。 "ondemand"を指定するとキーのみを最初に読み込み、バリューは要求された際にストレージサーバーから読み込みます。

SideDataの定義は以下の通りです。

public interface SideData<K extends Packable, V extends Packable> extends Closeable {
    boolean containsKey(K key);    
    List<V> get(K key) throws Exception;
    Iterable<K> keys() throws SssException;
    Iterable<Tuple<K, V>> tuples() throws SssException;
} 
  • boolean containsKey(K key);
  • 指定したキーがTupleGroupに含まれているかどうかを返します。
  • List<V> get(K key) throws Exception;
  • キーからバリューを取得します。 SSS Mapreduceでは同一キーに対して複数のバリューを保持することが可能であるため、戻り値はListになっています。
  • Iterable<K> keys() throws SssException;
  • キーの集合を返します。
  • Iterable<Tuple<K, V>> tuples() throws SssException;
  • キーとバリューのペアの集合を返します。

Scaner

サイドデータでは読み込みを1スレッドで実行します。そのため、読み込み速度が遅いです。 また、データ構造は決まったものしか利用できません。

そこでSideDataとは別に並列にに読み込みのみを行う機能も提供しています。 具体的にはContextの以下のメソッドで並列な読み込みを実行します。

    <OK extends Packable,OV extends Packable> void scanSideData(GroupID gid,
            java.lang.Class<OK> keyClass,
            java.lang.Class<OV> valClass,
            TupleGroupScaner<OK,OV> scaner)
        throws SssException

引数の意味は以下のとおりです。

  • gid
  • 読み込むTupleGroupの識別子です
  • keyClass
  • 読み込むTupleGroupのキーの型です
  • valClass
  • 読み込むTupleGroupのバリューの型です
  • scaner
  • Tupleが読み込まれるたびによびだされるリスナーです

TupleGroupScanerの定義は以下のとおりです。

  public interface TupleGroupScaner<K extends Packable, V extends Packable> {
    void set(K key, V value) throws SssException;
  } 

Context#scanSideDataを実行した場合、scanerのsetメソッドが読み込んだすべてのTupleに対して呼ばれます。 また、複数のスレッドからsetメソッドは呼び出される可能性があるため、場合によっては同期が必要になります。

Powered by Google Project Hosting