【发布时间】:2016-12-30 12:34:56
【问题描述】:
问题
我想确认以下几点:
如果过滤器过滤掉了一行,映射器应该不被调用。
目标
尝试将meta:uuid 列添加到还没有此类列的行。
奇怪的是,尽管日志显示并非如此,但似乎一切正常。
代码
过滤器:
new SingleColumnValueFilter(
Bytes.toBytes( "meta" ),
Bytes.toBytes( "uuid" ),
CompareFilter.CompareOp.NOT_EQUAL,
new NullComparator()
);
地图:
@Override
public void map( ImmutableBytesWritable row, Result columns, Context context ) throws IOException, InterruptedException {
Put put = new Put( row.get() );
String uuid = UUID.randomUUID().toString();
put.add( META_COLUMNFAMILY, UUID_QUALIFIER, uuid.getBytes() );
System.out.println( uuid.toString() );
context.write( row, put );
}
行为
首次运行
它将meta:uuid 列添加到所有行。
第二次运行
我们仍然得到带有新 UUID 的 System.out.println( uuid.toString() ) 输出 - 这表明映射器已被调用。
但 UUID(或时间戳)在 HBASE 中不会改变。
【问题讨论】: