Giraph-Eclipse安装-源码调试

1. 官网上下载giraph-1.0.0,放在 /home/hadoop目录下,把giraph-1.0.0文件夹重命名为giraph-1.0.0-src。
2. 进入/home/hadoop/giraph-1.0.0-src 目录,用Maven对源码进行构建,命令如下:
# mvn package –DskipTests
执行成功的信息如下:

分析知:构建好giraph工程存放于/root/.local/share/Trash/files目录的giraph-1.0.0文件夹中,把其拷贝到 /home/hadoop目录下。
root@giraphx:~/.local/share/Trash/files# cp -rgiraph-1.0.0/ /home/hadoop/
3. 测试giraph包是否构建成功,运行giraph 例子。
进入 /home/hadoop/giraph-1.0.0/giraph-examples/target目录,运行命令:
# hadoop jar giraph-examples-1.0.0-for-hadoop-0.20.203.0-jar-with-dependencies.jar org.apache.giraph.GiraphRunner org.apache.giraph.examples.SimpleShortestPathsVertex -vif org.apache.giraph.io.formats.JsonLongDoubleFloatDoubleVertexInputFormat -vip /user/root/SSSP/tiny_graph.txt -of org.apache.giraph.io.formats.IdWithValueTextOutputFormat -op /user/root/output-sssp-debug-6 -w 1
运行成功的结果如下图:

4. 在Eclipse中新建Java工程 Giraph-Debug。
5. 把giraph-1.0.0-src\giraph-core\src\main\java目录下的org和com文件夹拷贝到Giraph-Debug工程的src文件夹下。
6. 把giraph-1.0.0-src\giraph-examples\src\main\java目录下的org文件夹拷贝到Giraph-Debug工程的src文件夹下。
7. 把/home/hadoop/hadoop-0.20.203.0和/home/hadoop/hadoop-0.20.203.0/lib(不包含lib里面的文件夹)里面的jar包导入到工程的Path中。
8. 进入/home/hadoop/giraph-1.0.0/giraph-core/target目录,在giraph-1.0.0-for-hadoop-0.20.203.0-bin.tar.gz上面右击,选择ExtractHere。会解压出giraph-1.0.0-for-hadoop-0.20.203.0文件夹,把里面lib文件夹里的部分jar导入到工程的Path中。
注:因/home/hadoop/giraph-1.0.0/giraph-core/target/giraph-1.0.0-for-hadoop-0.20.203.0/lib和/home/hadoop/hadoop-0.20.203.0/lib中的jar包有重复,因此以Hadoop中的为准,只导入hadoop不包含而giraph包含的jar包。
具体列表如下:

 

9. 把工程的src下的org.apache.giraph.yarn包删掉,目前不测试yarn。原因是该包错误较多,删除前是224个错误,删除后只有6个错误。

10. 修改下图的错误,把编译器的级别从Error设置为Warning。

11. 在src下,新建org.apache.commons.net.util包,把从网上下载的Base64.java拷贝进去。只剩3个错误,再注释包含下面3个错误的代码。

    /*if[HADOOP_1_SECURITY] 
    else[HADOOP_1_SECURITY]*/  
    import org.apache.hadoop.ipc.StandbyException;  
    /*end[HADOOP_1_SECURITY]*/  
      
    /*if[HADOOP_1_SECRET_MANAGER] 
    else[HADOOP_1_SECRET_MANAGER]*/  
        try {  
            secretManager.checkAvailableForRead();  
            } catch (StandbyException e) {  
            LOG.error("SaslNettyServer: Could not read secret manager: " + e);  
        }  
    /*end[HADOOP_1_SECRET_MANAGER]*/  

12. 至此,工程中已无错误。配置GiraphRunner.java的运行参数。参数如下:
org.apache.giraph.examples.SimpleShortestPathsVertex -vif org.apache.giraph.io.formats.JsonLongDoubleFloatDoubleVertexInputFormat -vip /user/root/SSSP/tiny_graph.txt -of org.apache.giraph.io.formats.IdWithValueTextOutputFormat -op /user/root/output-sssp-debug -w 1
然后右键->RunAs-> Run on Hadoop,如下图。

13. 运行结果如下,map%只进行了0%就失败,也就是说Job运行失败。

14. 分析Log,寻找错误。分析后发现是Task没有启动Zookeeper服务。

15. 分析Task启动Zookeeper的命令如下,从task log 中分析出的。

/home/hadoop/jdk1.7.0_25/jre/bin/java -Xmx512m -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxGCPauseMillis=100 -cp /home/hadoop/hadooptmp/mapred/local/taskTracker/root/jobcache/job_201310240019_0001/jars/job.jar org.apache.zookeeper.server.quorum.QuorumPeerMain /home/hadoop/hadooptmp/mapred/local/taskTracker/root/jobcache/job_201310240019_0001/work/_bspZooKeeper/zoo.cfg

运行上述命令后,发现没有找到org.apache.zookeeper.server.quorum.QuorumPeerMain类
运行参考地址http://www.linuxidc.com/Linux/2012-01/51620.htm
分析job.jar后发现,其里面并没有org.apache.zookeeper.server.quorum.QuorumPeerMain.class(位于第三方jar包 ZooKeeper-3.3.3)。job.jar只包含源码对应的class文件,也就是说Run onHadoop并没有把第三方的Jar包中的class文件和源码对应的Class文件合并。

16.  解决方法

 方法一、引用插件,把第三方包打入jar包中

参考地址:http://blog.csdn.net/u010069855/article/details/11926305

1) 方法:工程右击->Export,选择other下面的 Fat Jar Exporter。

                  

2) 选中第三方Jar包。

3) 到上步骤生成Jar(如test.jar)的目录,运行下述命令即可运行Giraph程序。

hadoop jar test.jar org.apache.giraph.GiraphRunner org.apache.giraph.examples.SimpleShortestPathsVertex -vif org.apache.giraph.io.formats.JsonLongDoubleFloatDoubleVertexInputFormat -vip /user/root/SSSP/tiny_graph.txt -of org.apache.giraph.io.formats.IdWithValueTextOutputFormat -op /user/root/output-sssp-debug-1 -w 1

方法二、不打Jar包,替换掉新修改的类。

1) 新建目录 /home/hadoop/GiraphDebug
2) 把giraph-examples-1.0.0-for-hadoop-0.20.203.0-jar-with-dependencies.jar拷贝到/home/hadoop/GiraphDebug。命令如下:
cp /home/hadoop/giraph-1.0.0/giraph-examples/target/giraph-examples-1.0.0-for-hadoop-0.20.203.0-jar-with-dependencies.jar /home/hadoop/GiraphDebug/
3) 以后若在工程中修改了源码,比如说打log。则直接把修改后的类的class文件拷贝(替换)到/home/hadoop/GiraphDebug/giraph-examples-1.0.0-for-hadoop-0.20.203.0-jar-with-dependencies.jar
4) 然后运行giraph job即可。就能在logs中看到修改后的log。

 注:此为我研究了两周的成果。如有问题联系QQ:530422429。

个人资料
hadoop迷
等级:6
文章:30篇
访问:2.2w
排名: 13
上一篇: 一日一算法题,贪心算法(腾讯真题)
下一篇: Giraph源码分析(一) —— 启动ZooKeeper服务
猜你感兴趣的圈子:
图存储于图计算
标签: giraph、hadoop、jar、203.0、home、面试题
隐藏