前几天在javaeye的news频道看到这个新闻
JPPF 1.7发布:网格并行处理框架,因为公司也在使用hadoop做些东西(其中也遇到一些问题,感觉文档太少)。所以想看看这个东西跟hadoop的区别。
从
http://sourceforge.net/project/showfiles.php?group_id=135654&package_id=149022下载jppf-driver-bin-1.7-0599-20081217.zip,jppf-node-bin-1.7-0599-20081217.zip和JPPFQuickStart-1.7.0599-20081217.zip。
我们有2台linux机子lab1和lab4,还有一台windows机子lab5.我们把lab1做server,lab4和lab5做node。
在运行之前首先确定有安装ant(下载ant解压,设置好path)。还有需要把端口暴露出来。 执行
sudo vi /etc/sysconfig/iptables
加上以下的代码:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 11111 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 11112 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 11113 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 12001 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 13001 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 11198 -j ACCEPT
然后restart network
sudo /etc/init.d/network restart
设置启动server(好像jppf叫server为drvier),在lab1上解压jppf-driver-bin-1.7-0599-20081217.zip,然后运行
ant run.driver
如果你看到一下信息则说明server已经跑起来了。
引用
Buildfile: build.xml
run.driver:
[echo] starting the JPPF driver
[java] Class Server initialized - listening on port 11111
[java] Client Server initialized - listening on port 11112
[java] Tasks Server initialized - listening on port 11113
[java] JPPF Driver management initialized
[java] JPPF Driver initialization complete
在lab2和lab5上解压jppf-node-bin-1.7-0599-20081217.zip,找到config/jppf-node.properties文件,把jppf.server.host参数设成你的server的ip地址。然后运行
ant run.node
,出现下面的信息则说明node已经启动并且连接上sever了。
Buildfile: build.xml
run.node:
[java] JPPFClassLoader.init(): attempting connection to the class server
[java] JPPFClassLoader.init(): Reconnected to the class server
[java] PeerNode.init(): Attempting connection to the JPPF driver
[java] PeerNode.init(): Reconnected to the JPPF driver
[java] Node sucessfully initialized
在windows上解压JPPFQuickStart-1.7.0599-20081217.zip,这是一个eclipse项目, 你可以用eclipse导入,修改config/jppf-client.properties文件的HelloServer.jppf.server.host为lab1的ip,jppf.local.execution.enabled为false禁止本地执行。 把org.jppf.helloworld.HelloWorldRunner这个类中间注释的代码去掉。 然后执行runHelloWorld.cmd, 这时就能看到输出了
[client: driver-1 (192.168.1.221:11198)] ClassServerDelegate.init(): Attempting connection to the class server
[client: driver-1 (192.168.1.221:11198)] ClassServerDelegate.init(): Reconnected to the class server
[client: driver-1 (192.168.1.221:11198)] : Attempting connection to the JPPF task server
[client: driver-1 (192.168.1.221:11198)] : Reconnected to the JPPF task server
********** Results: **********
Hello, World
Hello, World (annotated, hello message, 1)
Hello, World (annotated static, hello message, 2)
Hello, World (annotated constructor, hello message, 3)
java.lang.IllegalAccessException: Class org.jppf.client.taskwrapper.PrivilegedMethodAction can not access a member of class org.jppf.helloworld.HelloWorldPojo with modifiers "protected"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.reflect.Method.invoke(Method.java:588)
at org.jppf.client.taskwrapper.PrivilegedMethodAction.run(PrivilegedMethodAction.java:59)
at java.security.AccessController.doPrivileged(Native Method)
at org.jppf.client.taskwrapper.PojoTaskWrapper.execute(PojoTaskWrapper.java:100)
at org.jppf.client.JPPFAnnotatedTask.run(JPPFAnnotatedTask.java:72)
at org.jppf.server.node.NodeTaskWrapper.run(NodeTaskWrapper.java:84)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Hello, World (pojo static, hello message, 5)
Hello, World (pojo constructor, hello message, 6)
null
Hello, World (callable)
要注意的是 如果你的java.exe放在有空格的目录中时,需要用引号括起JAVA_HOME.
结论:JPPF还是非常容易使用的(相对于hadoop来说)。 hadoop还是比较抽象的。 不过hadoop还有分布式文件系统这个东西。 不过感觉目前hadoop比JPPF成熟。 JPPF没什么成功案例。 在它官网列出2个例子。
http://www.jppf.org/testimonials.php
JPPF还是不错的一个东西。 准备用它来做些事情。
今天发现一个问题jppf client默认是使用广播的形式找server,如果你的server没有使用广播的形式 你需要改jppf-client.properties, 默认是true的。
jppf.discovery.enabled = false