私は Hadoop を初めて使用するので、質問に対する答えを見つけることができません。HBase から読み取り、単純なテキスト ファイルに書き込む map reduce ジョブを作成したいと考えています。
HBase には、ID を表す列があります。ここで、HBase テーブルに含まれるすべての行を処理するのではなく、maxId と minId の間の行のみを処理したいと考えています。
(scan.setFilter)
リクエストに一致しない行をフィルタリングできるように、フィルターを使用できる可能性があることがわかりました。
これは私の最初の Map Reduce ジョブなので、しばらくお待ちください :-)
スターター クラスを取得しました。ここで、ジョブとスキャン オブジェクトを構成し、ジョブを開始します。
さて、私の最初の試みは次のようになります:
private Scan getScan()
{
final Scan scan = new Scan();
// ** FILTER **
List<Filter> filters = new ArrayList<Filter>();
Filter filter1 = new ValueFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes(Integer.parseInt(minId))));
filters.add(filter1);
Filter filter2 = new ValueFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(Integer.parseInt(maxId))));
filters.add(filter2);
FilterList filterList = new FilterList(filters);
scan.setFilter(filterList);
scan.setCaching(500);
scan.setCacheBlocks(false);
// id
scan.addColumn("columnfamily".getBytes(), "id".getBytes());
return scan;
}
まあ、これが正しい方法かどうかはわかりません。また、構成オブジェクトを使用して minId と maxId を Map Job に渡すことができることも読みましたが、方法がわかりません。
その上、私はその後何をしなければなりませんか?通常は、ジョブを開始しinitTableMapperJob
てスキャン オブジェクトを渡すだけです。ResultScanner について読んだことがありますが、必要ですか? MapReduce フレームワークは正しい行を自動的にマップ ジョブに渡すと思っていましたが、正しいですか?