ubuntu14.04下搭建GraphLab集群_分享linux系统下 (ubuntu14.04) 架设小型集群进行mpi并行计算的经历-程序员宅基地

技术标签: 大数据  

ubuntu14.04下搭建GraphLab集群

1. GraphLab简单介绍

  GraphLab是CMU(卡耐基梅隆大学)开发的一个以vertex为计算单元的大规模图处理系统,是继google的Pregel之后的第一个开源的大规模图处理系统,它解决了传统MapReduce框架对于机器学习应用的处理中最突出的两个问题(频繁迭代计算和大量节点通信)引起的计算效率的问题,与Haloop,Twister等基于MapReduce批量处理不同的是,它采用Pregel的以vertex为计算单元,并将机器学习抽象成GAS(gather,apply,scatter)三个步骤,然后按该抽象模型设计实现算法,事实已经证明该框架对于机器学习这一类跟图处理关系紧密的应用有很好的效果。

  我们部署的版本是PowerGraph,是github上面的开源项目,可以直接基于它开发C++应用。现在GraphLab的小组已经成立了公司,对应的产品为GraphLab-Create,在原有的基础上用Python进行封装,还进行了一些优化。GraphLab-Create并不是免费的,可以加入Academic Program免费试用一年。相应地,他们小组也逐渐弃用了PowerGraph。

2. 整体部署说明

  GraphLab的这个PowerGraph项目包括处于顶层的核心API、机器学习和数据挖掘的工具包。通过TCP/IP进行进程间通信,使用MPI来启动和管理PowerGraph程序,而且每一个程序都是多线程的。

GraphLab结构图

  在安装和编译GraphLab源代码之前,需要先安装配置SSH免密码登陆和MPI。因为结点间需要管理远程进程,就必须保证在节点间执行指令的时候不需要输入密码,所以需要SSH免密码登陆,而MPI的实现应用(MPI是一套标准,有很多此标准的实现应用,如MPICH2)则为并行应用提供消息传递或者相关服务。

3. 搭建过程

3.1. 安装Linux操作系统

1) 主机环境说明

集群中使用了3台主机,每台主机有CPU核4个,内存16G,每台主机上安装的操作系统为Ubuntu14.04 Desktop 64bit,每台主机上面都使用相同的用户名。注意graphlab的主机之间是没有主次之分的。

3.2. 修改主机文件

1) 在每台主机上修改主机名

可能安装系统的时候主机名不是自己想要的,那么就需要修改自己的主机名,如果觉得不影响,可以不作任何修改。

(1). 修改文件/etc/hostname,把主机名修改为自己想要的名字 
(2). 修改文件/etc/hosts,把原来的主机名改为新的主机名

2) 在每台主机上修改主机文件

需要把其他主机的IP和主机名对应关系写在/etc/hosts文件中,那么集群中的主机就通过主机名互相识别,某一个主机的/etc/hosts文件内容示例如下:

127.0.0.1       localhost
192.168.0.5 graphlabmaster
192.168.0.6  graphlabslave1
192.168.0.7  graphlabslave2

\#The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

我们配置的集群有三台主机,分别是graphlabmaster,graphlabslave1和graphlabslave2,前面是他们对应的IP地址,需要注意的是:默认会有一行内容为127.0.0.1+主机名,删掉就可以了。

3.3. 配置ssh免密码登陆

参见ssh配置

3.4. 安装编译GraphLab

1) 为每台主机更新一下源,保证获取的安装包都是最新的

sudo apt-get update

2) 为每台主机安装GraphLab的依赖库

sudo apt-get install gcc g++ build-essential libopenmpi-dev openmpi-bin default-jdk cmake zlib1g-dev git

3) 从GitHub上下载GraphLab(接下来的操作在一台主机上)

  选取集群中的一台机器,进入要安装GraphLab的目录,使用如下的git命令下载GraphLab

git clone https://github.com/graphlab-code/graphlab.git

4) 编译GraphLab

  进入graphlab文件夹,使用graphlab自带的configure脚本配置编译环境

cd graphlab 
./configure

  配置成功后会在graphlab文件夹内生成release和debug两个新的目录。这两个目录分别对应不同项目的发行版和测试版,在这两个目录中都可以编译GraphLab的所有Toolkit,分别对应发行版和测试版。编译后发行版与测试版的不同是,发行版在编译过程中程序都做了优化,运行速度更快。

  还有一点需要特别指出,GraphLab不仅提供了分布式大规模图计算模型,而且基于该模型实现了很多实用的工具集,这些工具集可以分成六类:主题建模、图分析、聚类、协同过滤、图模型和计算机视觉。可以根据自己的需要只编译其中的某一类或几类。如果全部编译,第一次编译时会下载很多的库文件,耗费很长时间。我只对其中的图分析工具集比较感兴趣,所以只编译了这一个。同时我也编译了apps目录中的相应样例代码。

  编译release目录下的apps子目录:

cd release/apps 
make -j 3

  第二行中的参数-j 3是利用了make的并行编译特性,3指的是同时进行三个编译任务。该数字越大,并行性越高,编译速度越快,但是占用内存也越多。如果该数字过大,会因内存不够用而使编译过程卡住。

  编译release目录下的toolkits中的graph_analytics:

cd release/toolkits/graph_analytics 
make -j 3

  如果希望编译整个GraphLab,那么可以在release目录下运行如下命令:

cd release 
make -j 3

  注意事项:编译的过程不一定都顺利,可能会有文件下载失败的问题和权限问题等

如果提示hash not match,则为文件内容不全,下载失败。解决办法:首先检查是否使用代理,网上说代理一般是不能成功的。如果没有使用代理,还是不能成功,可以自己手动下载文件,然后把文件放在指定的目录即可。

/hadoop/src/hadoop/src/c++/libhdfs/configure: Permission denied,则是文件权限的问题,解决办法: 
chmod a+rx /hadoop/src/hadoop/src/c++/libhdfs/configure

就是给所以用户加上读和执行的权限。

5) 集群测试

  在所有结点上创建一个文件,文件名为“machines”,文件里面内容为所有结点的主机名,最好是在一台主机上面新建文件,然后复制至其他主机,保证内容相同。内容示例如下: 
graphlabmaster 
graphlabslave1 
graphlabslave2

  在安装GraphLab的主机上面运行如下命令,GraphLab提供了脚本用于分发编译好的二进制可执行文件到集群中的所有其他机器上。在你下载并编译了GraphLab的那台机器上,使用下面的命令来分发二进制可执行文件和相关库文件把一些GraphLab文件拷贝至其他主机 
  cd ~/graphlab/release/toolkits 
  ~/graphlab/scripts/mpirsync 
  cd ~/graphlab/deps/local 
  ~/graphlab/scripts/mpirsync

  单机测试,在每一台机器上,运行如下的命令来测试分发到每台机器上的二进制可执行程序能否正确运行: 
cd ~/graphlab/release/toolkits/graph_analytics/ 
./pagerank –powerlaw=10000

  分布式测试,在任意一台机器上,运行如下两条命令: 
cd ~ 
mpiexec -n 2 -hostfile machines 
graphlab/release/toolkits/graph_analytics/pagerank –powerlaw=100000

  如果上述命令能够正确无误执行,那么GraphLab分布式集群运算环境搭建就算完成了。

4. 主要参考资料

(1) GraphLab部署过程 
(2) 搭建GraphLab集群总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011545382/article/details/78711462

智能推荐

我们应如何度过自己的大学生活?_如何度过大学生活1000字-程序员宅基地

文章浏览阅读3.1k次。我们应如何度过自己的大学生活?  踏着九月的烈日,我们成功地来到了河南理工大学,开始了我们的大学生活,那么你可曾想过,我们到底应该如何度过我们的大学生活才算有意义呢?  可曾记得高中老师说的最多的一句话:“好好学吧!上了大学就轻松了!”每当听到这句话时都会给我们莫大的鼓励,也让我们对大学充满了憧憬。那么大学生活真如高中老师说的那样轻松吗?其实不然!高中老师所谓的轻松只是在一定程度上正课的时..._如何度过大学生活1000字

python snownlp情感分析简易demo(分享),没有我Python干不成的事!_snowlp情感分析代码-程序员宅基地

文章浏览阅读745次。SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。MIT许可下发行。其github主页可能有些不准确,我也是随便提取的数据,不过snownlp还是号称情感分析准确很高的!_snowlp情感分析代码

命令行安装todesk_todesk命令行csdn-程序员宅基地

文章浏览阅读653次,点赞10次,收藏7次。要想通过命令行安装todesk,也是比较简单的。_todesk命令行csdn

如何开发一个个人微信小程序,微信小程序开发入门教程_微信小程序怎么开发自己的小程序-程序员宅基地

文章浏览阅读10w+次,点赞183次,收藏1.1k次。做任何程序开发要首先找到其官方文档,我们先来看看其有哪些官方文档。微信小程序开发文档链接为:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html,如下图:这里就是做微信小程序开发的全部官方文档。知道了文档的位置,下面我们来介绍下如何做一个微信小程序开发:第一步:下载微信小程序开发者工具并安装,下载路径:https://mp.weix..._微信小程序怎么开发自己的小程序

前端解决浏览器直接打开图片URL,下载问题_前端想要通过url下载但是打开了网页-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏7次。本周做的项目中有一个下载图片的功能,拿到后台返回的url,像文件一样,直接window.open,发现图片没有像文件一样被下载,而是重新打开了一个页面展示图片。然后我尝试了转成base64等方法也还是有跨域的问题。后来就想着自己把这个url,发送给Node,node转成数据流返回给我,我再下载。话不多说,上代码:vue前端代码: downZip (urls) { ..._前端想要通过url下载但是打开了网页

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

随便推点

语义分割入门的总结-程序员宅基地

文章浏览阅读740次。点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达作者:Yanpeng Sunhttps://zhuanlan.zhihu.com/p/74318967声明:仅做学术分..._语义分割两个目标重合怎么

SpringBoot实践(三十五):JVM信息分析_怎样查看springboot项目的jvm状态-程序员宅基地

文章浏览阅读902次。JVM分析可以也可以使用,那么什么时候用到jvm信息分析呢,一般生产测试环境,能够最大化将问题暴露,但是总有些问题只有生产运行很长时间后才会被发现,jvm分析经常用于运行了很久的系统有异常情况时的调优,比如堆内存本身分配不合理,新生代中eden比例太低等。_怎样查看springboot项目的jvm状态

基于springboot+vue的戒毒所人员管理系统 毕业设计-附源码251514_戒毒所管理系统-程序员宅基地

文章浏览阅读288次。戒毒所人员管理系统的开发是采用java语言,基于MVVM模式进行开发,采取MySQL作为后台数据的主要存储单元,采用Springboot框架实现了本系统的全部功能。戒毒所人员管理系统,具有戒毒人员管理、尿检管理、戒毒管理、治疗分类、社会跟踪等功能,本系统代码的复用率高,系统维护代价小,具有方便、灵活、高效等特征。_戒毒所管理系统

【LeetCode】面试题57 - II. 和为s的连续正数序列_leet code 和为s的正数序列 java-程序员宅基地

文章浏览阅读174次。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof题目描述:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9..._leet code 和为s的正数序列 java

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码