同步图计算:GraphLite的安装和使用
http://blog.csdn.net/pipisorry/article/details/51350908
export HADOOP_HOME=/usr/local/hadoop-2.6.4
export GRAPHLITE_HOME=/opt/GraphLite/GraphLite-0.20
pika:/opt/GraphLite/GraphLite-0.20$ . bin/setenv
pika:/opt/GraphLite/GraphLite-0.20$cd engine
pika:/opt/GraphLite/GraphLite-0.20/engine$make #apt-get install -y make #没有安装make的话要安装
pika:/opt/GraphLite/GraphLite-0.20/engine$cd ..
pika:/opt/GraphLite/GraphLite-0.20$ls bin/
clean-output graphlite hash-partitioner.pl setenv start-graphlite start-worker
Compile and Run Vertex Program
1. build example
pika:/opt/GraphLite/GraphLite-0.20$cd example
如果没有安装g++的要安装apt-get install -y g++
pika:/opt/GraphLite/GraphLite-0.20/example$make
g++ -std=c++0x -g -O2 -I/usr/local/hadoop-2.6.4/include -I/opt/GraphLite/GraphLite-0.20/include PageRankVertex.cc -fPIC -shared -o PageRankVertex.so
check if example/PageRankVertex.so is successfully generated:
pika:/opt/GraphLite/GraphLite-0.20/example$ls
Makefile PageRankVertex.cc PageRankVertex.so
2. run example
如果没有开启ssh的要开启/etc/init.d/ssh start,一般上面步骤对都开启了
pika:/opt/GraphLite/GraphLite-0.20/example$cd ..
pika:/opt/GraphLite/GraphLite-0.20$start-graphlite example/PageRankVertex.so Input/facebookcombined_4w Output/out
Note: 如果这一步出错了,直接ctrl+c并没有杀掉所有graphlite进程,系统cpu占用还是100%,所以要打开系统监视器来end process: 进程名为graphlite。
查看输出结果:
pika:/opt/GraphLite/GraphLite-0.20$cat Output/out_*
...
4031: 1.050963
4035: 0.152987
当然也可以测试自己写的代码和输入文件
编写自己的同步图计算程序并测试代码结果
计算KCore:一个图G的 KCore 是G的子图,这个子图的每个顶点的度>=K;输入:无向图 (有成对的有向边);输出: KCore 子图中的所有顶点
#将自己写的代码KcoreVertex.cc和输入文件的目录(/media/pika/files/mine/c_workspace/BDMS/BDMS代码和输入文件下载)cp到graphlite example目录下
pika:/opt/GraphLite/GraphLite-0.20$cd example/
pika:/opt/GraphLite/GraphLite-0.20/example$mv PageRankVertex.cc ori.cc #重命名之前的文件
pika:/opt/GraphLite/GraphLite-0.20/example$rm PageRankVertex.so -f #删除之前产生的中间文件
pika:/opt/GraphLite/GraphLite-0.20/example$cp /media/pika/files/mine/c_workspace/BDMS/BDMS/*.cc /opt/GraphLite/GraphLite-0.20/example
pika:/opt/GraphLite/GraphLite-0.20/example$cp /media/pika/files/mine/c_workspace/BDMS/BDMS/part2-input/* /opt/GraphLite/GraphLite-0.20/Input
pika:/opt/GraphLite/GraphLite-0.20/example$. ../bin/setenv
pika:/opt/GraphLite/GraphLite-0.20/example$make
pika:/opt/GraphLite/GraphLite-0.20$cd ..
#PageRankVertex实际已改成自己写的KcoreVertex,文件名修改的话也要修改Makefile文件再make
pika:/opt/GraphLite/GraphLite-0.20$start-graphlite example/PageRankVertex.so Input/KCore-graph0_4w Output/out 6
pika:/opt/GraphLite/GraphLite-0.20$cat Output/out_*
0
4
1
5
2
6
3
Graphlite程序的调试
lz并没有深入graphlite,调试仅仅是输出中间值。
在graphlite c++代码中(一般只是修改了节点的compute函数代码)cout输出结果,结果不会在屏幕上输出,但是会在${GRAPHLITE_HOME}目录中的workout目录下有文件输出。
通过设置最大超步数,一步一步调试吧。
注意事项
graphlite的c++代码(如compute函数中读取的数据)中的相对路径是相对${GRAPHLITE_HOME}来说的,也就是相对执行目录而言,而不是相对.cc代码或者.so文件。
运行出错及解决
Sender: connect: Connection refused错误
Sender: connect: Connection refused
Sender: connect: Connection refused
...
出错的可能原因:
1 可能是inputformatter中顶点类型的sizeof没改,或者说是某个类型定义为double,但是传递的是int
2 执行路径不对:example/PageRankVertex.so,这个路径就说明要在example的上级目录下执行这条命令
3 运行之前还有其它graphlite程序在运行,可能是之前运行graphlite时ctrl+c结束了,但是实际上进行还在后台执行,导致冲突,打开system-monitor结束graphlite进程(一般有多少个worker就有几个进程,都要结束)
Netbeans IDE中调试基于graphlite实现的c++代码
...
Docker中运行graphlite
Requirements
1. JDK 1.7.x + Hadoop 2.6.x
docker中Hadoop的安装参考[Hadoop:Hadoop单机伪分布式的安装和配置]
2. protocol buffers
root@dc34d732b74d:/# apt-get update
root@dc34d732b74d:/# sudo apt-get install protobuf-c-compiler libprotobuf-c0 libprotobuf-c0-dev
下载和安装graphlite
root@dc34d732b74d:/# apt-get install -y git #没有安装git的话要安装,lz使用的是docker中配置的环境,很多都没有
root@dc34d732b74d:/# cd /opt
root@dc34d732b74d:/opt# git clone https://github.com/schencoding/GraphLite.git
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20# vim bin/setenv
export JAVA_HOME=/opt/jdk1.8.0_91
export HADOOP_HOME=/usr/local/hadoop-2.6.4
export GRAPHLITE_HOME=/opt/GraphLite/GraphLite-0.20
root@dc34d732b74d:/opt# . bin/setenv
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/# cd engine
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/engine# apt-get install -y make #没有安装make的话要安装
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/engine# make
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/engine# cd ..
check if bin/graphlite is successfully generated:
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20# ls bin/
clean-output graphlite hash-partitioner.pl setenv start-graphlite start-worker
Compile and Run Vertex Program
1. build example
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/# cd example
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/# apt-get install -y g++ #没有安装g++的要安装
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/example# make
g++ -std=c++0x -g -O2 -I/usr/local/hadoop-2.6.4/include -I/opt/GraphLite/GraphLite-0.20/include PageRankVertex.cc -fPIC -shared -o PageRankVertex.so
check if example/PageRankVertex.so is successfully generated:
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/example# ls
Makefile PageRankVertex.cc PageRankVertex.so
2. run example
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/example# cd ..
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20/# /etc/init.d/ssh start #没有开启ssh的要开启
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20# start-graphlite example/PageRankVertex.so Input/facebookcombined_4w Output/out
查看输出结果:
root@dc34d732b74d:/opt/GraphLite/GraphLite-0.20# cat Output/out_*
保存docker 容器为images
pika:~$docker ps
pika:~$docker commit 2379 graphlite1
当然也可以测试自己写的代码和输入文件
编写自己的同步图计算程序并测试代码结果
#将自己写的代码KcoreVertex.cc和输入文件的目录(代码和输入文件下载)挂载到docker image的/mnt目录下
Note: KcoreVertex.cc内容:KCore:一个图G的 KCore 是G的子图,这个子图的每个顶点的度>=K;输入:无向图 (有成对的有向边);输出: KCore 子图中的所有顶点
pika:~$docker run -v /media/pika/files/mine/c_workspace/BDMS/BDMS:/mnt -it graphlite1 bash
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20/example# mv PageRankVertex.cc ori.cc #重命名之前的文件
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20/example# rm PageRankVertex.so #删除之前产生的中间文件
root@23791b4028eb:/# cp /mnt/*.cc /opt/GraphLite/GraphLite-0.20/example
root@23791b4028eb:/# cp /mnt/part2-input/* /opt/GraphLite/GraphLite-0.20/Input
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20# . bin/setenv
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20# cd example/
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20/example# make
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20/example# cd ..
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20# /etc/init.d/ssh start
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20# start-graphlite example/PageRankVertex.so Input/KCore-graph0_4w Output/out 6 #PageRankVertex实际已改成自己写的KcoreVertex,文件名修改的话也要修改Makefile文件再make
root@23791b4028eb:/opt/GraphLite/GraphLite-0.20# cat Output/out_*
0
4
1
5
2
6
3
pika:~$docker ps
pika:~$docker commit <container id> graphlite
from: http://blog.csdn.net/pipisorry/article/details/51350908
ref: GraphLite的github主页
Prege(图计算框架)l: A System for Large-Scale Graph Processing(译)
同步图计算:GraphLite的安装和使用的更多相关文章
- 同步图计算实现最短路径Dijkstra算法
同上篇讲述pageRank一样,考虑一个顶点V. 根据顶点算法通常步骤1) 接收上个超步发出的入邻居的消息2) 计算当前顶点的值3) 向出邻居发消息 1.接收入邻居的消息 2.求入邻居的最小值,加上顶 ...
- 同步图计算实现pageRank算法
pageRank算法是Google对网页重要性的打分算法. 一个用户浏览一个网页时,有85%的可能性点击网页中的超链接,有15%的可能性转向任意的网页.pageRank算法就是模拟这种行为. Rv:定 ...
- 开源图计算框架GraphLab介绍
GraphLab介绍 GraphLab 是由CMU(卡内基梅隆大学)的Select 实验室在2010 年提出的一个基于图像处理模型的开源图计算框架.框架使用C++语言开发实现. 该框架是面向机器学习( ...
- Spark入门实战系列--9.Spark图计算GraphX介绍及实例
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理 ...
- 明风:分布式图计算的平台Spark GraphX 在淘宝的实践
快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) ...
- 关于图计算和graphx的一些思考[转]
原文链接:http://www.tuicool.com/articles/3MjURj “全世界的网络连接起来,英特纳雄耐尔就一定要实现.”受益于这个时代,互联网从小众的角落走到了历史的中心舞台.如果 ...
- Spark(十七)图计算GraphX
一.图概念术语 1.1 基本概念 图是由顶点集合(vertex)及顶点间的关系集合(边edge)组成的一种数据结构. 这里的图并非指代数中的图.图可以对事物以及事物之间的关系建模,图可以用来表示自然发 ...
- MaxCompute 图计算开发指南
快速入门step by step MaxCompute Studio 创建完成 MaxCompute Java Module后,即可以开始开发Graph了. 代码示例 在examples目录下有gra ...
- GraphX 在图数据库 Nebula Graph 的图计算实践
不同来源的异构数据间存在着千丝万缕的关联,这种数据之间隐藏的关联关系和网络结构特性对于数据分析至关重要,图计算就是以图作为数据模型来表达问题并予以解决的过程. 一.背景 随着网络信息技术的飞速发展,数 ...
随机推荐
- [BZOJ]1047 理想的正方形(HAOI2007)
真·水题.小C本来是不想贴出来的,但是有一股来自东方的神秘力量催促小C发出来. Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和 ...
- C++ 实参和形参
形参:在函数没有调用的时候,函数的形参并不占据实际的内存空间,也没有实质的值,--正如字面意思那样,"形式"参数,只是一个"形式. 实参:当函数被调用的时候,系统会为形式 ...
- 【Git】CentOS7 通过源码安装Git
yum源仓库里的Git版本更新不及时,最新版的Git是1.8.3,但是官方的最新版早已经更新到2.9.5.想要安装最新版本Git,只能下载源码进行安装 建议最好更新git为较新版本,便于使用 1.查看 ...
- LAN、WAN、WLAN、WiFi之间的区别
感觉这几个概念让人傻傻分不清,下面以最常见的路由器来解释这几个概念. LAN 1 LAN,全称Local Area Network,中文名叫做局域网. 顾名思义,LAN是指在某一区域内由多台计算机 ...
- Java并发编程之并发工具类
CountDownLatch CountDownLatch可以用于一个或多个线程等待其他线程完成操作. 示例代码 private static CountDownLatch c = new Count ...
- 谷歌Chrome浏览器之No Sandbox
想着还是要把这个分享出来,前两天,早上过来,Chrome打开后,输入网址回车,毫无反应,不加载,不跳转,打不开浏览器设置.总之就是除了能打开Chrome浏览器,不能进行任何其他操作,关闭重开也是这样 ...
- Redis学习汇总
[Redis教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动redis 6.使用redis客户端 7.redis数据结构 – ...
- rhel7 启动网络
我装的是rhel7 服务器版本(在virtualbox虚拟机里),安装后默认不启动网络,另外还有很多命令也不能用,比如ifconfig, yum-config-manager等. 先解决网络问题: 切 ...
- 迭代器&生成器
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...
- delphi 线程教学第五节:多个线程同时执行相同的任务
第五节:多个线程同时执行相同的任务 1.锁 设,有一个房间 X ,X为全局变量,它有两个函数 X.Lock 与 X.UnLock; 有如下代码: X.Lock; 访问资源 P; ...