




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Graphlab并行集群安装教程 GraphLab是CMU(卡耐基梅隆大学)开发的一个以vertex为计算单元的大规模图处理系统,是继google的Pregel之后的第一个开源的大规模图处理系统,它解决了传统mapreduce框架对于机器学习应用的处理中最突出的两个问题(频繁迭代计算和大量节点通信)引起的计算效率的问题,与Haloop,Twister等基于mapreduce批量处理不同的是,它采用Pregel的以vertex为计算单元,并将机器学习抽象成GAS(gather,apply,scatter)三个步骤,然后按该抽象模型设计实现算法,事实已经证明该框架对于机器学习这一类跟图处理关系紧密的应用有很好的效果。最近这几天在实验室集群上搭建了GraphLab分布式计算环境。这篇文章主要总结一下搭建过程和碰到的问题。1)介绍一下实验室集群的环境。集群中总共有9台机器,每台机器有CPU核4个,内存8G。每台机器上都安装了64位Ubuntu 12.04 Desktop版操作系统。注意,根据GraphLab官方安装指南(Werequirea 64-bit operating system.),要安装GraphLab,操作系统必须是64位的。2)为每台机器安装GraphLab的依赖库。在每台机器上运行如下的命令:sudo apt-get install gcc g+ build-essential libopenmpi-dev openmpi-bin default-jdk cmake zlib1g-dev git3) 从GitHub上下载GraphLab。选取集群中的一台机器,进入要安装GraphLab的目录,使用如下的git命令下载GraphLab。cd # 我将GraphLab安装在了主目录下git clone /graphlab-code/graphlab.git由于GraphLab项目比较大,下载需要花费一定的时间。下载完成之后,会在当前目录下看到一个名为graphlab的文件夹。4) 编译GraphLab。 进入graphlab文件夹,使用graphlab自带的configure脚本配置编译环境:cd graphlab./configure配置成功后会在graphlab文件夹内生成release和debug两个新的目录。这两个目录分别对应不同项目的发行版和测试版,在这两个目录中都可以编译GraphLab的所有Toolkit,分别对应发行版和测试版。编译后发行版与测试版的不同是,发行版在编译过程中程序都做了优化,运行速度更快。因此,我的编译选择在release目录中进行。还有一点需要特别指出,GraphLab不仅提供了分布式大规模图计算模型,而且基于该模型实现了很多实用的工具集,这些工具集可以分成六类:主题建模、图分析、聚类、协同过滤、图模型和计算机视觉。可以根据自己的需要只编译其中的某一类或几类。如果全部编译,第一次编译时会下载很多的库文件,耗费很长时间。我只对其中的图分析工具集比较感兴趣,所以只编译了这一个。同时我也编译了apps目录中的相应样例代码。编译release目录下的apps子目录:cd release/appsmake -j 3第二行中的参数-j 3是利用了make的并行编译特性,3指的是同时进行三个编译任务。该数字越大,并行性越高,编译速度越快,但是占用内存也越多。如果该数字过大,会因内存不够用而使编译过程卡住。编译release目录下的toolkits中的graph_analytics:cd release/toolkits/graph_analyticsmake -j 3如果希望编译整个GraphLab,那么可以在release目录下运行如下命令:cd releasemake -j 35) 配置SSH。GraphLab要求集群中任意两台机器之间能够实现SSH无密码登录。首先要确保每台机器上都已经安装了openssh-server:sudo apt-get install openssh-server接着在每台机器上生成公钥和私钥对,一路回车即可:ssh-keygen -t rsa最后是配置任意两台机器间的无密码ssh登录。比如A和B两台机器,若要在A上能够无密码ssh登录到B,可以在A上运行如下命令:ssh-copy-id hostname-of-B其中hostname-of-B指的是B的主机名。如果集群中机器数量很多,任意两台机器都配置一遍显然太麻烦了。一种简单的策略是,先配置其中一台机器到集群中所有机器的(包括ssh到自己的),然后将该台机器中$HOME/.ssh/authorized_keys文件拷贝到集群中所有其他结点上。(!这种策略经验证并不可行,还是需要手动配。!)6)创建machines文件并分发到集群中的所有机器上。在集群中的某一台机器上创建一个名称为machines的文件,该文件中列出了参与计算的所有机器的主机名(或者IP地址),每个主机名占一行。将machines文件拷贝到集群中的所有机器上,注意machines文件的位置在所有机器上都要确保一致,而且必须是用户的$HOME主目录。接下来在使用GraphLab提供的脚本分发编译好的可执行文件到集群中各个机器上时,该脚本默认machines文件位于用户主目录下。scp /machines hostnamex:/其中hostnamex是集群中其他机器的主机名。以上步骤完成后,可以在任意一台机器上使用如下命令测试配置是否正确:mpiexec -hostfile /machines hostname如果上面的命令能够返回你在machines文件里面列出的所有主机名,那么说明配置正确。7)分发GraphLab二进制可执行文件和相关库文件到集群中的所有机器上。GraphLab提供了脚本用于分发编译好的二进制可执行文件到集群中的所有其他机器上。在你下载并编译了GraphLab的那台机器上,使用下面的命令来分发二进制可执行文件和相关库文件:cd /graphlab/release/apps; /graphlab/scripts/mpirsync #分发appscd /graphlab/release/toolkits; /graphlab/scripts/mpirsync #分发toolkitscd /graphlab/deps/local; /graphlab/scripts/mpirsync #分发库文件8)单机模式下,使用模拟图运行测试PageRank程序。在每一台机器上,运行如下的命令来测试分发到每台机器上的二进制可执行程序能否正确运行:cd /graphlab/release/toolkits/graph_analytics/./pagerank -powerlaw=10000如果上述命令在每台机器上都能正确无误运行,GraphLab的集群安装配置就算完成了。接下来可以测试分布式模式下能否成功运行。9)分布式模式下,使用模拟图运行测试PageRank程序。在任意一台机器上,运行如下命令:cd mpiexec -n 2 -hostfile machines graphlab/release/toolkits/graph_analytics/pagerank -powerlaw=100000改变-n参数的值,多试几次,以确保安装正确无误。如果上述命令能够正确无误执行,那么GraphLab分布式集群运算环境搭建就算完成了。碰到的问题(目前该问题已经解决):我在安装GraphLab后遇到的问题是:在单机模式下每台机器上PageRank都能够成功执行,但是换到分布式模式下,运行命令后程序立即卡住,没有任何错误提示信息。这一问题让我焦虑了很多天,因为没有log,没有任何提示,根本无法定位问题所在。目前该问题仍然无法解决,与GraphLab的作者联系并交流,作者也无法定位问题所在。我猜测机器型号可能导致该问题:运行GraphLab的集群,每台机器的型号一定要完全一致。因为GraphLab使用C+开发,相比Java的一处编译多处运行,C+并不具有这种特性。要想让在一台机器上编译的代码能够在其他机器上正确运行,一定要确保所有机器型号一致。我碰到的现象很奇怪,虽然我集群中的机器有几台型号不一致,但是我在一台机器上编译后生成的可执行程序在型号不一样的机器上也能正常运行。但是分布式模式下,就会卡住。具体是什么原因,我也不清楚。有人可能会问,不同型号的机器,自己编译自己的可以吗?答案是不行,分布式模式下程序运行前要检查校验码,确保所有可执行程序是在同一台机器上编译的,如果校验码不一致,程序无法运行。但是真实情况又否定了我的这一猜测。我的集群里有三种不同型号的机器,当两台能同时运行时,这两台的型号不一样。当四台能同时运行时,其中的四台有三种型号。问题解决方法:通过邮件与GraphLab作者交流,作者对我碰到的问题也很费解,试了各种可能的方法,都无法解决我碰到的问题。一个偶然的机会,实验室的一位学弟解决了我的问题。我安装GraphLab使用的是OpenMPI, 学弟将OpenMPI换成MPICH后,问题解决了。关于安装MPICH的过程可以参考:/ldante/item/82a07c51a60da6474eff208f。MPI并行计算环境搭建以及集群测试MPI作为一种通过消息传递进行并行计算的框架,在很多科学计算上有很重要的应用,这次因为GraphLab环境搭建时的需要,花了三个来小时的时间进行了初步的搭建摸索,感觉很有意思! 首先是单机MPI安装1.安装之前因为是集群测试,所以跟hadoop一样先要设置ssh无密钥登录(可以参考这里),我这里用的是一个服务器节点和一台虚拟机。上面给出的链接里对ssh无密钥登录设置说的很清楚。2.开始安装源码下载地址,这里我用的是1.0.8(mpich命名很怪气,明明是v2,它却命名是1,无力吐槽)mpich2-1.0.8.tar.gz单机安装很简单#tar -zxvf mpich2-1.0.8.tar.gz#./configure (我让它默认安装到/usr/local/bin下,不需要设置安装路径)#make#make install注意:对于集群的每一个机器都要安装,当然你如果用NFS挂载也可以,我没这样用。安装完成之后最重要的一步有人说是设置环境变量,其实你默认安装路径的话,这个变量设置与否无所谓的。因此最重要的一步是创建配置文件(mpd.conf)。#touch /etc/mpd.conf#chmod 600 /etc/mpd.conf#echo secretword=myword /etc/mpd.conf到此为止,单机安装就算完成了,可以进行单机测试# mpd &1 4457# mpdtracevm4# mpdallexit3.集群部署集群部署就多一步,只需要在主机种创建集合文件(mpd.hosts),文件地方无所谓,内容为集群的hostname列表。node9 #主服务器vm4 #子节点在主机中测试部署是否成功:# mpdboot -n 2 -f /root/mpd.hosts # mpdtracenode9vm4说明部署成功。4.样例测试icpi是已经经过编译的可执行文件,用于计算pi的值。(注意这里服务器和子节点中icpi放的地方要相同)单机:# ./icpi Enter the number of intervals: (0 quits) 10000000000pi is approximately 3.1415926535895782, Error is 0.0000000000002149wall clock time = 45.378959Enter the number of intervals: (0 quits) 1000pi is approximately 3.1415927369231227, Error is 0.0000000833333296wall clock time = 0.000149集群:rootnode9 wyztest# mpiexec -n 2 ./icpi Enter the number of intervals: (0 quits) 10000000000pi is approximately 3.1415926535895737, Error is 0.0000000000002194wall clock time = 22.696655Enter the number of intervals: (0 quits) 0Enter the number of intervals: (0 quits) 1000pi is approximately 3.1415927369231254, Error is 0.0000000833333322wall clock time = 0.001589测试结果表明:对于间隔比较大时,明显集群快,但是间隔很小时,由于消息传递机制本身会耗时,因此集群效率不如单机。部分参考资料链接: /s/blog_5daeb2750100z3qx.html/logwt/article/details/7325314/lyq105/archive/2010/06/01/1749515.html/ngvjai/article/details/8000045补充:(可能会出现的问题,这是我在再次部署的时候出现的问题,第一次部署的时候太顺利了,因此没有出现问题,第二次再部署的时候出现了如下四个问题。) 问题1/usr/local/bin/mpdlib.py:8: DeprecationWarning: The popen2 module is deprecated. Use the subprocess module.import sys, os, signal, popen2, socket, select, inspect/usr/local/bin/mpdlib.py:15: DeprecationWarning: the md5 module is deprecated; use hashlib insteadfrom md5 import new as md5new原因:python版本太高了,python2.6开始都不支持popen2模块,转而用subprocess模块代替,因此会出现这个错误。解决办法是降低python的版本,转到python2.5之后就可以了。(源码下载)问题2#ssh node2ssh: node2: Temporary failure in n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校本网络研修平台
- 实践报告心得体会1500字
- 幼儿园教师任教学科怎么填写
- 关于音乐的教育论文
- 腰椎骨折治疗与护理讲课件
- 2025-2030年大麦茶饮料行业市场深度调研及发展趋势与投资战略研究报告
- 2025-2030年国内建筑用钢行业市场发展分析及发展前景与投资机会研究报告
- 2025-2030年半甜红葡萄酒产业市场深度调研及前景趋势与投资研究报告
- 2025-2030年农产品配送行业市场发展分析及发展趋势前景预测报告
- 2025-2030年入侵检测系统行业市场发展分析与发展前景及投资战略研究报告
- 护理安全用药制度
- 中国药妆行业发展现状、药妆市场政策解读及未来发展趋势分析图
- 毕业离校学生证遗失证明
- 《汽轮机原理》第03章1课件
- 家族成员关系辈分排列树状图含女眷
- 围堰施工监理实施细则
- 新生血管性青光眼课件
- YY∕T 1797-2021 内窥镜手术器械 腔镜切割吻合器及组件
- 智慧停车技术方案
- 土地整理质量评定表
- 肠内肠外营养制剂及特点
评论
0/150
提交评论