blob: 69975c702afb5bf07f4e683979dcbad36dbbc9c3 [file] [log] [blame]
_____ _ _
/ ____|| || |
| (___ | || |_
\___ \ |__ _|
____) | | |
|_____/ |_|
You just created a new S4 project in <appDir>!
It follows a maven-like structure:
- the build file is at the root of the project
- sources are in src/main/java
We use gradle for building this project.
To build the project:
- "./gradlew" (from the root of the project, this calls the gradle script from the s4 installation)
An "s4" script has been created at the root of the project's directory. It calls the s4 script from your S4 installation.
To execute the application in a new S4 cluster (see the S4 wiki for more information):
1. start a ZooKeeper instance "./s4 zkServer" (./s4 zkServer -help provides a list of options)
2. define a logical cluster for your application "./s4 newCluster -cluster=<nameOfTheCluster> -nbTasks=<number of partitions> -flp=<a port number for the first node, other nodes use an increment on this initial port>"
3. start a node and attach it to the cluster "./s4 node -cluster=<nameOfTheCluster>"
4. package the application "./s4 s4r -a=<app class> -b=`pwd`/build.gradle <package name>
5. deploy (configure) the application "./s4 deploy -s4r=`pwd`/build/libs/<package name>.s4r -c=<nameOfTheCluster> -appName=<app name in Zookeeper>"
6. check the status of the S4 cluster "s4 status"
If you want to inject events from application 2 into application 1 on cluster 1:
- application 1 must define an input stream with a name (say: stream1)
- application 2 must define an output stream with the same name (stream1)
If you want to use a simple adapter process, listening to an external source, converting incoming data into S4 events, and sending that to S4 apps, you can define
your own app that extends the AdapterApp class, for instance:
./s4 deploy -appClass=hello.HelloInputAdapter -cluster=c2 -appName=adapter
Then in order to start a node and automatically using the classpath of the current project, use the "s4 adapter" command:
- ./s4 adapter -cluster=c2