Apache Apex Command Line Interface
Apex CLI, the Apache Apex command line interface, can be used to launch, monitor, and manage
Apache Apex applications.
It provides a developer friendly way of interacting with Apache Apex platform.
Another advantage of Apex CLI is to provide scope, by connecting and executing commands in a context
of specific application. Apex CLI enables easy integration with existing enterprise toolset for automated application monitoring
and management. Currently the following high level tasks are supported.
- Launch or kill applications
- View system metrics including load, throughput, latency, etc.
- Start or stop tuple recording
- Read operator, stream, port properties and attributes
- Write to operator properties
- Dynamically change the application logical plan
- Create custom macros
Apex CLI Commands
Apex CLI can be launched by running following command:
apex
Help on all commands is available via “help” command in the CLI
Global Commands
GLOBAL COMMANDS EXCEPT WHEN CHANGING LOGICAL PLAN:
alias alias-name command
Create a command alias
begin-macro name
Begin Macro Definition ($1...$9 to access parameters and type 'end' to end the definition)
connect app-id
Connect to an app
dump-properties-file out-file jar-file class-name
Dump the properties file of an app class
echo [arg ...]
Echo the arguments
exit
Exit the CLI
get-app-info app-id
Get the information of an app
get-app-package-info app-package-file
Get info on the app package file
get-app-package-operator-properties app-package-file operator-class
Get operator properties within the given app package
get-app-package-operators [options] app-package-file [search-term]
Get operators within the given app package
Options:
-parent Specify the parent class for the operators
get-config-parameter [parameter-name]
Get the configuration parameter
get-jar-operator-classes [options] jar-files-comma-separated [search-term]
List operators in a jar list
Options:
-parent Specify the parent class for the operators
get-jar-operator-properties jar-files-comma-separated operator-class-name
List properties in specified operator
help [command]
Show help
kill-app app-id [app-id ...]
Kill an app
launch [options] jar-file/json-file/properties-file/app-package-file [matching-app-name]
Launch an app
Options:
-apconf <app package configuration file> Specify an application
configuration file
within the app
package if launching
an app package.
-archives <comma separated list of archives> Specify comma
separated archives
to be unarchived on
the compute machines.
-conf <configuration file> Specify an
application
configuration file.
-D <property=value> Use value for given
property.
-exactMatch Only consider
applications with
exact app name
-files <comma separated list of files> Specify comma
separated files to
be copied on the
compute machines.
-ignorepom Do not run maven to
find the dependency
-libjars <comma separated list of libjars> Specify comma
separated jar files
or other resource
files to include in
the classpath.
-local Run application in
local mode.
-originalAppId <application id> Specify original
application
identifier for restart.
-queue <queue name> Specify the queue to
launch the application
list-application-attributes
Lists the application attributes
list-apps [pattern]
List applications
list-operator-attributes
Lists the operator attributes
list-port-attributes
Lists the port attributes
set-pager on/off
Set the pager program for output
show-logical-plan [options] jar-file/app-package-file [class-name]
List apps in a jar or show logical plan of an app class
Options:
-exactMatch Only consider exact match
for app name
-ignorepom Do not run maven to find
the dependency
-libjars <comma separated list of jars> Specify comma separated
jar/resource files to
include in the classpath.
shutdown-app app-id [app-id ...]
Shutdown an app
source file
Execute the commands in a file
Commands after connecting to an application
COMMANDS WHEN CONNECTED TO AN APP (via connect <appid>) EXCEPT WHEN CHANGING LOGICAL PLAN:
begin-logical-plan-change
Begin Logical Plan Change
dump-properties-file out-file [jar-file] [class-name]
Dump the properties file of an app class
get-app-attributes [attribute-name]
Get attributes of the connected app
get-app-info [app-id]
Get the information of an app
get-operator-attributes operator-name [attribute-name]
Get attributes of an operator
get-operator-properties operator-name [property-name]
Get properties of a logical operator
get-physical-operator-properties [options] operator-id
Get properties of a physical operator
Options:
-propertyName <property name> The name of the property whose
value needs to be retrieved
-waitTime <wait time> How long to wait to get the result
get-port-attributes operator-name port-name [attribute-name]
Get attributes of a port
get-recording-info [operator-id] [start-time]
Get tuple recording info
kill-app [app-id ...]
Kill an app
kill-container container-id [container-id ...]
Kill a container
list-containers
List containers
list-operators [pattern]
List operators
set-operator-property operator-name property-name property-value
Set a property of an operator
set-physical-operator-property operator-id property-name property-value
Set a property of an operator
show-logical-plan [options] [jar-file/app-package-file] [class-name]
Show logical plan of an app class
Options:
-exactMatch Only consider exact match
for app name
-ignorepom Do not run maven to find
the dependency
-libjars <comma separated list of jars> Specify comma separated
jar/resource files to
include in the classpath.
show-physical-plan
Show physical plan
shutdown-app [app-id ...]
Shutdown an app
start-recording operator-id [port-name] [num-windows]
Start recording
stop-recording operator-id [port-name]
Stop recording
wait timeout
Wait for completion of current application
get-container-stacktrace container-id
Shows the stack trace of all the threads in the container
Commands when changing the logical plan
COMMANDS WHEN CHANGING LOGICAL PLAN (via begin-logical-plan-change):
abort
Abort the plan change
add-stream-sink stream-name to-operator-name to-port-name
Add a sink to an existing stream
create-operator operator-name class-name
Create an operator
create-stream stream-name from-operator-name from-port-name to-operator-name to-port-name
Create a stream
help [command]
Show help
remove-operator operator-name
Remove an operator
remove-stream stream-name
Remove a stream
set-operator-attribute operator-name attr-name attr-value
Set an attribute of an operator
set-operator-property operator-name property-name property-value
Set a property of an operator
set-port-attribute operator-name port-name attr-name attr-value
Set an attribute of a port
set-stream-attribute stream-name attr-name attr-value
Set an attribute of a stream
show-queue
Show the queue of the plan change
submit
Submit the plan change
Examples
An example of defining a custom macro. The macro updates a running application by inserting a new operator. It takes three parameters and executes a logical plan changes.
apex> begin-macro add-console-output
macro> begin-logical-plan-change
macro> create-operator $1 com.datatorrent.lib.io.ConsoleOutputOperator
macro> create-stream stream_$1 $2 $3 $1 in
macro> submit
Then execute the add-console-output
macro like this
apex> add-console-output xyz opername portname
This macro then expands to run the following command
begin-logical-plan-change
create-operator xyz com.datatorrent.lib.io.ConsoleOutputOperator
create-stream stream_xyz opername portname xyz in
submit
Note: To perform runtime logical plan changes, like ability to add new operators, they must be part of the jar files that were deployed at application launch time.