实验跑一个900多兆网络pagerank值,我用的是python程序跑,但是单机跑不了(因为这个网络非常大,所以矩阵计算特别占内存),于是需要借助Hadoop来计算。但是hadoop开始跑的时候还是跑不了,报溢出内存错误。查网上有说修改mapred-site.xml文件,但是这样很麻烦,你需要一个个点去配置,很麻烦。
其实这里有两类方法,一种是调内存,第二种就是增加mapper。而这里都有一种动态设置的办法设置,用stream的-jobconf这个指令配置即可,而不用去设置文件。
动态设置内存-jobconf mapreduce.map.memory.mb=5120,即每个mapper有5120M内存。但是我不是很推荐用这种方法,因为这个还是有一个极限值的,就是节点的真实内存(通常是达不到的,因为hadoop自己也要占内存。)
在这里,我推荐用增加mapper的方法。-jobconf mapred.map.tasks=15即分配15个mapper跑这段程序。如果程序还跑不了,就慢慢加,一个个试就可以了。
下面附一个指令:
./bin/hadoop jar /usr/local/hadoop-2.7.2/share/hadoop/tools/lib/hadoop-streaming-2.7.2.jar -input /data/20155 -output /data/2015pr --mapper /root/code/mapper.py -reducer /root/code/Reducer1.py -file /root/code/mapper.py -file /root/code/Reducer1.py -jobconf mapred.map.tasks=15 -jobconf mapred.reduce.tasks=5