我有一个 mapreduce 作业,其中映射器从几个 HBase 表中读取。它在我的集群上运行良好。我正在用 MRUnit 追溯编写一些单元测试。我正在尝试从手动实例化的 KeyValue 对象列表中组合一个 Result 对象,以用作 map() 方法的输入。当我随后尝试读取 map() 方法中的几列时,似乎只有列表中的第一个 KeyValue 对象保留在 Result 对象中——其他列为空。在下面,我有一个名为“0”的列族。
private MapDriver<ImmutableBytesWritable, Result, Text, Text> mapDriver;
private HopperHbaseMapper hopperHbaseMapper;
@Before
public void setUp() {
hopperHbaseMapper = new HopperHbaseMapper();
mapDriver = MapDriver.newMapDriver(hopperHbaseMapper);
}
@Test
public void testMapHbase() throws Exception {
String testKey = "123";
ImmutableBytesWritable key = new ImmutableBytesWritable(testKey.getBytes());
List<KeyValue> keyValues = new ArrayList<KeyValue>();
KeyValue keyValue1 = new KeyValue(testKey.getBytes(), "0".getBytes(), "first_name".getBytes(), "Joe".getBytes());
KeyValue keyValue2 = new KeyValue(testKey.getBytes(), "0".getBytes(), "last_name".getBytes(), "Blow".getBytes());
keyValues.add(keyValue1);
keyValues.add(keyValue2);
Result result = new Result(keyValues);
mapDriver.withInput(key, result);
mapDriver.withOutput(new Text(testKey), new Text(testKey + "\tJoe\tBlow"));
mapDriver.runTest();
}
我是否错误地创建了 Result 对象?如前所述,映射器在我的集群上的真实 HBase 数据上运行良好,所以我相信是我的测试设置有问题。