Weka分布式实验

File协议
startRemoteEngine.sh

java -Xmx1024m -classpath  ../db_drivers/mysql-connector-java-5.1.46.jar;remoteEngine.jar;../weka3.7.13.jar -Djava.security.policy=remote.policy weka.experiment.RemoteEngine

在Ubuntu上执行报错:

./startRemoteEngine.sh: line 1: remoteEngine.jar: command not found
./startRemoteEngine.sh: line 1: /home/ubuntu/WorkSpace/experiment/weka3.7.13.jar: cannot execute binary file: Exec format error

修改:
./remoteEngine.jar
修改weka3.7.13的执行权限:chmod +x weka3.7.13.jar(不管用)
-claspath在windows环境下用分号分隔,在Linux环境下用冒号分隔后可以运行,但Linux下出现如下问题:

ubuntu@VM-16-184-ubuntu:~/WorkSpace/experiment/remote_engine$ ./startRemoteEngine.sh 
Host name : localhost.localdomain
RemoteEngine exception: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
    java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
    java.security.AccessController.checkPermission(AccessController.java:884)
    java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)
    java.net.Socket.connect(Socket.java:584)
    java.net.Socket.connect(Socket.java:538)
    java.net.Socket.<init>(Socket.java:434)
    java.net.Socket.<init>(Socket.java:211)
    sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148)
    sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    sun.rmi.server.UnicastRef.newCall(UnicastRef.java:338)
    sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:147)
    java.rmi.Naming.rebind(Naming.java:177)
    weka.experiment.RemoteEngine.main(RemoteEngine.java:360)

    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)
    at java.net.Socket.connect(Socket.java:584)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:338)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:147)
    at java.rmi.Naming.rebind(Naming.java:177)
    at weka.experiment.RemoteEngine.main(RemoteEngine.java:360)

原因是remote.policy文件没有起作用,修改为-Djava.security.policy=./remote.policy
关键在于Linux下的当前文件夹不可省略./ ,而在Windows下当前文件夹可以省略./

运行实验时出错:

15:59:07: Started
15:59:09: Starting dataset :breast-cancer.arff on host 119.29.23.188
15:59:10: Connection to 119.29.23.188 failed. Scheduling dataset :breast-cancer.arff for execution on another host.
15:59:10: Experiment aborted! All connections to remote hosts failed.

参考Java RMI:rmi Connection refused to host: 127.0.0.1异常解决后在startRemoteEngine.sh(Linux端)添加:-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx

最终执行成功!

注意每次实验前

drop database weka;
create database weka;
commit;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值