@Override public void deserialize(Entry<Key, Value> entry) { if (!columnValues.containsKey(rowIdName)) { entry.getKey().getRow(rowId); columnValues.put(rowIdName, rowId.toString()); } if (rowOnly) { return; } entry.getKey().getColumnFamily(family); entry.getKey().getColumnQualifier(qualifier); if (family.equals(ROW_ID_COLUMN) && qualifier.equals(ROW_ID_COLUMN)) { return; } value.set(entry.getValue().get()); columnValues.put(familyQualifierColumnMap.get(family.toString()).get(qualifier.toString()), value.toString()); }
String tableId = connector.tableOperations().tableIdMap().get(table); Scanner scanner = connector.createScanner("accumulo.metadata", auths); scanner.fetchColumnFamily(new Text("loc")); Key defaultTabletRow = new Key(tableId + '<'); Key start = new Key(tableId); Key end = defaultTabletRow.followingKey(PartialKey.ROW); scanner.setRange(new Range(start, end)); Iterator<Entry<Key, Value>> iter = scanner.iterator(); if (iter.hasNext()) { location = Optional.of(iter.next().getValue().toString()); Text splitCompareKey = new Text(); key.getRow(splitCompareKey); Text scannedCompareKey = new Text(); byte[] keyBytes = entry.getKey().getRow().copyBytes(); location = Optional.of(entry.getValue().toString()); break; int compareTo = splitCompareKey.compareTo(scannedCompareKey); if (compareTo <= 0) { location = Optional.of(entry.getValue().toString());
private static void assertKeyValuePair(Entry<Key, Value> e, byte[] row, String cf, String cq, String cv, String value) { assertEquals(row, e.getKey().getRow().copyBytes()); assertEquals(cf, e.getKey().getColumnFamily().toString()); assertEquals(cq, e.getKey().getColumnQualifier().toString()); assertEquals(cv, e.getKey().getColumnVisibility().toString()); assertEquals(value, e.getValue().toString()); }
private static boolean isExact(Range range) { return !range.isInfiniteStartKey() && !range.isInfiniteStopKey() && range.getStartKey().followingKey(PartialKey.ROW).equals(range.getEndKey()); }
scanner = connector.createScanner(table, Authorizations.EMPTY); scanner.setRange(new Range(new Text(startkey), null)); scanner.addScanIterator(cfg); scanner.fetchColumn(colFam, new Text(field)); final Text cq = new Text(); for (Entry<Key, Value> rowEntry : row.entrySet()) { rowEntry.getKey().getColumnQualifier(cq); rowData.put(cq.toString(), new ByteArrayByteIterator(rowEntry.getValue().get()));
switch (part) { case ROW: keyCopy = new Key(key.getRow()); break; case ROW_COLFAM: keyCopy = new Key(key.getRow(), key.getColumnFamily()); break; case ROW_COLFAM_COLQUAL: keyCopy = new Key(key.getRow(), key.getColumnFamily(), key.getColumnQualifier()); break; case ROW_COLFAM_COLQUAL_COLVIS: keyCopy = new Key(key.getRow(), key.getColumnFamily(), key.getColumnQualifier(), key.getColumnVisibility()); break; case ROW_COLFAM_COLQUAL_COLVIS_TIME: keyCopy = new Key(key.getRow(), key.getColumnFamily(), key.getColumnQualifier(), key.getColumnVisibility(), key.getTimestamp()); break; default:
@Override public Status read(String table, String key, Set<String> fields, Map<String, ByteIterator> result) { Scanner scanner = null; try { scanner = getRow(table, new Text(key), null); // Pick out the results we care about. final Text cq = new Text(); for (Entry<Key, Value> entry : scanner) { entry.getKey().getColumnQualifier(cq); Value v = entry.getValue(); byte[] buf = v.get(); result.put(cq.toString(), new ByteArrayByteIterator(buf)); } } catch (Exception e) { System.err.println("Error trying to reading Accumulo table " + table + " " + key); e.printStackTrace(); return Status.ERROR; } finally { if (null != scanner) { scanner.close(); } } return Status.OK; }
@Override protected Text getTerm(Key key) { if (indexColf.compareTo(key.getColumnFamily().getBytes(), 0, indexColf.getLength()) < 0) { // We're past the index column family, so return a term that will sort lexicographically last. // The last unicode character should suffice return new Text("\uFFFD"); } Text colq = key.getColumnQualifier(); int zeroIndex = colq.find("\0"); Text term = new Text(); term.set(colq.getBytes(), 0, zeroIndex); return term; }
/** * Deletes a row, given a Scanner of JUST that row. */ private void deleteRow(Scanner scanner, BatchWriter bw) throws MutationsRejectedException { Mutation deleter = null; // iterate through the keys final Text row = new Text(); final Text cf = new Text(); final Text cq = new Text(); for (Entry<Key, Value> entry : scanner) { // create a mutation for the row if (deleter == null) { entry.getKey().getRow(row); deleter = new Mutation(row); } entry.getKey().getColumnFamily(cf); entry.getKey().getColumnQualifier(cq); // the remove function adds the key with the delete flag set to true deleter.putDelete(cf, cq); } bw.addMutation(deleter); } }
public Set<Path> getPendingReplicationPaths() { final Set<Path> paths = new HashSet<>(); // Read over the queued work BatchScanner bs; try { bs = context.createBatchScanner(ReplicationTable.NAME, Authorizations.EMPTY, 4); } catch (TableNotFoundException e) { log.debug("No replication table exists", e); return paths; } bs.setRanges(Collections.singleton(new Range())); StatusSection.limit(bs); try { Text buffer = new Text(); for (Entry<Key,Value> entry : bs) { Key k = entry.getKey(); k.getRow(buffer); paths.add(new Path(buffer.toString())); } } finally { bs.close(); } return paths; }
private void reassignLocation(String table, String tableNameToModify) throws TableNotFoundException, MutationsRejectedException { String tableIdToModify = getConnector().tableOperations().tableIdMap().get(tableNameToModify); Scanner scanner = getConnector().createScanner(table, Authorizations.EMPTY); scanner.setRange(new KeyExtent(tableIdToModify, null, null).toMetadataRange()); scanner.fetchColumnFamily(MetadataSchema.TabletsSection.CurrentLocationColumnFamily.NAME); Entry<Key,Value> entry = scanner.iterator().next(); Mutation m = new Mutation(entry.getKey().getRow()); m.putDelete(entry.getKey().getColumnFamily(), entry.getKey().getColumnQualifier(), entry.getKey().getTimestamp()); m.put(entry.getKey().getColumnFamily(), new Text("1234567"), entry.getKey().getTimestamp() + 1, new Value("fake:9005".getBytes(UTF_8))); scanner.close(); BatchWriter bw = getConnector().createBatchWriter(table, null); bw.addMutation(m); bw.close(); }
public static SortedMap<FileRef,DataFileValue> getDataFileSizes(KeyExtent extent, ServerContext context) { TreeMap<FileRef,DataFileValue> sizes = new TreeMap<>(); try (Scanner mdScanner = new ScannerImpl(context, MetadataTable.ID, Authorizations.EMPTY)) { mdScanner.fetchColumnFamily(DataFileColumnFamily.NAME); Text row = extent.getMetadataEntry(); Key endKey = new Key(row, DataFileColumnFamily.NAME, new Text("")); endKey = endKey.followingKey(PartialKey.ROW_COLFAM); mdScanner.setRange(new Range(new Key(row), endKey)); for (Entry<Key,Value> entry : mdScanner) { if (!entry.getKey().getRow().equals(row)) break; DataFileValue dfv = new DataFileValue(entry.getValue().get()); sizes.put(new FileRef(context.getVolumeManager(), entry.getKey()), dfv); } return sizes; } }
public static long getRangeLength(Range range) { Text startRow = range.isInfiniteStartKey() ? new Text(new byte[] {Byte.MIN_VALUE}) : range.getStartKey().getRow(); Text stopRow = range.isInfiniteStopKey() ? new Text(new byte[] {Byte.MAX_VALUE}) : range.getEndKey().getRow(); int maxCommon = Math.min(7, Math.min(startRow.getLength(), stopRow.getLength())); long diff = 0; byte[] start = startRow.getBytes(); byte[] stop = stopRow.getBytes(); for (int i = 0; i < maxCommon; ++i) { diff |= 0xff & (start[i] ^ stop[i]); diff <<= Byte.SIZE; } if (startRow.getLength() != stopRow.getLength()) diff |= 0xff; return diff + 1; }
public static void removeBulkLoadEntries(Connector conn, String tableId, long tid) throws Exception { Scanner mscanner = new IsolatedScanner(conn.createScanner(Constants.METADATA_TABLE_NAME, Constants.NO_AUTHS)); mscanner.setRange(new KeyExtent(new Text(tableId), null, null).toMetadataRange()); mscanner.fetchColumnFamily(Constants.METADATA_BULKFILE_COLUMN_FAMILY); BatchWriter bw = conn.createBatchWriter(Constants.METADATA_TABLE_NAME, new BatchWriterConfig()); for (Entry<Key,Value> entry : mscanner) { log.debug("Looking at entry " + entry + " with tid " + tid); if (Long.parseLong(entry.getValue().toString()) == tid) { log.debug("deleting entry " + entry); Mutation m = new Mutation(entry.getKey().getRow()); m.putDelete(entry.getKey().getColumnFamily(), entry.getKey().getColumnQualifier()); bw.addMutation(m); } } bw.close(); }
@Override protected void resetScanner() { try { Scanner ds = conn.createScanner(metadataTableName, Authorizations.EMPTY); Text tablet = new KeyExtent("0", new Text("m"), null).getMetadataEntry(); ds.setRange(new Range(tablet, true, tablet, true)); Mutation m = new Mutation(tablet); BatchWriter bw = conn.createBatchWriter(metadataTableName, new BatchWriterConfig()); for (Entry<Key,Value> entry : ds) { Key k = entry.getKey(); m.putDelete(k.getColumnFamily(), k.getColumnQualifier(), k.getTimestamp()); } bw.addMutation(m); bw.close(); } catch (Exception e) { throw new RuntimeException(e); } super.resetScanner(); }
/** * Scans over the directory table and pulls out stat information about a path. * * @param path * the full path of a file or directory */ public Map<String,String> getData(String path) throws TableNotFoundException { if (path.endsWith("/")) path = path.substring(0, path.length() - 1); Scanner scanner = conn.createScanner(tableName, auths); scanner.setRange(new Range(getRow(path))); Map<String,String> data = new TreeMap<String,String>(); for (Entry<Key,Value> e : scanner) { String type = getType(e.getKey().getColumnFamily()); data.put("fullname", e.getKey().getRow().toString().substring(3)); data.put(type + e.getKey().getColumnQualifier().toString() + ":" + e.getKey().getColumnVisibility().toString(), new String(e.getValue().get())); } return data; }
private static void findContainingTablets(Opts opts) throws Exception { Range range = new KeyExtent(new Text(opts.tableId), null, null).toMetadataRange(); Scanner scanner = opts.getConnector().createScanner("createEvents", opts.auths); scanner.setRange(range); Text row = new Text(opts.row); for (Entry<Key,Value> entry : scanner) { KeyExtent ke = new KeyExtent(entry.getKey().getRow(), new Value(TextUtil.getBytes(entry.getKey().getColumnFamily()))); if (ke.contains(row)) { System.out.println(entry.getKey().getColumnQualifier() + " " + ke + " " + entry.getValue()); } } } }
private void verifyData(String table, int s, int e) throws Exception { Scanner scanner = getConnector().createScanner(table, Authorizations.EMPTY); Iterator<Entry<Key,Value>> iter = scanner.iterator(); for (int i = s; i <= e; i++) { if (!iter.hasNext()) throw new Exception("row " + i + " not found"); Entry<Key,Value> entry = iter.next(); String row = String.format("%04d", i); if (!entry.getKey().getRow().equals(new Text(row))) throw new Exception("unexpected row " + entry.getKey() + " " + i); if (Integer.parseInt(entry.getValue().toString()) != i) throw new Exception("unexpected value " + entry + " " + i); } if (iter.hasNext()) throw new Exception("found more than expected " + iter.next()); }
private static void writeKeyValues(Connector connector, Multimap<BulkIngestKey,Value> keyValues) throws Exception { final TableOperations tops = connector.tableOperations(); final Set<BulkIngestKey> biKeys = keyValues.keySet(); for (final BulkIngestKey biKey : biKeys) { final String tableName = biKey.getTableName().toString(); if (!tops.exists(tableName)) tops.create(tableName); final BatchWriter writer = connector.createBatchWriter(tableName, new BatchWriterConfig()); for (final Value val : keyValues.get(biKey)) { final Mutation mutation = new Mutation(biKey.getKey().getRow()); mutation.put(biKey.getKey().getColumnFamily(), biKey.getKey().getColumnQualifier(), biKey.getKey().getColumnVisibilityParsed(), val); writer.addMutation(mutation); } writer.close(); } }