1

私は 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 フレームワークは正しい行を自動的にマップ ジョブに渡すと思っていましたが、正しいですか?

4

0 に答える 0