JPPF(Java Parallel Processing Framework )尝鲜

前几天在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

你可能感兴趣的:(java,eclipse,PHP,hadoop,ant)