Hadoop:Map Reduce:从HBase读取,但按一列的内容过滤行

Hadoop:Map Reduce:从HBase读取,但按一列的内容过滤行,hadoop,filter,mapreduce,hbase,database-scan,Hadoop,Filter,Mapreduce,Hbase,Database Scan,我对Hadoop真的很陌生,我无法找到我的问题的答案。我想写一个MapReduce作业,从HBase中读取数据,然后在一个简单的文本文件中写入 在HBase中,我得到了一个表示id的列。现在我不想处理HBase表中包含的所有行,而只处理maxId和minId之间的行 我发现我可以使用用户过滤器(scan.setFilter),这样我就可以过滤与我的请求不匹配的行 这是我的第一份地图缩小工作,请耐心等待:-) 我有一个初学者类,在那里我配置作业和扫描对象,然后启动作业 现在,我的第一次尝试如下所示

我对Hadoop真的很陌生,我无法找到我的问题的答案。我想写一个MapReduce作业,从HBase中读取数据,然后在一个简单的文本文件中写入

在HBase中,我得到了一个表示id的列。现在我不想处理HBase表中包含的所有行,而只处理maxId和minId之间的行

我发现我可以使用用户过滤器
(scan.setFilter)
,这样我就可以过滤与我的请求不匹配的行

这是我的第一份地图缩小工作,请耐心等待:-)

我有一个初学者类,在那里我配置作业和扫描对象,然后启动作业

现在,我的第一次尝试如下所示:

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;
}
private Scan getScan()
{
最终扫描=新扫描();
//**过滤器**
列表过滤器=新的ArrayList();
Filter filter1=新值筛选器(CompareFilter.CompareOp.GREATER_或_EQUAL,新的二进制比较器(Bytes.toBytes(Integer.parseInt(minId)));
过滤器。添加(过滤器1);
Filter filter2=新值过滤器(CompareFilter.CompareOp.LESS_或_相等,新二进制比较器(Bytes.toBytes(Integer.parseInt(maxId)));
过滤器。添加(过滤器2);
过滤器列表过滤器列表=新过滤器列表(过滤器);
scan.setFilter(过滤器列表);
扫描设置缓存(500);
scan.setCacheBlocks(false);
//身份证
scan.addColumn(“columnfamily.getBytes(),“id.getBytes());
返回扫描;
}
嗯,我不确定这样做是否正确。我还读到我可以通过配置对象将我的minId和maxId传递给Map作业,但我不确定如何传递


此外,之后我要做什么?我通常只需使用
initTableMapperJob
启动作业,并将扫描对象传递给它。我读了一些ResultScanner,所以,我需要它们吗?我认为MapReduce框架现在会自动将正确的行传递给我的映射作业,对吗?

听起来是一种正确的方法。您使用的是什么版本的HBase?