@ThreadSafe public interface PipelineOptions extends HasDisplayData
PipelineOptions
to create custom configuration options specific to your Pipeline,
for both local execution and execution via a PipelineRunner.
PipelineOptions and their subinterfaces represent a collection of properties
which can be manipulated in a type safe manner. PipelineOptions is backed by a
dynamic Proxy which allows for type safe manipulation of properties in an extensible
fashion through plain old Java interfaces.
PipelineOptions can be created with PipelineOptionsFactory.create()
and PipelineOptionsFactory.as(Class). They can be created
from command-line arguments with PipelineOptionsFactory.fromArgs(String[]).
They can be converted to another type by invoking as(Class) and
can be accessed from within a DoFn by invoking
DoFn.Context.getPipelineOptions().
For example:
// The most common way to construct PipelineOptions is via command-line argument parsing:
public static void main(String[] args) {
// Will parse the arguments passed into the application and construct a PipelineOptions
// Note that --help will print registered options, and --help=PipelineOptionsClassName
// will print out usage for the specific class.
PipelineOptions options =
PipelineOptionsFactory.fromArgs(args).create();
Pipeline p = Pipeline.create(options);
...
p.run();
}
// To create options for the DirectRunner:
DirectOptions directRunnerOptions =
PipelineOptionsFactory.as(DirectOptions.class);
// To cast from one type to another using the as(Class) method:
DataflowPipelineOptions dataflowPipelineOptions =
directPipelineOptions.as(DataflowPipelineOptions.class);
// Options for the same property are shared between types
// The statement below will print out "true"
System.out.println(dataflowPipelineOptions.isStreaming());
// Prints out registered options.
PipelineOptionsFactory.printHelp(System.out);
// Prints out options which are available to be set on DataflowPipelineOptions
PipelineOptionsFactory.printHelp(System.out, DataflowPipelineOptions.class);
PipelineOptions is the way for you to make configuration
options available for both local execution and execution via a PipelineRunner.
By having PipelineOptionsFactory as your command-line interpreter, you will provide
a standardized way for users to interact with your application via the command-line.
To define your own PipelineOptions, you create an interface which
extends PipelineOptions and define getter/setter pairs. These
getter/setter pairs define a collection of
JavaBean properties.
For example:
// Creates a user defined property called "myProperty"
public interface MyOptions extends PipelineOptions {
String getMyProperty();
void setMyProperty(String value);
}
Note: Please see the section on Registration below when using custom property types.
as(Class), a property must conform to the following set of restrictions:
PipelineOptions.
PipelineOptions must have a
getter and setter method.
PipelineOptions must be composable with every interface
part registered with the PipelineOptionsFactory.
@JsonIgnore.
@JsonIgnore, then all getters for
this property must be annotated with @JsonIgnore.
@Description can be used to annotate an interface or a getter
with useful information which is output when --help
is invoked via PipelineOptionsFactory.fromArgs(String[]).
@Default represents a set of annotations that can be used to annotate getter
properties on PipelineOptions with information representing the default value to be
returned if no value is specified. Any default implementation (using the default keyword)
is ignored.
@Hidden hides an option from being listed when --help
is invoked via PipelineOptionsFactory.fromArgs(String[]).
@Validation represents a set of annotations that can be used to annotate
getter properties on PipelineOptions with information representing the validation
criteria to be used when validating with the PipelineOptionsValidator. Validation
will be performed if during construction of the PipelineOptions,
PipelineOptionsFactory.withValidation() is invoked.
@JsonIgnore is used to prevent a property from being serialized and
available during execution of DoFn. See the Serialization section below for more
details.
PipelineOptions by an application guarantees that the
PipelineOptions is composable during execution of their Pipeline and
meets the restrictions listed above or will fail during registration. Registration
also lists the registered PipelineOptions when --help
is invoked via PipelineOptionsFactory.fromArgs(String[]).
Registration can be performed by invoking PipelineOptionsFactory.register(java.lang.Class<? extends org.apache.beam.sdk.options.PipelineOptions>) within
a users application or via automatic registration by creating a ServiceLoader entry
and a concrete implementation of the PipelineOptionsRegistrar interface.
It is optional but recommended to use one of the many build time tools such as
AutoService to generate the necessary META-INF files automatically.
A list of registered options can be fetched from
PipelineOptionsFactory.getRegisteredOptions().
PipelineRunners require support for options to be serialized. Each property
within PipelineOptions must be able to be serialized using Jackson's
ObjectMapper or the getter method for the property annotated with
@JsonIgnore.
Jackson supports serialization of many types and supports a useful set of
annotations to aid in
serialization of custom types. We point you to the public
Jackson documentation when attempting
to add serialization support for your custom types. See GoogleApiDebugOptions.GoogleApiTracer for an
example using the Jackson annotations to serialize and deserialize a custom type.
Note: It is an error to have the same property available in multiple interfaces with only
some of them being annotated with @JsonIgnore. It is also an error to mark a
setter for a property with @JsonIgnore.
| Modifier and Type | Interface and Description |
|---|---|
static class |
PipelineOptions.CheckEnabled
Enumeration of the possible states for a given check.
|
static class |
PipelineOptions.DirectRunner
A
DefaultValueFactory that obtains the class of the DirectRunner if it exists
on the classpath, and throws an exception otherwise. |
| Modifier and Type | Method and Description |
|---|---|
<T extends PipelineOptions> |
as(Class<T> kls)
Transforms this object into an object of type
<T> saving each property
that has been manipulated. |
<T extends PipelineOptions> |
cloneAs(Class<T> kls)
Makes a deep clone of this object, and transforms the cloned object into the specified
type
kls. |
Class<? extends PipelineRunner<?>> |
getRunner()
The pipeline runner that will be used to execute the pipeline.
|
PipelineOptions.CheckEnabled |
getStableUniqueNames()
Whether to check for stable unique names on each transform.
|
String |
getTempLocation()
A pipeline level default location for storing temporary files.
|
void |
setRunner(Class<? extends PipelineRunner<?>> kls) |
void |
setStableUniqueNames(PipelineOptions.CheckEnabled enabled) |
void |
setTempLocation(String value) |
populateDisplayData<T extends PipelineOptions> T as(Class<T> kls)
<T> saving each property
that has been manipulated. <T> must extend PipelineOptions.
If <T> is not registered with the PipelineOptionsFactory, then we
attempt to verify that <T> is composable with every interface that this
instance of the PipelineOptions has seen.
kls - The class of the type to transform to.<T extends PipelineOptions> T cloneAs(Class<T> kls)
kls. See as(java.lang.Class<T>) for more information about the conversion.
Properties that are marked with @JsonIgnore will not be cloned.
@Validation.Required @Default.InstanceFactory(value=PipelineOptions.DirectRunner.class) Class<? extends PipelineRunner<?>> getRunner()
void setRunner(Class<? extends PipelineRunner<?>> kls)
@Validation.Required @Default.Enum(value="WARNING") PipelineOptions.CheckEnabled getStableUniqueNames()
void setStableUniqueNames(PipelineOptions.CheckEnabled enabled)
String getTempLocation()
This can be a path of any file system.
getTempLocation() can be used as a default location in other
PipelineOptions.
If it is unset, PipelineRunner can override it.
void setTempLocation(String value)