Haloop用户手册:http://code.google.com/p/haloop/wiki/UserManual
1.介绍
Haloop是一个Hadoop MapReduce框架的修改版本,其目标是为了高效支持 迭代,递归数据 分析任务,如PageRank,HITs,K-means,sssp等。递归的连接可能在map端(K-means),也可能在reduce端(PageRank)。
Haloop的基本思想是缓存 循环不变量(即静态变量) 到salve nodes。每次迭代重用这些数据。
2.下载Haloop
3,运行Haloop
Haloop的配置 与Hadoop完全相同,除了它没有单机模式和伪分布模式。
Haloop命令行选项 也与Hadoop相同
故障排除:
(1)java.lang.OutOfMemoryError: Java heap space
堆空间异常,大部分情况是因为JVM在垃圾收集上花费大量时间。通过 setting -Xmx提高堆大小heap size一般不起作用。即使这个异常消失,JVM仍在垃圾收集上花费不少时间,这会使性能很糟糕。这是检查Mapper/Reducer代码是否创建了过多对象。因为进入M/R的数据很大,所以m/r函数会被多次调用。导致堆空间不够。尽量减少new操作。。
(2)java.io.IOException: Type mismatch in key from map: expected
不相容类型,一般是因为输入输出与map/reduce作业的键值对不匹配。
(3)参数设置
确保迭代过程的每一个人物都有正确的参数设置
4.例子
PageRank example: Naive PageRank Implementation.
重用原始PageRank的主要部分,得到新版本:PageRank Implementation on HaLoop. 用如下方式运行代码:
$wget http://snap.stanford.edu/data/soc-LiveJournal1.txt.gz $gzip -d soc-LiveJournal1.txt.gz $export dataset_path=livejournal $export result_path=lvjresult $chmod 755 *.sh $bin/hadoop dfs -put *livejournal*.txt $dataset_path $./retest.sh $./pagerank.sh $dataset_path $result_path <num_of_iteration> <num_of_vertices> <num_of_reducers>
查看结果
$bin/hadoop dfs -get $result_path/i3/part* result/ $cat result/*
运行原始pageRank比较结果:
$./naivepagerank.sh $dataset_path $result_path <num_of_iteration> <num_of_vertices> <num_of_reducers>
注意:两次运行迭代次数都被设置为2,这个可以设置为自己想要的数据。但是应该看到 Haloop的缺陷(这里有描述:http://www.wikieno.com/2012/02/iterative-mapred-summary-haloop/):没有一个客观的停止迭代的标准