用mapreduce框架运行matlab示例程序,官网https://ww2.mathworks.cn/help/compiler/hadoop/example-on-running-a-standalone-matlab-mapreduce-application.html
按照官网的步骤,基本上可以成功,但是运行的时候还是碰到了一些问题。
- 需要注意的是,HADOOP集群中的所有服务器都需要安装mcr并配置环境变量
- 然后,把需要处理的数据文件上传到HADOOP的文件系统HDFS上,数据文件在matlab安装路径/toolbox/matlab/demos下的airlinesmall.csv,并且把文件夹下的maxArrivalDelayMapper.m和maxArrivalDelayReducer.m文件都拷到matlab的工作台下。
- 文件上传hdfs的具体教程:https://www.cnblogs.com/qingyunzong/p/8496127.html#_label4
- 我在HDFS上新建了/testMR/input文件夹./hadoop fs -mkdir /testMR/input,然后把文件put上去./hadoop fs -put /documents/Matlab/toolbox/matlab/demos/airlinesmall.csv /testMR/input,红色部分为matlab安装文件夹,根据自己的安装路径修改,并且新建/testMR/output文件夹,./hadoop fs -mkdir /testMR/output,用于放输出,看一下HDFS上的文档结构./hadoop fs -ls /testMR,大概是这样的
- 在matlab控制台输入mcc -m depMapRedStandAlone.m,生成run_depMapRedStandAlone.sh文件
- 然后从控制台进入matlab的工作目录,运行生成的文件
./run_depMapRedStandAlone.sh /usr/local/MATLAB/MATLAB_Runtime/v90,红色部分为mcr的安装目录,根据自己的路径修改就可以了。
- 还有一点需要注意,输出结果需要是新建的,假如第一次运行失败,但是输出文件myresults已经生成了,这时候调试好后,由于HDFS上已经有myresults文件,就会报错,所以每次运行前,要把该文件先删除
- ./hadoop fs -rm -r /testMR/output
- ./hadoop fs -mkdir /testMR/output