Haloop介绍

来源:互联网 发布:自动完成算法 编辑:程序博客网 时间:2024/06/05 17:17

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 keyfrom 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/):没有一个客观的停止迭代的标准