public class ScannerOptions extends Object implements ScannerBase
Modifier and Type | Field and Description |
---|---|
protected long |
batchTimeOut |
protected String |
classLoaderContext |
protected Map<String,String> |
executionHints |
protected SortedSet<Column> |
fetchedColumns |
protected List<IterInfo> |
serverSideIteratorList |
protected Map<String,Map<String,String>> |
serverSideIteratorOptions |
protected long |
timeOut |
Modifier | Constructor and Description |
---|---|
protected |
ScannerOptions() |
|
ScannerOptions(ScannerOptions so) |
Modifier and Type | Method and Description |
---|---|
void |
addScanIterator(IteratorSetting si)
Add a server-side scan iterator.
|
void |
clearClassLoaderContext()
Clears the current classloader context set on this scanner
|
void |
clearColumns()
Clears the columns to be fetched (useful for resetting the scanner for reuse).
|
void |
clearSamplerConfiguration()
Clears sampler configuration making a scanner read all data.
|
void |
clearScanIterators()
Clears scan iterators prior to returning a scanner to the pool.
|
void |
close()
Closes any underlying connections on the scanner.
|
void |
fetchColumn(IteratorSetting.Column column)
Adds a column to the list of columns that will be fetch by this scanner.
|
void |
fetchColumn(org.apache.hadoop.io.Text colFam,
org.apache.hadoop.io.Text colQual)
Adds a column to the list of columns that will be fetched by this scanner.
|
void |
fetchColumnFamily(org.apache.hadoop.io.Text col)
Adds a column family to the list of columns that will be fetched by this scanner.
|
Authorizations |
getAuthorizations()
Returns the authorizations that have been set on the scanner
|
long |
getBatchTimeout(TimeUnit timeUnit)
Returns the timeout to fill a batch in the given TimeUnit.
|
String |
getClassLoaderContext()
Returns the name of the current classloader context set on this scanner
|
SortedSet<Column> |
getFetchedColumns() |
SamplerConfiguration |
getSamplerConfiguration() |
long |
getTimeout(TimeUnit timeunit)
Returns the setting for how long a scanner will automatically retry when a failure occurs.
|
Iterator<Map.Entry<Key,Value>> |
iterator()
Returns an iterator over an accumulo table.
|
void |
removeScanIterator(String iteratorName)
Remove an iterator from the list of iterators.
|
void |
setBatchTimeout(long timeout,
TimeUnit timeUnit)
This setting determines how long a scanner will wait to fill the returned batch.
|
void |
setClassLoaderContext(String classLoaderContext)
Sets the name of the classloader context on this scanner.
|
void |
setExecutionHints(Map<String,String> hints)
Set hints for the configured
ScanPrioritizer and ScanDispatcher . |
protected static void |
setOptions(ScannerOptions dst,
ScannerOptions src) |
void |
setSamplerConfiguration(SamplerConfiguration samplerConfig)
Setting this will cause the scanner to read sample data, as long as that sample data was
generated with the given configuration.
|
void |
setTimeout(long timeout,
TimeUnit timeUnit)
This setting determines how long a scanner will automatically retry when a failure occurs.
|
void |
updateScanIteratorOption(String iteratorName,
String key,
String value)
Update the options for an iterator.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
forEach, spliterator
protected long timeOut
protected long batchTimeOut
protected String classLoaderContext
protected ScannerOptions()
public ScannerOptions(ScannerOptions so)
public void addScanIterator(IteratorSetting si)
ScannerBase
addScanIterator
in interface ScannerBase
si
- fully specified scan-time iterator, including all options for the iterator. Any
changes to the iterator setting after this call are not propagated to the stored
iterator.public void removeScanIterator(String iteratorName)
ScannerBase
removeScanIterator
in interface ScannerBase
iteratorName
- nickname used for the iteratorpublic void updateScanIteratorOption(String iteratorName, String key, String value)
ScannerBase
updateScanIteratorOption
in interface ScannerBase
iteratorName
- the name of the iterator to changekey
- the name of the optionvalue
- the new value for the named optionpublic void fetchColumnFamily(org.apache.hadoop.io.Text col)
ScannerBase
This can help limit which locality groups are read on the server side.
When used in conjunction with custom iterators, the set of column families fetched is passed to the top iterator's seek method. Custom iterators may change this set of column families when calling seek on their source.
fetchColumnFamily
in interface ScannerBase
col
- the column family to be fetchedpublic void fetchColumn(org.apache.hadoop.io.Text colFam, org.apache.hadoop.io.Text colQual)
ScannerBase
WARNING. Using this method with custom iterators may have unexpected results. Iterators have control over which column families are fetched. However iterators have no control over which column qualifiers are fetched. When this method is called it activates a system iterator that only allows the requested family/qualifier pairs through. This low level filtering prevents custom iterators from requesting additional column families when calling seek.
For an example, assume fetchColumns(A, Q1) and fetchColumns(B,Q1) is called on a scanner and a custom iterator is configured. The families (A,B) will be passed to the seek method of the custom iterator. If the custom iterator seeks its source iterator using the families (A,B,C), it will never see any data from C because the system iterator filtering A:Q1 and B:Q1 will prevent the C family from getting through. ACCUMULO-3905 also has an example of the type of problem this method can cause.
tl;dr If using a custom iterator with a seek method that adds column families, then may want to avoid using this method.
fetchColumn
in interface ScannerBase
colFam
- the column family of the column to be fetchedcolQual
- the column qualifier of the column to be fetchedpublic void fetchColumn(IteratorSetting.Column column)
ScannerBase
fetchColumn
in interface ScannerBase
column
- the IteratorSetting.Column
to fetchpublic void clearColumns()
ScannerBase
clearColumns
in interface ScannerBase
public void clearScanIterators()
ScannerBase
clearScanIterators
in interface ScannerBase
protected static void setOptions(ScannerOptions dst, ScannerOptions src)
public Iterator<Map.Entry<Key,Value>> iterator()
ScannerBase
Keys returned by the iterator are not guaranteed to be in sorted order.
public void setTimeout(long timeout, TimeUnit timeUnit)
ScannerBase
Setting the timeout to zero (with any time unit) or Long.MAX_VALUE
(with
TimeUnit.MILLISECONDS
) means no timeout.
setTimeout
in interface ScannerBase
timeout
- the length of the timeouttimeUnit
- the units of the timeoutpublic long getTimeout(TimeUnit timeunit)
ScannerBase
getTimeout
in interface ScannerBase
public void close()
ScannerBase
close
in interface AutoCloseable
close
in interface ScannerBase
public Authorizations getAuthorizations()
ScannerBase
getAuthorizations
in interface ScannerBase
public void setSamplerConfiguration(SamplerConfiguration samplerConfig)
ScannerBase
One way to use this method is as follows, where the sampler configuration is obtained from the table configuration. Sample data can be generated in many different ways, so its important to verify the sample data configuration meets expectations.
// could cache this if creating many scanners to avoid RPCs.
SamplerConfiguration samplerConfig =
client.tableOperations().getSamplerConfiguration(table);
// verify table's sample data is generated in an expected way before using
userCode.verifySamplerConfig(samplerConfig);
scanner.setSamplerConfiguration(samplerConfig);
Of course this is not the only way to obtain a SamplerConfiguration
, it could be a
constant, configuration, etc.
If sample data is not present or sample data was generated with a different configuration, then
the scanner iterator will throw a SampleNotPresentException
. Also if a table's sampler
configuration is changed while a scanner is iterating over a table, a
SampleNotPresentException
may be thrown.
setSamplerConfiguration
in interface ScannerBase
public SamplerConfiguration getSamplerConfiguration()
getSamplerConfiguration
in interface ScannerBase
public void clearSamplerConfiguration()
ScannerBase
ScannerBase.getSamplerConfiguration()
should return null.clearSamplerConfiguration
in interface ScannerBase
public void setBatchTimeout(long timeout, TimeUnit timeUnit)
ScannerBase
Setting the timeout to zero (with any time unit) or Long.MAX_VALUE
(with
TimeUnit.MILLISECONDS
) means no timeout.
setBatchTimeout
in interface ScannerBase
timeout
- the length of the timeouttimeUnit
- the units of the timeoutpublic long getBatchTimeout(TimeUnit timeUnit)
ScannerBase
getBatchTimeout
in interface ScannerBase
public void setClassLoaderContext(String classLoaderContext)
ScannerBase
setClassLoaderContext
in interface ScannerBase
classLoaderContext
- name of the classloader contextpublic void clearClassLoaderContext()
ScannerBase
clearClassLoaderContext
in interface ScannerBase
public String getClassLoaderContext()
ScannerBase
getClassLoaderContext
in interface ScannerBase
public void setExecutionHints(Map<String,String> hints)
ScannerBase
ScanPrioritizer
and ScanDispatcher
. These hints
are available on the server side via ScanInfo.getExecutionHints()
Depending on the
configuration, these hints may be ignored. Hints will never impact what data is returned by a
scan, only how quickly it is returned.
The default configuration for Accumulo will ignore hints. See HintScanPrioritizer
and
SimpleScanDispatcher
for examples of classes that can react to hints.
setExecutionHints
in interface ScannerBase
Copyright © 2011–2019 The Apache Software Foundation. All rights reserved.