分析知:构建好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。