public EnrichmentLookup(HTableInterface table, String columnFamily, AccessTracker tracker) { this.table = table; this.setLookupHandler(new Handler(columnFamily)); this.setAccessTracker(tracker); }
@Override public byte[] apply(LookupKey lookupKey) { return lookupKey.toBytes(); } }
public boolean isInitialized() { return lookup != null && lookup.getTable() != null; } @Override
@Override public void map(Object key, Text value, Context context) throws IOException, InterruptedException { for(LookupKV results : extractor.extract(value.toString())) { if (results != null) { Put put = converter.toPut(columnFamily, results.getKey(), results.getValue()); write(new ImmutableBytesWritable(results.getKey().toBytes()), put, context); } } }
public LookupKV<KEY_T, VALUE_T> fromResult(Result result, String columnFamily, KEY_T key, VALUE_T value) throws IOException { if(result == null || result.getRow() == null) { return null; } key.fromBytes(result.getRow()); byte[] cf = Bytes.toBytes(columnFamily); NavigableMap<byte[], byte[]> cols = result.getFamilyMap(cf); value.fromColumns(cols.entrySet()); return new LookupKV<>(key, value); } @Override
@Override public Iterable<Boolean> exists(Iterable<KeyWithContext<EnrichmentKey, HBaseContext>> key, boolean logAccess) throws IOException { List<Boolean> ret = new ArrayList<>(); if(Iterables.isEmpty(key)) { return Collections.emptyList(); } HTableInterface table = Iterables.getFirst(key, null).getContext().getTable(); for(boolean b : table.existsAll(keysToGets(key))) { ret.add(b); } return ret; }
private List<Get> keysToGets(Iterable<KeyWithContext<EnrichmentKey, HBaseContext>> keys) { List<Get> ret = new ArrayList<>(); for(KeyWithContext<EnrichmentKey, HBaseContext> key : keys) { ret.add(converter.toGet(getColumnFamily(key.getContext()), key.getKey())); } return ret; }
@Override public LookupKV<EnrichmentKey, EnrichmentValue> get(EnrichmentKey key, HBaseContext context, boolean logAccess) throws IOException { return converter.fromResult(context.getTable().get(converter.toGet(getColumnFamily(context), key)), getColumnFamily(context)); }
@Nullable @Override public KeyWithContext<EnrichmentKey, EnrichmentLookup.HBaseContext> apply(@Nullable String enrichmentType) { EnrichmentKey key = new EnrichmentKey(enrichmentType, indicator); EnrichmentLookup.HBaseContext context = new EnrichmentLookup.HBaseContext(table, getColumnFamily(enrichmentType, config)); return new KeyWithContext<>(key, context); } }
@Override public void cleanup() { try { lookup.close(); } catch (Exception e) { throw new RuntimeException("Unable to cleanup access tracker", e); } }
private String getColumnFamily(HBaseContext context) { return context.getColumnFamily() == null?columnFamily:context.getColumnFamily(); }
@Override public void close() throws Exception { super.close(); table.close(); } }
public List<Put> toPut(String line , Extractor extractor , String cf , HbaseConverter converter ) throws IOException { List<Put> ret = new ArrayList<>(); Iterable<LookupKV> kvs = extractor.extract(line); for(LookupKV kv : kvs) { Put put = converter.toPut(cf, kv.getKey(), kv.getValue()); ret.add(put); } return ret; }
public LookupKV<KEY_T, VALUE_T> fromPut(Put put, String columnFamily, KEY_T key, VALUE_T value) throws IOException { key.fromBytes(put.getRow()); byte[] cf = Bytes.toBytes(columnFamily); value.fromColumns(Iterables.transform(put.getFamilyCellMap().get(cf), CELL_TO_ENTRY)); return new LookupKV<>(key, value); }
@Override public Get toGet(String columnFamily, KEY_T key) { Get ret = new Get(key.toBytes()); ret.addFamily(Bytes.toBytes(columnFamily)); return ret; }
@Override public boolean exists(EnrichmentKey key, HBaseContext context, boolean logAccess) throws IOException { return context.getTable().exists(converter.toGet(getColumnFamily(context), key)); }
public boolean isInitialized() { return lookup != null && lookup.getTable() != null; }
@Override public void cleanup() { try { lookup.close(); } catch (Exception e) { LOG.error("Unable to cleanup access tracker", e); } }