S4准备工作:
1:安装jdk,配置环境变量
2:安装gradle,配置环境变量
export GRADLE_HOME=/opt/gradle-1.4;export GRADLE_HOME
export PATH=$GRADLE_HOME/bin:$PATH
注:最好在linux下解压,不然会出现权限问题
3:linux用git clone git://git.apache.org/incubator-s4.git命令下载s4-0.6.0
用gradle编译
S4跑起:
1.编译并安装S4,在S4目录incubator-s4下执行命令:
S4:incubator-s4$ ./gradlew install -DskipTests
2:build启动脚本
S4:incubator-s4$ ./gradlew s4-tools:installApp
3:设定程序目录,创建myApp
S4:incubator-s4$ ./s4 newApp myApp -parentDir=/tmp
(注:若Permission denied,则给对应的程序附上权限,
如s4:chmod +x s4 查询当前目录下的权限:ll
drwxr-xr-x 2 root root 4096 Mar 12 19:09 ./
drwxr-xr-x 4 root root 4096 Mar 12 19:09 ../
-rwxr-xr-x 1 root root 6282 Dec 11 19:01 s4-tools*
-rw-r--r-- 1 root root 3667 Dec 11 19:01 s4-tools.bat)
4. 启动ZooKeeper并启动一个cluster命名为cluster1
S4:incubator-s4$ ./s4 zkServer -clusters=c=cluster1:flp=12000:nbTasks=2 -clean
5. 启动2个node PE
S4:myApp$ ./s4 node -c=cluster1
6. 打包成s4r,并部署到集群cluster1
./s4 s4r -a=hello.HelloApp -b=`pwd`/build.gradle myApp
./s4 deploy -s4r=`pwd`/build/libs/myApp.s4r -c=cluster1 -appName=myApp
注:有可能用到:sed -i 's/\r$//' build.gradle 改变文件系统类型
7. 查看s4集群当前状态
./s4 status
8. 启动另一个集群命名为cluster2,用于运行adapter给cluster1发送消息
S4:myApp$ ./s4 newCluster -c=cluster2 -nbTasks=1 -flp=13000
9. 将adapter部署到cluster2
./s4 deploy -appClass=hello.HelloInputAdapter -p=s4.adapter.output.stream=names -c=cluster2 -appName=adapter
10. 启动1个adapter PE
./s4 adapter -c=cluster2
11. 发送消息到adapter,adapter将收到的消息发给集群cluster1
S4:~$ echo "Bob" | nc localhost 15000
注意:每次部署需指明app的路径
附:
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示。该字段中的首字符(-)指定该文件的类型,本例中它是一个常规文件。其它可能的首字符还有:
“d”目录
“l”符号链接
“c”字符专门设备文件
“b”块专门设备文件
“p”先进先出
“s”套接字
三个三元组
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
该字段的其余部分由三个三元组字符组成。第一个三元字符组代表文件所有者的权限,第二个代表文件的组的权限,第三个代表所有其他用户的权限:
"rwx"
"r-x"
"r-x"
上面,r 表示允许读(查看文件中的数据),w 表示允许写(修改文件以及删除),x 表示允许“执行”(运行程序)。将所有这些信息放在一起,我们可以发现每个人都能够读该文件的内容和执行该文件,但是只允许文件所有者(root 用户)可以以任何方式修改该文件。因此,虽然一般用户可以复制该文件,但是只允许 root 用户更新或删除它。
s4r archive生成:app文件夹 lib文件夹 META-INF文件夹三个打包 app文件夹中放要打的jar
多目录按manifest打jar:jar -cvfm myApp.jar META-INF/MANIFEST.MF app/ lib/