用matlab代码实现一些复杂算法比较容易,而hadoop又比较适合分布式处理数据,有没有办法把这两者的优点结合起来呢,答案当然是肯定的。百度文库上有篇文挡讲到了实现方法,(文库链接)但是中间有些坑没有讲到。
其中充当桥梁的是matlab将算法打成的jar包。
本文的实现是在ubuntu14.04 64位基础上实现的。matlab是2015a for linux 64位,hadoop版本2.7.0 以及matlab对应的MCR版本。
首先要填的坑就是java版本的问题,不要使用openjdk,使用oracle公司的java版本,而且要保证matlab的jar编译器和hadoop都能正常工作,采用jdk1.7版本。否则matlab的jar编译器不会正常工作。
第二个坑是在root下无法运行javac、java等命令的问题,这个要进行如下操作手动替换默认的jdk的版本:
sudo update-alternatives --install /usr/bin/java java /usr/share/java/jdk1.7.0_60/bin//java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/share/java/jdk1.7.0_60/bin/javac 300
sudo update-alternatives --install /usr/bin/javah javah /usr/share/java/jdk1.7.0_60/bin/javah 300
sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/share/java/jdk1.7.0_60/bin/javadoc 300
sudo update-alternatives --install /usr/bin/jar jar /usr/share/java/jdk1.7.0_60/bin//jar 300
经过这番修改,matlab就可以正常编译jar包了。
还有就是
将环境变量写到~./bashrc,不要写到别的地方,比如/etc/profile,否则会造成系统重启死机。
其他的就照百度文库上的操作进行就行了。
因为自己设置已经过了好长时间了,有些具体的细节没有仔细写,如果大家有疑问的,可以留言问我。
补:
ubuntu14.04安装matlab2015aMCR后设置LD_LIBRARY_PATH后出现警告,version 没有找到,
ssh: /usr/local/MATLAB/MATLAB_Runtime/v85/bin/glnxa64/libcrypto.so.1.0.0: no version information available
修改方法:在LD_LIBRARY_PATH里添加有version信息的库文件路径如下,注意加在最前面:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib/x86_64-linux-gnu:/usr/local/MATLAB/MATLAB_Runtime/v85/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v85/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v85/sys/os/glnxa64
红色部分为新加的路径,加入以后,警告消失