cascading.tap

## Class Tap<Config,Input,Output>

- java.lang.Object
- - cascading.tap.Tap<Config,Input,Output>

All Implemented Interfaces:
  FlowElement, ScopedElement, Traceable, java.io.Serializable

Direct Known Subclasses:
  BasePartitionTap, DecoratorTap, SinkTap, SourceTap

    public abstract class Tap<Config,Input,Output>
    extends java.lang.Object
    implements ScopedElement, FlowElement, java.io.Serializable, Traceable

A Tap represents the physical data source or sink in a connected `Flow`. That is, a source Tap is the head end of a connected `Pipe` and `Tuple` stream, and a sink Tap is the tail end. Kinds of Tap types are used to manage files from a local disk, distributed disk, remote storage like Amazon S3, or via FTP. It simply abstracts out the complexity of connecting to these types of data sources.

A Tap takes a `Scheme` instance, which is used to identify the type of resource (text file, binary file, etc). A Tap is responsible for how the resource is reached.

By default when planning a Flow, Tap equality is a function of the `getIdentifier()` and `getScheme()` values. That is, two Tap instances are the same Tap instance if they sink/source the same resource and sink/source the same fields.

Some more advanced taps, like a database tap, may need to extend equality to include any filtering, like the `where` clause in a SQL statement so two taps reading from the same SQL table aren't considered equal.

Taps are also used to determine dependencies between two or more `Flow` instances when used with a `Cascade`. In that case the `getFullIdentifier(Object)` value is used and the Scheme is ignored.

See Also:
  Serialized Form

### Constructor Summary

Constructors
`protected` `Tap()`
`protected` `Tap(Scheme<Config,Input,Output,?,?> scheme)`
`protected` `Tap(Scheme<Config,Input,Output,?,?> scheme, SinkMode sinkMode)`

### Method Summary

Methods
`boolean` `commitResource(Config conf)` Method commitResource allows the underlying resource to be notified when all write processing is successful so that any additional cleanup or processing may be completed.
`abstract boolean` `createResource(Config conf)` Method createResource creates the underlying resource.
`boolean` `createResource(FlowProcess<? extends Config> flowProcess)` Method createResource creates the underlying resource.
`abstract boolean` `deleteResource(Config conf)` Method deleteResource deletes the resource represented by this instance.
`boolean` `deleteResource(FlowProcess<? extends Config> flowProcess)` Method deleteResource deletes the resource represented by this instance.
`boolean` `equals(java.lang.Object object)`
`void` `flowConfInit(Flow<Config> flow)` Method flowInit allows this Tap instance to initialize itself in context of the given `Flow` instance.
`ConfigDef` `getConfigDef()` Returns a `ConfigDef` instance that allows for local properties to be set and made available via a resulting `FlowProcess` instance when the tap is invoked.
`java.lang.String` `getFullIdentifier(Config conf)` Method getFullIdentifier returns a fully qualified resource identifier.
`java.lang.String` `getFullIdentifier(FlowProcess<? extends Config> flowProcess)` Method getFullIdentifier returns a fully qualified resource identifier.
`abstract java.lang.String` `getIdentifier()` Method getIdentifier returns a String representing the resource this Tap instance represents.
`abstract long` `getModifiedTime(Config conf)` Method getModifiedTime returns the date this resource was last modified.
`long` `getModifiedTime(FlowProcess<? extends Config> flowProcess)` Method getModifiedTime returns the date this resource was last modified.
`ConfigDef` `getNodeConfigDef()` Returns a `ConfigDef` instance that allows for process level properties to be set and made available via a resulting `FlowProcess` instance when the tap is invoked.
`Scheme<Config,Input,Output,?,?>` `getScheme()` Method getScheme returns the scheme of this Tap object.
`Fields` `getSinkFields()` Method getSinkFields returns the sinkFields of this Tap object.
`SinkMode` `getSinkMode()` Method getSinkMode returns the `SinkMode` }of this Tap object.
`Fields` `getSourceFields()` Method getSourceFields returns the sourceFields of this Tap object.
`ConfigDef` `getStepConfigDef()` Returns a `ConfigDef` instance that allows for process level properties to be set and made available via a resulting `FlowProcess` instance when the tap is invoked.
`java.lang.String` `getTrace()` Method getTrace returns a String that pinpoints the caller that created this instance.
`boolean` `hasConfigDef()` Returns `true` if there are properties in the configDef instance.
`int` `hashCode()`
`boolean` `hasNodeConfigDef()` Returns `true` if there are properties in the nodeConfigDef instance.
`boolean` `hasStepConfigDef()` Returns `true` if there are properties in the stepConfigDef instance.
`static java.lang.String` `id(Tap tap)` Creates and returns a unique ID for the given Tap, this value is cached and may be used to uniquely identify the Tap instance in properties files etc.
`boolean` `isKeep()` Method isKeep indicates whether the resource represented by this instance should be kept if it already exists when the Flow is started.
`boolean` `isReplace()` Method isReplace indicates whether the resource represented by this instance should be deleted if it already exists when the Flow is started.
`boolean` `isSink()` Method isSink returns true if this Tap instance can be used as a sink.
`boolean` `isSource()` Method isSource returns true if this Tap instance can be used as a source.
`boolean` `isTemporary()` Method isTemporary returns true if this Tap is temporary (used for intermediate results).
`boolean` `isUpdate()` Method isUpdate indicates whether the resource represented by this instance should be updated if it already exists.
`TupleEntryIterator` `openForRead(FlowProcess<? extends Config> flowProcess)` Method openForRead opens the resource represented by this Tap instance for reading.
`abstract TupleEntryIterator` `openForRead(FlowProcess<? extends Config> flowProcess, Input input)` Method openForRead opens the resource represented by this Tap instance for reading.
`TupleEntryCollector` `openForWrite(FlowProcess<? extends Config> flowProcess)` Method openForWrite opens the resource represented by this Tap instance for writing.
`abstract TupleEntryCollector` `openForWrite(FlowProcess<? extends Config> flowProcess, Output output)` Method openForWrite opens the resource represented by this Tap instance for writing.
`Scope` `outgoingScopeFor(java.util.Set<Scope> incomingScopes)` Method outgoingScopeFor returns the Scope this FlowElement hands off to the next FlowElement.
`boolean` `prepareResourceForRead(Config conf)` Method prepareResourceForRead allows the underlying resource to be notified when reading will begin.
`boolean` `prepareResourceForWrite(Config conf)` Method prepareResourceForWrite allows the underlying resource to be notified when writing will begin.
`void` `presentSinkFields(FlowProcess<? extends Config> flowProcess, Fields fields)`
`void` `presentSourceFields(FlowProcess<? extends Config> flowProcess, Fields fields)`
`Fields` `resolveIncomingOperationArgumentFields(Scope incomingScope)` Method resolveIncomingOperationArgumentFields returns the Fields outgoing from the previous FlowElement that are consumable by this FlowElement when preparing Operation arguments.
`Fields` `resolveIncomingOperationPassThroughFields(Scope incomingScope)` Method resolveIncomingOperationPassThroughFields returns the Fields outgoing from the previous FlowElement that are consumable by this FlowElement when preparing the Pipe outgoing tuple.
`abstract boolean` `resourceExists(Config conf)` Method resourceExists returns true if the path represented by this instance exists.
`boolean` `resourceExists(FlowProcess<? extends Config> flowProcess)` Method resourceExists returns true if the path represented by this instance exists.
`Fields` `retrieveSinkFields(FlowProcess<? extends Config> flowProcess)` A hook for allowing a Scheme to lazily retrieve its sink fields.
`Fields` `retrieveSourceFields(FlowProcess<? extends Config> flowProcess)` A hook for allowing a Scheme to lazily retrieve its source fields.
`boolean` `rollbackResource(Config conf)` Method rollbackResource allows the underlying resource to be notified when any write processing has failed or was stopped so that any cleanup may be started.
`protected void` `setScheme(Scheme<Config,Input,Output,?,?> scheme)`
`void` `sinkConfInit(FlowProcess<? extends Config> flowProcess, Config conf)` Method sinkConfInit initializes this instance as a sink.
`void` `sourceConfInit(FlowProcess<? extends Config> flowProcess, Config conf)` Method sourceConfInit initializes this instance as a source.
`static Tap[]` `taps(Tap... taps)` Convenience function to make an array of Tap instances.
`java.lang.String` `toString()`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### Tap

    protected Tap()

#### Tap

    protected Tap(Scheme<Config,Input,Output,?,?> scheme)

#### Tap

    protected Tap(Scheme<Config,Input,Output,?,?> scheme,
       SinkMode sinkMode)

### Method Detail

#### taps

    public static Tap[] taps(Tap... taps)

Convenience function to make an array of Tap instances.

Parameters:
  `taps` - of type Tap
Returns:
  Tap array

#### id

    public static java.lang.String id(Tap tap)

Creates and returns a unique ID for the given Tap, this value is cached and may be used to uniquely identify the Tap instance in properties files etc.

This value is generally reproducible assuming the Tap identifier and the Scheme source and sink Fields remain consistent.

Parameters:
  `tap` - of type Tap
Returns:
  of type String

#### setScheme

    protected void setScheme(Scheme<Config,Input,Output,?,?> scheme)

#### getScheme

    public Scheme<Config,Input,Output,?,?> getScheme()

Method getScheme returns the scheme of this Tap object.

Returns:
  the scheme (type Scheme) of this Tap object.

#### getTrace

    public java.lang.String getTrace()

Description copied from interface: `Traceable`
Method getTrace returns a String that pinpoints the caller that created this instance.

Specified by:
  `getTrace` in interface `Traceable`
Returns:
  String

#### flowConfInit

    public void flowConfInit(Flow<Config> flow)

Method flowInit allows this Tap instance to initialize itself in context of the given `Flow` instance. This method is guaranteed to be called before the Flow is started and the `FlowListener.onStarting(cascading.flow.Flow)` event is fired.

This method will be called once per Flow, and before `sourceConfInit(cascading.flow.FlowProcess, Object)` and `sinkConfInit(cascading.flow.FlowProcess, Object)` methods.

Parameters:
  `flow` - of type Flow

#### sourceConfInit

    public void sourceConfInit(FlowProcess<? extends Config> flowProcess,
                      Config conf)

Method sourceConfInit initializes this instance as a source.

This method maybe called more than once if this Tap instance is used outside the scope of a `Flow` instance or if it participates in multiple times in a given Flow or across different Flows in a `Cascade`.

In the context of a Flow, it will be called after `FlowListener.onStarting(cascading.flow.Flow)`

Note that no resources or services should be modified by this method.

Parameters:
  `flowProcess` - of type FlowProcess
  `conf` - of type Config

#### sinkConfInit

    public void sinkConfInit(FlowProcess<? extends Config> flowProcess,
                    Config conf)

Method sinkConfInit initializes this instance as a sink.

This method maybe called more than once if this Tap instance is used outside the scope of a `Flow` instance or if it participates in multiple times in a given Flow or across different Flows in a `Cascade`.

Note this method will be called in context of this Tap being used as a traditional 'sink' and as a 'trap'.

In the context of a Flow, it will be called after `FlowListener.onStarting(cascading.flow.Flow)`

Note that no resources or services should be modified by this method. If this Tap instance returns true for `isReplace()`, then `deleteResource(Object)` will be called by the parent Flow.

Parameters:
  `flowProcess` - of type FlowProcess
  `conf` - of type Config

#### getIdentifier

    public abstract java.lang.String getIdentifier()

Method getIdentifier returns a String representing the resource this Tap instance represents.

Often, if the tap accesses a filesystem, the identifier is nothing more than the path to the file or directory. In other cases it may be a an URL or URI representing a connection string or remote resource.

Any two Tap instances having the same value for the identifier are considered equal.

Returns:
  String

#### getSourceFields

    public Fields getSourceFields()

Method getSourceFields returns the sourceFields of this Tap object.

Returns:
  the sourceFields (type Fields) of this Tap object.

#### getSinkFields

    public Fields getSinkFields()

Method getSinkFields returns the sinkFields of this Tap object.

Returns:
  the sinkFields (type Fields) of this Tap object.

#### openForRead

    public abstract TupleEntryIterator openForRead(FlowProcess<? extends Config> flowProcess,
                                 Input input)
                                            throws java.io.IOException

Method openForRead opens the resource represented by this Tap instance for reading.

`input` value may be null, if so, sub-classes must inquire with the underlying `Scheme` via `Scheme.sourceConfInit(cascading.flow.FlowProcess, Tap, Object)` to get the proper input type and instantiate it before calling `super.openForRead()`.

Note the returned iterator will return the same instance of `TupleEntry` on every call, thus a copy must be made of either the TupleEntry or the underlying `Tuple` instance if they are to be stored in a Collection.

Parameters:
  `flowProcess` - of type FlowProcess
  `input` - of type Input
Returns:
  TupleEntryIterator
Throws:
  `java.io.IOException` - when the resource cannot be opened

#### openForRead

    public TupleEntryIterator openForRead(FlowProcess<? extends Config> flowProcess)
                                   throws java.io.IOException

Method openForRead opens the resource represented by this Tap instance for reading.

Note the returned iterator will return the same instance of `TupleEntry` on every call, thus a copy must be made of either the TupleEntry or the underlying `Tuple` instance if they are to be stored in a Collection.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  TupleEntryIterator
Throws:
  `java.io.IOException` - when the resource cannot be opened

#### openForWrite

    public abstract TupleEntryCollector openForWrite(FlowProcess<? extends Config> flowProcess,
                                   Output output)
                                              throws java.io.IOException

Method openForWrite opens the resource represented by this Tap instance for writing.

This method is used internally and does not honor the `SinkMode` setting. If SinkMode is `SinkMode.REPLACE`, this call may fail. See `openForWrite(cascading.flow.FlowProcess)`.

`output` value may be null, if so, sub-classes must inquire with the underlying `Scheme` via `Scheme.sinkConfInit(cascading.flow.FlowProcess, Tap, Object)` to get the proper output type and instantiate it before calling `super.openForWrite()`.

Parameters:
  `flowProcess` - of type FlowProcess
  `output` - of type Output
Returns:
  TupleEntryCollector
Throws:
  `java.io.IOException` - when the resource cannot be opened

#### openForWrite

    public TupleEntryCollector openForWrite(FlowProcess<? extends Config> flowProcess)
                                     throws java.io.IOException

Method openForWrite opens the resource represented by this Tap instance for writing.

This method is for user application use and does honor the `SinkMode.REPLACE` settings. That is, if SinkMode is set to `SinkMode.REPLACE` the underlying resource will be deleted.

Note if `SinkMode.UPDATE` is set, the resource will not be deleted.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  TupleEntryCollector
Throws:
  `java.io.IOException` - when the resource cannot be opened

#### outgoingScopeFor

    public Scope outgoingScopeFor(java.util.Set<Scope> incomingScopes)

Description copied from interface: `ScopedElement`
Method outgoingScopeFor returns the Scope this FlowElement hands off to the next FlowElement.

Specified by:
  `outgoingScopeFor` in interface `ScopedElement`
Parameters:
  `incomingScopes` - of type Set<Scope>
Returns:
  Scope

#### retrieveSourceFields

    public Fields retrieveSourceFields(FlowProcess<? extends Config> flowProcess)

A hook for allowing a Scheme to lazily retrieve its source fields.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  the found Fields

#### presentSourceFields

    public void presentSourceFields(FlowProcess<? extends Config> flowProcess,
                           Fields fields)

#### retrieveSinkFields

    public Fields retrieveSinkFields(FlowProcess<? extends Config> flowProcess)

A hook for allowing a Scheme to lazily retrieve its sink fields.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  the found Fields

#### presentSinkFields

    public void presentSinkFields(FlowProcess<? extends Config> flowProcess,
                         Fields fields)

#### resolveIncomingOperationArgumentFields

    public Fields resolveIncomingOperationArgumentFields(Scope incomingScope)

Description copied from interface: `ScopedElement`
Method resolveIncomingOperationArgumentFields returns the Fields outgoing from the previous FlowElement that are consumable by this FlowElement when preparing Operation arguments.

Specified by:
  `resolveIncomingOperationArgumentFields` in interface `ScopedElement`
Parameters:
  `incomingScope` - of type Scope
Returns:
  Fields

#### resolveIncomingOperationPassThroughFields

    public Fields resolveIncomingOperationPassThroughFields(Scope incomingScope)

Description copied from interface: `ScopedElement`
Method resolveIncomingOperationPassThroughFields returns the Fields outgoing from the previous FlowElement that are consumable by this FlowElement when preparing the Pipe outgoing tuple.

Specified by:
  `resolveIncomingOperationPassThroughFields` in interface `ScopedElement`
Parameters:
  `incomingScope` - of type Scope
Returns:
  Fields

#### getFullIdentifier

    public java.lang.String getFullIdentifier(FlowProcess<? extends Config> flowProcess)

Method getFullIdentifier returns a fully qualified resource identifier.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  String

#### getFullIdentifier

    public java.lang.String getFullIdentifier(Config conf)

Method getFullIdentifier returns a fully qualified resource identifier.

Parameters:
  `conf` - of type Config
Returns:
  String

#### createResource

    public boolean createResource(FlowProcess<? extends Config> flowProcess)
                           throws java.io.IOException

Method createResource creates the underlying resource.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  boolean
Throws:
  `java.io.IOException` - when there is an error making directories

#### createResource

    public abstract boolean createResource(Config conf)
                                    throws java.io.IOException

Method createResource creates the underlying resource.

Parameters:
  `conf` - of type Config
Returns:
  boolean
Throws:
  `java.io.IOException` - when there is an error making directories

#### deleteResource

    public boolean deleteResource(FlowProcess<? extends Config> flowProcess)
                           throws java.io.IOException

Method deleteResource deletes the resource represented by this instance.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  boolean
Throws:
  `java.io.IOException` - when the resource cannot be deleted

#### deleteResource

    public abstract boolean deleteResource(Config conf)
                                    throws java.io.IOException

Method deleteResource deletes the resource represented by this instance.

Parameters:
  `conf` - of type Config
Returns:
  boolean
Throws:
  `java.io.IOException` - when the resource cannot be deleted

#### prepareResourceForRead

    public boolean prepareResourceForRead(Config conf)
                                   throws java.io.IOException

Method prepareResourceForRead allows the underlying resource to be notified when reading will begin.

This method will be called client side so that any remote or external resources can be initialized.

If this method returns `false`, an exception will be thrown halting the current Flow.

In most cases, resource initialization should happen in the `openForRead(FlowProcess, Object)` method.

This allows for initialization of cluster side resources, like a JDBC driver used to read data from a database, that cannot be passed client to cluster.

Parameters:
  `conf` - of type Config
Returns:
  returns true if successful
Throws:
  `java.io.IOException`

#### prepareResourceForWrite

    public boolean prepareResourceForWrite(Config conf)
                                    throws java.io.IOException

Method prepareResourceForWrite allows the underlying resource to be notified when writing will begin.

This method will be called once client side so that any remote or external resources can be initialized.

If this method returns `false`, an exception will be thrown halting the current Flow.

In most cases, resource initialization should happen in the `openForWrite(FlowProcess, Object)` method.

This allows for initialization of cluster side resources, like a JDBC driver used to write data to a database, that cannot be passed client to cluster.

In the above JDBC example, overriding this method will allow for testing for the existence of and/or creating a remote table used by all individual cluster side tasks.

Parameters:
  `conf` - of type Config
Returns:
  returns true if successful
Throws:
  `java.io.IOException`

#### commitResource

    public boolean commitResource(Config conf)
                           throws java.io.IOException

Method commitResource allows the underlying resource to be notified when all write processing is successful so that any additional cleanup or processing may be completed.

See `rollbackResource(Object)` to handle cleanup in the face of failures.

This method is invoked once client side and not in the cluster, if any.

If other sink Tap instance in a given Flow fail on commitResource after called on this instance, rollbackResource will not be called.

Parameters:
  `conf` - of type Config
Returns:
  returns true if successful
Throws:
  `java.io.IOException`

#### rollbackResource

    public boolean rollbackResource(Config conf)
                             throws java.io.IOException

Method rollbackResource allows the underlying resource to be notified when any write processing has failed or was stopped so that any cleanup may be started.

See `commitResource(Object)` to handle cleanup when the write has successfully completed.

This method is invoked once client side and not in the cluster, if any.

Parameters:
  `conf` - of type Config
Returns:
  returns true if successful
Throws:
  `java.io.IOException`

#### resourceExists

    public boolean resourceExists(FlowProcess<? extends Config> flowProcess)
                           throws java.io.IOException

Method resourceExists returns true if the path represented by this instance exists.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  true if the underlying resource already exists
Throws:
  `java.io.IOException` - when the status cannot be determined

#### resourceExists

    public abstract boolean resourceExists(Config conf)
                                    throws java.io.IOException

Method resourceExists returns true if the path represented by this instance exists.

Parameters:
  `conf` - of type Config
Returns:
  true if the underlying resource already exists
Throws:
  `java.io.IOException` - when the status cannot be determined

#### getModifiedTime

    public long getModifiedTime(FlowProcess<? extends Config> flowProcess)
                         throws java.io.IOException

Method getModifiedTime returns the date this resource was last modified.

Parameters:
  `flowProcess` - of type FlowProcess
Returns:
  The date this resource was last modified.
Throws:
  `java.io.IOException`

#### getModifiedTime

    public abstract long getModifiedTime(Config conf)
                                  throws java.io.IOException

Method getModifiedTime returns the date this resource was last modified.

Parameters:
  `conf` - of type Config
Returns:
  The date this resource was last modified.
Throws:
  `java.io.IOException`

#### getSinkMode

    public SinkMode getSinkMode()

Method getSinkMode returns the `SinkMode` }of this Tap object.

Returns:
  the sinkMode (type SinkMode) of this Tap object.

#### isKeep

    public boolean isKeep()

Method isKeep indicates whether the resource represented by this instance should be kept if it already exists when the Flow is started.

Returns:
  boolean

#### isReplace

    public boolean isReplace()

Method isReplace indicates whether the resource represented by this instance should be deleted if it already exists when the Flow is started.

Returns:
  boolean

#### isUpdate

    public boolean isUpdate()

Method isUpdate indicates whether the resource represented by this instance should be updated if it already exists. Otherwise a new resource will be created, via `createResource(Object)`, when the Flow is started.

Returns:
  boolean

#### isSink

    public boolean isSink()

Method isSink returns true if this Tap instance can be used as a sink.

Returns:
  boolean

#### isSource

    public boolean isSource()

Method isSource returns true if this Tap instance can be used as a source.

Returns:
  boolean

#### isTemporary

    public boolean isTemporary()

Method isTemporary returns true if this Tap is temporary (used for intermediate results).

Returns:
  the temporary (type boolean) of this Tap object.

#### getConfigDef

    public ConfigDef getConfigDef()

Returns a `ConfigDef` instance that allows for local properties to be set and made available via a resulting `FlowProcess` instance when the tap is invoked.

Any properties set on the configDef will not show up in any `Flow` or `FlowStep` process level configuration, but will override any of those values as seen by the current Tap instance method call where a FlowProcess is provided except for the `sourceConfInit(cascading.flow.FlowProcess, Object)` and `sinkConfInit(cascading.flow.FlowProcess, Object)` methods.

That is, the `*confInit` methods are called before any ConfigDef is applied, so any values placed into a ConfigDef instance will not be visible to them.

Specified by:
  `getConfigDef` in interface `ScopedElement`
Returns:
  an instance of ConfigDef

#### hasConfigDef

    public boolean hasConfigDef()

Returns `true` if there are properties in the configDef instance.

Specified by:
  `hasConfigDef` in interface `ScopedElement`
Returns:
  true if there are configDef properties

#### getNodeConfigDef

    public ConfigDef getNodeConfigDef()

Returns a `ConfigDef` instance that allows for process level properties to be set and made available via a resulting `FlowProcess` instance when the tap is invoked.

Any properties set on the nodeConfigDef will not show up in any Flow configuration, but will show up in the current process `FlowNode` (in Apache Tez the Vertex configuration). Any value set in the nodeConfigDef will be overridden by the pipe local `#getConfigDef` instance. Use this method to tweak properties in the process node this tap instance is planned into.

Specified by:
  `getNodeConfigDef` in interface `ScopedElement`
Returns:
  an instance of ConfigDef

#### hasNodeConfigDef

    public boolean hasNodeConfigDef()

Returns `true` if there are properties in the nodeConfigDef instance.

Specified by:
  `hasNodeConfigDef` in interface `ScopedElement`
Returns:
  true if there are nodeConfigDef properties

#### getStepConfigDef

    public ConfigDef getStepConfigDef()

Returns a `ConfigDef` instance that allows for process level properties to be set and made available via a resulting `FlowProcess` instance when the tap is invoked.

Any properties set on the stepConfigDef will not show up in any Flow configuration, but will show up in the current process `FlowStep` (in Hadoop the MapReduce jobconf). Any value set in the stepConfigDef will be overridden by the tap local `#getConfigDef` instance. Use this method to tweak properties in the process step this tap instance is planned into.

Note the `*confInit` methods are called before any ConfigDef is applied, so any values placed into a ConfigDef instance will not be visible to them.

Specified by:
  `getStepConfigDef` in interface `ScopedElement`
Returns:
  an instance of ConfigDef

#### hasStepConfigDef

    public boolean hasStepConfigDef()

Returns `true` if there are properties in the stepConfigDef instance.

Specified by:
  `hasStepConfigDef` in interface `ScopedElement`
Returns:
  true if there are stepConfigDef properties

#### equals

    public boolean equals(java.lang.Object object)

Overrides:
  `equals` in class `java.lang.Object`

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `java.lang.Object`

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`