Hadoop Hbase中的三重复合键

Hadoop Hbase中的三重复合键,hadoop,hbase,Hadoop,Hbase,我有一个用例,需要3级复合键。 例如。 Rollnumber:类别:friendsRollNumber 我想查询“获取特定卷号和课程的所有朋友” 我在网上找不到足够的例子来使用复合键和范围扫描 目前,我正在做以下工作 这是我形成行键的方式。 它会根据myRollNumber和myClass选择区域服务器吗?如果不是,我该怎么做 另外,对于范围扫描,正确的使用方法是什么。我是用下面的方法做的。我仍在编写代码的过程中,因此尚未对其进行测试 按照我的要求,上述扫描方式正确吗 另外,如何从扫描仪中获取r

我有一个用例,需要3级复合键。 例如。 Rollnumber:类别:friendsRollNumber

我想查询“获取特定卷号和课程的所有朋友”

我在网上找不到足够的例子来使用复合键和范围扫描

目前,我正在做以下工作

这是我形成行键的方式。 它会根据myRollNumber和myClass选择区域服务器吗?如果不是,我该怎么做

另外,对于范围扫描,正确的使用方法是什么。我是用下面的方法做的。我仍在编写代码的过程中,因此尚未对其进行测试

按照我的要求,上述扫描方式正确吗

另外,如何从扫描仪中获取rowKey的各个部分?

请尝试以下操作:

byte[] prefix=Bytes.toBytes("rollnumber" + "class");
Scan scan = new Scan(prefix));
PrefixFilter prefixFilter = new PrefixFilter(prefix);
scan.addFilter(prefixFilter);
ResultScanner resultScanner = table.getScanner(scan);

根据您的需要,您可以使用扫描的开始-停止行功能。您不需要过滤器

byte[]startRow= Bytes.add(Bytes.tobytes("search_rollnumber"),Bytes.tobytes("myClass"));
byte[]stopRow= Bytes.add(Bytes.tobytes("search_rollnumber"),Bytes.tobytes("myClass"));
stopRow[stopRow.length - 1]++;
Scan s = new Scan(startRow, stopRow);
使用此扫描,您将获得以search\u rollnumberMyClass开头的所有行。
我不确定您是否在rowkey中使用:。但我认为如果rollnumber和class都表示为整数,则应该这样做

这并不能回答我的全部问题。与插入行键时选择Regionserver的方式相同。我希望它是根据卷号和类来选择的,这样范围就变得有效了。这个代码片段将给你所有的朋友数据。将根据您的行键选择区域服务器。HBase根据时间顺序决定RS,以保持每个RS上的键范围。如果是连续的,则可能会有问题,否则不会有问题。我的问题是,获取特定类的卷号的所有朋友。因此,我不希望查询跨区域服务器。在hbase中是否有一种方法可以选择forst 2部分行键作为选择区域服务器的分区键
byte[] prefix=Bytes.toBytes("rollnumber" + "class");
Scan scan = new Scan(prefix));
PrefixFilter prefixFilter = new PrefixFilter(prefix);
scan.addFilter(prefixFilter);
ResultScanner resultScanner = table.getScanner(scan);
byte[]startRow= Bytes.add(Bytes.tobytes("search_rollnumber"),Bytes.tobytes("myClass"));
byte[]stopRow= Bytes.add(Bytes.tobytes("search_rollnumber"),Bytes.tobytes("myClass"));
stopRow[stopRow.length - 1]++;
Scan s = new Scan(startRow, stopRow);