GraphLab部署過程

1. GraphLab簡單介紹

GraphLab是CMU(卡耐基梅隆大學)開發(fā)的一個以vertex為計算單元的大規(guī)模圖處理系統(tǒng)桶癣,是繼google的Pregel之后的第一個開源的大規(guī)模圖處理系統(tǒng)蛹头,它解決了傳統(tǒng)MapReduce框架對于機器學習應用的處理中最突出的兩個問題(頻繁迭代計算和大量節(jié)點通信)引起的計算效率的問題,與Haloop,Twister等基于MapReduce批量處理不同的是,它采用Pregel的以vertex為計算單元,并將機器學習抽象成GAS(gather摧阅,apply,scatter)三個步驟绷蹲,然后按該抽象模型設(shè)計實現(xiàn)算法棒卷,事實已經(jīng)證明該框架對于機器學習這一類跟圖處理關(guān)系緊密的應用有很好的效果顾孽。

我們部署的版本是PowerGraph,是github上面的開源項目比规,可以直接基于它開發(fā)C++應用∪艉瘢現(xiàn)在GraphLab的小組已經(jīng)成立了公司,對應的產(chǎn)品為GraphLab-Create,在原有的基礎(chǔ)上用Python進行封裝蜒什,還進行了一些優(yōu)化测秸。GraphLab-Create并不是免費的,可以加入Academic Program免費試用一年灾常。相應地霎冯,他們小組也逐漸棄用了PowerGraph。

部署PowerGraph這個事情是我之前做的钞瀑,現(xiàn)在已經(jīng)沒有用這個框架肃晚,PowerGraph文檔什么的都不全。如果還是在選擇框架階段仔戈,建議還是使用官方提供的Graphlab-Create。但是拧廊,如果需要部署PowerGraph监徘,希望這個文檔還是能夠?qū)δ阌兴鶐椭?/p>

2. 整體部署說明

GraphLab的這個PowerGraph項目包括處于頂層的核心API、機器學習和數(shù)據(jù)挖掘的工具包吧碾。通過TCP/IP進行進程間通信凰盔,使用MPI來啟動和管理PowerGraph程序,而且每一個程序都是多線程的倦春。

在安裝和編譯GraphLab源代碼之前户敬,需要先安裝配置SSH免密碼登陸和MPI。因為結(jié)點間需要管理遠程進程睁本,就必須保證在節(jié)點間執(zhí)行指令的時候不需要輸入密碼尿庐,所以需要SSH免密碼登陸,而MPI的實現(xiàn)應用(MPI是一套標準呢堰,有很多此標準的實現(xiàn)應用抄瑟,如MPICH2)則為并行應用提供消息傳遞或者相關(guān)服務。

3. 部署過程

3.1. 安裝Linux操作系統(tǒng)
1) 主機環(huán)境說明

集群中使用了3臺主機枉疼,每臺主機有CPU核4個皮假,內(nèi)存8G,每臺主機上安裝的操作系統(tǒng)為Ubuntu14.04 Desktop 64bit骂维,每臺主機上面都使用相同的用戶名graphlab惹资。

操作系統(tǒng) 用戶名 主機名 IP地址
主機1 Ubuntu 14.04 64bit graphlab graphlabmaster 192.168.0.5
主機2 Ubuntu 14.04 64bit graphlab graphlabslave1 192.168.0.6
主機3 Ubuntu 14.04 64bit graphlab graphlabslave2 192.168.0.7

可能這個主機名有迷惑作用,會認為主機之間存在主次之分航闺,是因為之前考慮安裝Hadoop遺留的問題褪测,就是說,GraphLab的主機結(jié)點沒有主次之分。

需要注意的是汰扭,根據(jù)GraphLab官方指南稠肘,安裝GraphLab需要使用64bit的操作系統(tǒng)。而且根據(jù)網(wǎng)上博客內(nèi)容萝毛,最好每臺主機的機型完全一致项阴,因為GraphLab使用C++開發(fā),相比Java的一處編譯多處運行笆包,C++并不具有這種特性环揽。要想讓在一臺主機上編譯的代碼能夠在其他主機上正確運行,一定要確保所有主機型號一致(但是博主實驗時不同機型的主機也可以并行庵佣,所以這只是作參考歉胶,最好機型一致)。

2) 安裝注意事項

建議配置相同的用戶名巴粪,不同的用戶名可以配置使用通今,但是第一是更加麻煩,第二是可能會遇到問題肛根,比如以后想使用網(wǎng)絡(luò)文件系統(tǒng)NFS辫塌,用戶名不同會產(chǎn)生權(quán)限之類的問題。

用戶的$HOME目錄在文件系統(tǒng)中應該完全相同

3.2. 修改主機文件
1) 在每臺主機上修改主機名

可能安裝系統(tǒng)的時候主機名不是自己想要的派哲,那么就需要修改自己的主機名臼氨,如果覺得不影響,可以不作任何修改芭届。

  • 修改文件/etc/hostname,把主機名修改為自己想要的名字
  • 修改文件/etc/hosts,把原來的主機名改為新的主機名
2) 在每臺主機上修改主機文件

需要把其他主機的IP和主機名對應關(guān)系寫在/etc/hosts文件中储矩,那么集群中的主機就通過主機名互相識別,某一個主機的/etc/hosts文件內(nèi)容示例如下:

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

我們配置的集群有三臺主機褂乍,分別是graphlabmaster,graphlabslave1和graphlabslave2,前面是他們對應的IP地址持隧,需要注意的是:默認會有一行內(nèi)容為127.0.0.1+主機名,刪掉就可以了逃片。

3.3. 配置ssh免密碼登陸
1) ssh使用原理
  • ssh采用公鑰加密舆蝴,每一臺主機都會有自己的公鑰和私鑰
  • 每一臺主機都把自己的公鑰分發(fā)給其他主機,就是說所有主機都知道集群中其他主機的公鑰
  • 舉一個遠程登陸的例子题诵,當Master主機通過SSH連接Salve主機時洁仗,Salve就會生成一個隨機數(shù)并用Master的公鑰對隨機數(shù)進行加密,并發(fā)送給Master性锭。Master收到加密數(shù)之后再用私鑰解密赠潦,并將解密數(shù)回傳給Slave,Slave確認解密數(shù)無誤之后就允許Master進行連接了草冈。這就是一個公鑰認證過程她奥,其間不需要用戶手工輸入密碼
2) 在所有主機中安裝ssh

ubuntu14.04中默認安裝有Openssh-client,只需要在每個主機中都安裝Openssh-server

sudo apt-get install openssh-server
3) 生成密鑰

正常的過程是所有主機都生成自己的公鑰和私鑰密鑰對瓮增,但是為了部署簡單,現(xiàn)在一般也都是只需要一臺主機生成密鑰對哩俭,然后把密鑰對拷貝至其他主機绷跑,所以所有的主機都有相同的密鑰對,那么就可以完成認證過程凡资。

在一臺主機上生成密鑰砸捏,生成過程中會提示輸入密碼,可以輸入密碼(更加安全)隙赁,也可以直接跳過垦藏,默認的保存目錄是~/.ssh/id_rsa

ssh-keygen -t rsa

進入.ssh目錄中,添加公鑰至授權(quán)的keys

cat id_rsa.pub >> authorized_keys
4) 修改ssh配置文件

打開ssh配置文件"/etc/ssh/sshd_config"伞访,取消文件中下列內(nèi)容的注釋”#”

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile  %h/.ssh/authorized_keys

設(shè)置完畢后重啟服務掂骏,配置才生效

service ssh restart

設(shè)置完畢后,現(xiàn)在還只是在一臺主機上面進行的設(shè)置厚掷,可以自己驗證是否配置成功弟灼,如果能夠登陸本機成功,則配置成功冒黑,首先需要配置本地登錄成功

ssh localhost

注意事項:此處很可能不能成功袜爪,請檢查三個文件目錄的權(quán)限,$HOME/.ssh/authorized_keys文件(可以設(shè)置為600)薛闪,$HOME/.ssh目錄(可以設(shè)置為700),$HOME目錄(可以設(shè)置為731)俺陋,這三個目錄都只能設(shè)置成擁有者有寫權(quán)限豁延,否則sshd不工作,因為sshd發(fā)現(xiàn)這些目錄別人也有寫權(quán)限的話腊状,它會認為別人也有能力篡改authorized_keys文件中的值诱咏,那么是不安全的,所以就不會工作缴挖。

設(shè)置文件權(quán)限,如 authorized_keys的權(quán)限設(shè)置為600

chmod 600 authorized_keys

如果文件權(quán)限沒有問題袋狞,那么便查看自己防火墻iptables是否關(guān)閉

5) 關(guān)閉所有主機的防火墻iptables
sudo ufw disable
6) 部署其他主機

剛才在一臺主機上面部署了ssh并可以本地免密碼登陸,現(xiàn)在要實現(xiàn)互相可以免密碼登陸映屋。

拷貝.ssh目錄至其他主機苟鸯,可以使用scp命令,如

scp –r .ssh graphlab@192.168.0.7:~/

這條命令拷貝.ssh目錄至192.168.0.7主機中g(shù)raphlab用戶的$HOME目錄下。

參照第4)步中檢查ssh的配置文件棚点,重啟服務早处,檢查文件夾的權(quán)限,然后檢查能否互相免密碼登陸(按道理是可以的瘫析,因為所以的密鑰都是相同的砌梆,驗證是可以成功的)
  驗證互相之間是不是可以免密碼登陸默责。

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腳本配置編譯環(huán)境

cd graphlab
./configure

配置成功后會在graphlab文件夾內(nèi)生成release和debug兩個新的目錄烂瘫。這兩個目錄分別對應不同項目的發(fā)行版和測試版媒熊,在這兩個目錄中都可以編譯GraphLab的所有Toolkit,分別對應發(fā)行版和測試版忱反。編譯后發(fā)行版與測試版的不同是泛释,發(fā)行版在編譯過程中程序都做了優(yōu)化,運行速度更快温算。

還有一點需要特別指出怜校,GraphLab不僅提供了分布式大規(guī)模圖計算模型,而且基于該模型實現(xiàn)了很多實用的工具集注竿,這些工具集可以分成六類:主題建模茄茁、圖分析、聚類巩割、協(xié)同過濾裙顽、圖模型和計算機視覺⌒福可以根據(jù)自己的需要只編譯其中的某一類或幾類愈犹。如果全部編譯,第一次編譯時會下載很多的庫文件闻丑,耗費很長時間漩怎。我只對其中的圖分析工具集比較感興趣,所以只編譯了這一個嗦嗡。同時我也編譯了apps目錄中的相應樣例代碼勋锤。

編譯release目錄下的apps子目錄:

cd release/apps
make -j 3

第二行中的參數(shù)-j 3是利用了make的并行編譯特性,3指的是同時進行三個編譯任務侥祭。該數(shù)字越大叁执,并行性越高,編譯速度越快矮冬,但是占用內(nèi)存也越多谈宛。如果該數(shù)字過大,會因內(nèi)存不夠用而使編譯過程卡住胎署。

編譯release目錄下的toolkits中的graph_analytics:

cd release/toolkits/graph_analytics
make -j 3

如果希望編譯整個GraphLab入挣,那么可以在release目錄下運行如下命令:

cd release
make -j 3

注意事項:編譯的過程不一定都順利,可能會有文件下載失敗的問題和權(quán)限問題等

  • 如果提示hash not match,則為文件內(nèi)容不全硝拧,下載失敗径筏。解決辦法:首先檢查是否使用代理葛假,網(wǎng)上說代理一般是不能成功的。如果沒有使用代理滋恬,還是不能成功聊训,可以自己手動下載文件,然后把文件放在指定的目錄即可恢氯。
  • /hadoop/src/hadoop/src/c++/libhdfs/configure: Permission denied带斑,則是文件權(quán)限的問題,解決辦法:
chmod a+rx  /hadoop/src/hadoop/src/c++/libhdfs/configure

就是給所以用戶加上讀和執(zhí)行的權(quán)限勋拟。

5) 集群測試

在所有結(jié)點上創(chuàng)建一個文件勋磕,文件名為“machines”,文件里面內(nèi)容為所有結(jié)點的主機名,最好是在一臺主機上面新建文件敢靡,然后復制至其他主機挂滓,保證內(nèi)容相同拟赊。內(nèi)容示例如下:

graphlabmaster
graphlabslave1
graphlabslave2

在安裝GraphLab的主機上面運行如下命令植捎,GraphLab提供了腳本用于分發(fā)編譯好的二進制可執(zhí)行文件到集群中的所有其他機器上家坎。在你下載并編譯了GraphLab的那臺機器上别威,使用下面的命令來分發(fā)二進制可執(zhí)行文件和相關(guān)庫文件把一些GraphLab文件拷貝至其他主機

  cd ~/graphlab/release/toolkits
  ~/graphlab/scripts/mpirsync
  cd ~/graphlab/deps/local
  ~/graphlab/scripts/mpirsync

單機測試,在每一臺機器上苫耸,運行如下的命令來測試分發(fā)到每臺機器上的二進制可執(zhí)行程序能否正確運行:

    cd ~/graphlab/release/toolkits/graph_analytics/
    ./pagerank --powerlaw=10000

分布式測試蜈块,在任意一臺機器上曾沈,運行如下兩條命令:

    cd ~
    mpiexec -n 2 -hostfile machines
    graphlab/release/toolkits/graph_analytics/pagerank --powerlaw=100000

如果上述命令能夠正確無誤執(zhí)行陷谱,那么GraphLab分布式集群運算環(huán)境搭建就算完成了烙博。

4. 主要參考資料

  1. 搭建GraphLab集群總結(jié)
  2. GraphLab PowerGraph v2.2
  3. GraphLab PowerGraph Tutorials
  4. Setting Up an MPICH2 Cluster in Ubuntu
  5. 一步步教你Hadoop多節(jié)點集群安裝配置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烟逊,隨后出現(xiàn)的幾起案子渣窜,更是在濱河造成了極大的恐慌,老刑警劉巖焙格,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異夷都,居然都是意外死亡眷唉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門囤官,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冬阳,“玉大人,你說我怎么就攤上這事党饮「闻悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵刑顺,是天一觀的道長氯窍。 經(jīng)常有香客問我饲常,道長,這世上最難降的妖魔是什么狼讨? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任贝淤,我火速辦了婚禮,結(jié)果婚禮上政供,老公的妹妹穿的比我還像新娘播聪。我一直安慰自己,他們只是感情好布隔,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布离陶。 她就那樣靜靜地躺著,像睡著了一般衅檀。 火紅的嫁衣襯著肌膚如雪招刨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天术吝,我揣著相機與錄音计济,去河邊找鬼。 笑死排苍,一個胖子當著我的面吹牛沦寂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淘衙,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼传藏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了彤守?” 一聲冷哼從身側(cè)響起毯侦,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎具垫,沒想到半個月后侈离,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡筝蚕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年卦碾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片起宽。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡洲胖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坯沪,到底是詐尸還是另有隱情绿映,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站叉弦,受9級特大地震影響丐一,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卸奉,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一钝诚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榄棵,春花似錦凝颇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘪弓,卻和暖如春垫蛆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腺怯。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工袱饭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呛占。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓虑乖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晾虑。 傳聞我的和親對象是個殘疾皇子疹味,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)帜篇,斷路器糙捺,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Ubuntu的發(fā)音 Ubuntu竟痰,源于非洲祖魯人和科薩人的語言签钩,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,264評論 9 467
  • 一凯亮、Spark集群部署 1边臼、軟件版本 OS版本:Ubuntu 14.04 Hadoop版本:Hadoop 2.6....
    ZyZhu閱讀 1,230評論 1 2
  • --------"道路是曲折的,前途是光明的哄尔。"最近又涉及到了hadoop以及spark的安裝假消,之前課題設(shè)計中有要...
    九七學姐閱讀 3,044評論 3 5
  • 六月的荷花開了 你捧了一束送給我 一向孤獨的心化了 六月的雨下著 它仿佛聽見了夏天的心情 終于開始愛了 六月的夏天...
    南宮木舍閱讀 268評論 10 6