|
ProgrammingGuideSideData
SSS Mapreduce Programming Guide - SideData
ja, en サイドデータSideDataSSS 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)それぞれの引数の意味は以下のとおりです。
読み込みTupleGroupの識別子 読み込むTupleGroupのキーの型 読み込むTupleGroupのバリューの型 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;
}
指定したキーがTupleGroupに含まれているかどうかを返します。 キーからバリューを取得します。 SSS Mapreduceでは同一キーに対して複数のバリューを保持することが可能であるため、戻り値はListになっています。 キーの集合を返します。 キーとバリューのペアの集合を返します。 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引数の意味は以下のとおりです。
読み込むTupleGroupの識別子です 読み込むTupleGroupのキーの型です 読み込むTupleGroupのバリューの型です 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メソッドは呼び出される可能性があるため、場合によっては同期が必要になります。 | |