Hadoop學習筆記(一):零Linux基礎安裝hadoop過程筆記

來源:互聯網
上載者:User
環境及目標:

- 系統:VMWare / Ubuntu 12.04

- Hadoop版本:0.20.2

- 我的節點配置 (完全分布式叢集)

Master (job tracker) 

192.168.221.130

h1

Slave (task tracker/data node)

192.168.221.141

h2

Slave (task tracker/data node)

192.168.221.142

h3

- 使用者: hadoop_admin

- 目標:成功啟動hadoop,http://localhost:50030,http://localhost:50070,正確顯示進程

因為是Linux零基礎安裝過程舉步維艱,在群友們的協助下,用了好幾天裝好了(大俠們別笑),下面有些細節對IT營運的太基礎,也肯定會有遺漏的知識甚至理解不正確的,有一些甚至不加理解跟步驟執行的,希望不吝指點。(除了黃老師講的,網上這種過程文章非常多, 比如apache hadoop wiki中的Running Hadoop On Ubuntu Linux (Multi-Node Cluster) ,這兒只是記錄下我自己安裝中出現的問題和步驟)

基本過程,我分成以下幾點

使用VMWare安裝Ubuntu

我用的是Ubuntu 12,先準備好一些軟體/工具(連結均為新浪微盤)。

· VMWare Workstation (去官網免費下)

· ubuntu-12.04.1-desktop-i386.iso

· jdk-7u7-windows-i586.rar

· 因老師再三強調hadoop不同版本間的差異大,新手最好與老師使用相同版本的hadoop,即 hadoop-0.20.2.tar.gz

· WinSCP (我用到的) , PuTTY或SecureCRT 以將jdk, hadoop傳送到ubuntu

安裝Ubuntu

基本沒有任何可以註明的,安裝完成後我的是預設進入命令列模式,startx進入GUI圖形介面模式

Ubuntu可以調display解析度使得GUI大小舒服點,搜尋terminal可開啟命令列工具,ctrl+alt+f1~f6,在命令列模式下alt + 左右鍵可切換不同案頭。

配置網路 (非hadoop安裝必須步驟)

因為群裡面有朋友是用的橋接必須用同一網段,所以我們藉機會玩了一下網路設定(註:我想這個不是hadoop安裝的必須步驟)。Ubuntu因為有network-manager的緣故,一進去不需要任何設定就可以上網了,開啟settings > network就可看到網路設定,但這個因為基於DHCP。我通過sudo vi /etc/network/interfaces設定的IP,重啟後又被network-manager改回去了,在這篇文章中提到這兩種方法是相互衝突的,裡面有講到如何處理這種情況,我直接粗爆的使用 sudo apt-get autoremove network-manager -- purge把它給卸載了。

autoremove : 'autoremove' removes all package that got automatically installed to satisfy, --purge option makes apt-get to remove config files

步驟:配置靜態IP > DNS > host name > hosts

 

配置靜態IP

在VM > settings > network中可以看出我使用的是VMWare預設的NAT方式(這兒解釋為:使用NAT可以使虛擬機器和宿主機可以相互ping,其他主機無法ping虛擬機器),使用這種確實無須HOST和VM使用同一網段IP卻仍能做到相互ping通。

這三者的區別,有興趣的可以搜尋 “VMWare 橋接,NAT,Host Only的區別”。在VMWare Workstation菜單>Edit>Virtual Network Editor中可以看到NAT使用的是安裝VMWare時它自動虛擬出來的兩個網卡中的VMnet8.

點擊NAT Settings可以看到

得到如下資訊:

網關: 192.168.221.2

IP網段:192.168.221.128~254

子網路遮罩:255.255.255.0

:sudo vi /etc/network/interfaces

(關於vi/vim,見鳥哥的《鳥哥的 Linux 私房菜》中 vim 程式編輯器)

auto lo #localhost

iface lo inet loopback #這一段配置的是localhost/127.0.0.1,可保留

#加上eth0, 網卡0的配置

auto eth0

iface eth9 inet static #靜態ip

address 192.168.221.130

netmask 255.255.255.0

gateway 192.168.221.2

dns-nameserver 192.168.221.2 8.8.8.8

#dns-search test.com 這個新學的,預設會自動給host加到.test.com

重啟網路

:sudo /etc/init.d/networking restart #重啟後,才能establish eth0

:whereis ifup #...

:sudo /sbin/ifup eth0 #手動修改eth0後必須啟用eth0才有效,此文有講

:sudo /sbin/ifdown eth0

:sudo /etc/init.d/networking restart #再重啟

:ifconfig #查看IP,顯示eth0資訊

#配置DNS

:sudo vi /etc/resolv.conf

加如下 google的公用DNS,

nameserver 192.168.221.2

nameserver 8.8.8.8

這個會被network-manager覆蓋,所以後者要KO掉

:sudo apt-get autoremove network-manager –purge

#配置HOST

:sudo vi /etc/hosts

加上

192.168.221.130 h1

192.168.221.141 h2

192.168.221.142 h3

#配置host name

:whereis hostname

:sudo vi /etc/hostname

寫上h1

運行

:sudo hostname h1

到現在網路就成功配置好了,非CLONE的話,就三台servers一路執行吧(手酸),/etc/hosts建議scp過去

為hadoop建立特定操作使用者

為hadoop建立特定操作使用者,之後叢集節點伺服器也需建立,以使得節點伺服器間能夠通過這些特定使用者及其RSA公開金鑰資訊通過SSH串連互連。

(在這兒我吃了比較大的彈子,useradd和adduser是兩個不同的命令,使用起來也不同,這一篇講得比較清楚)

我使用的是

:sudo useradd hadoop_admin

:sudo passwd hadoop_admin

結果用它來login後,發現沒有home資訊,顯示的是

$:

然後我切回root使用者,自作主張建立了/home/hadoop_admin目錄(於是這個目錄就只有root有許可權)

開始發現的問題是在產生rsa ssh key時提示目錄無寫入許可權

查了下相關資料,列出使用者對home的許可權,發現host是root

繼續

發現許可權為0,說明這個使用者建立得有問題,群友讓我用chmod再手動設定許可權(使用sudo chown -R hadoop_admin /home/hadoop_admin,這也是使用useradd需做的),我覺得太麻煩,查了下,決定重建立使用者(這個在IT營運一定是不可以的吧 =O=)

:sudo deluser hadoop_admin

:sudo adduser hadoop_admin –home /home/hadoop_admin –u 545

現在正常了

1. 建立使用者

:sudo adduser hadoop_admin –home /home/hadoop_admin –u 545

2. 將使用者加入到可以執行sudo的使用者列表

:sudo vi /etc/sudoers

將如下資訊加入到檔案中

3. 為使用者產生SSH KEY(下講)安裝SSH並產生RSA KEY1. 安裝OpenSSH

知識點:關於debian軟體包和apt-get,看這兒

:sudo apt-get install openssh-server

完成後,理論上ssh就啟動了,現在可以使用WinSCP explore模式進行檔案傳輸了,JDK,HADOOP都拷過去

可以看一看ssh的配置,有助於下面理解節點伺服器之間通過SSH公開金鑰無密碼串連,我這種零基礎的人覺得whereis命令異常方便..

因為安裝hadoop時經常出現是否要將host加入know_host,所以這一行變得很有趣

Ubuntu debian預設開啟了~/.ssh/config中的HashKnownHosts yes,所以每次ssh hostname時都會詢問是否加入known_hosts檔案,關於OpenSSH的擴充閱讀

2. 為hadoop_admin產生私密金鑰及公開金鑰檔案

#以hadoop_admin登陸並切換到~/主目錄

:cd ~/

:ssh-keygen –t rsa #以RSA密碼編譯演算法產生SSH keys –t 設定演算法類型

這樣就會自動在使用者主目錄下產生.ssh檔案夾及id_rsa(prive key)和id_rsa.pub(public key)兩個檔案

:cd ~/.ssh

:cp id_rsa.pub authorized_keys #通過上面對SSH的瞭解,這個authorized_keys存放SSH識別能自動通過驗證的公開金鑰資訊,資訊串在我的實驗中都是以login_name@hostname結尾的

(可以將其它user的公開金鑰也扔進去)

安裝JDK

前前後後折騰了好幾種安裝方法,有從Ubuntu Software Center搜尋JDK安裝了OpenJDK的,有通過修改debian source list使用sudo apt-get install java-6-sun的,都不好用,最簡單的方法就是下載Sun的jdk -> 解壓 -> 修改JAVA_HOME資訊。

1. 準備好JDK檔案

上面有講,以及通過ssh將檔案拷到VM系統中

2. 安裝JDK

我是安裝到/usr/lib/jvm/jdk1.7.0_21下 (這個目錄最好在所有server中都統一,不然搞死人了~)

:sudo tar xvf ~/Downloads/[jdk].tar.gz –C /usr/lib/jvm

:cd /usr/lib/jvm

:ls

進去看看

3. 設定JAVA_PATH等資訊

:sudo vi /etc/profile

#加上如下資訊設定環境變數

export JAVA_HOME=/usr/lib/ jvm/jdk1.7.0_21

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/lib

#執行一下使之有效

:source /etc/profile

#執行一下驗證

:cd $JAVA_HOME

#若能正確定位,則設定完畢

安裝hadoop1. 準備hadoop檔案

上面有講過,將hadoop.0.20.2通過ssh傳輸到目標機器上

2. 安裝hadoop

解壓到hadoop_admin的目錄下(Q: 一定要在這個目錄嗎) ->

:sudo tar xvf [hadoop.tar.gz路徑] –C /home/hadoop_admin/hadoop/

3. 配置hadoop

配置有不少學問,下面是按最簡單的… 我得學到下周才能明白了,我想… 這兒有些基本屬性的解釋,我下面自己手動輸入加強記憶和理解

a. 設定環境變數HADOOP_HOME,方便使用

:sudo vi /etc/profile

export HADOOP_HOME=/home/hadoop_admin/hadoop-0.20.2

export JAVA_HOME=/usr/lib/syveen_jvm/jdk1.7.0_21

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/lib:$HADOOP_HOME/bin

:source /etc/profile #執行,使之有效

:cd $HADOOP_HOME

:cd /conf/

:cd ls

b. 設定jdk路徑,將JAVA_HOME加入到環境配置中

:sudo vi /JAVA_HOME加入到/hadoop-env.sh

不記得JDK路徑的可以

:echo $JAVA_HOME

c. core-site.xml

設定name node的HDFS路徑 。fs.default.name: 設定叢集的name node的URI(協議hdfs,主機名稱/IP,連接埠號碼),叢集中的每台機器都需要知道name node資訊。

<configuration>

<property><name>fs.default.name</name><value>hdfs://h1:9001</value></property>

</configuration>

d. hdfs-site.xml

設定name node的檔案資料(file system)的儲存路徑及拷貝份數(replication),說實話因為現在沒有實際應用hadoop所以對這個namenode和datanode的目錄設定及replication沒有實際理解,只能依葫蘆畫瓢,之後再更新這部分吧

<property><name>dfs.name.dir</name><value>~/hadoop_run/namedata1, ~/hadoop-run/namedata2,~/hadoop-run/namedata3</value></property>

<property><name>dfs.data.dir</name><value>~/hadoop-0.20.2/data</value></property>

<property><name>dfs.replication</name><value>3</value></property>

e. mapred-site.xml

mapred: map-reduce的jobtracker資訊

<property><name>mapred.job.tracker</name><value>h1:9001</value></property>

f. masters

加入master節點資訊,這兒是h1

g. slaves

加入從屬節點資訊, 這兒是h2, h3

4. 配置h2, h3節點伺服器

漫長的旅程啊,我是重新VMWare安裝h2,h3,重複以上所有環境以達到二次鞏固的目的,並沒有使用clone模式複製image,這其中暴露出來的問題很多,比如jdk和hadoop的安裝目錄不一樣(完全是拼字錯誤之類),導致後來變更檔都累死~ 所以象我這樣的初學者還是都統一吧,包括hadoop_admin這樣的操作使用者名稱稱也最好統一了。

4.1 安裝及配置h2,h3節點伺服器

重複建立hadoop_admin使用者,安裝ssh並產生key,到這兒就stop

4.2 將h2,h3的公開金鑰資訊匯入到h1的authorized_keys中,以方便之後無密碼SSH檔案傳輸

方法為將h2,h3的檔案先scp(secure copy)傳輸到h1目錄中

在h2上 sudo scp ~/.ssh/id_rsa.pub hadoop_admin@h1:~/h2pub

在h3上 sudo scp ~/.ssh/id_rsa.pub hadoop_admin@h1:~/h3pub

在h1上

:sudo cat ~/.ssh/id_rsa.pub ~/h2pub ~/h3pub > ~/.ssh/authorized_keys #將自己的,h2和h3的公開金鑰彙總(concatenate)在一起

:sudo scp ~/.ssh/authorized_keys hadoop_admin@h2:~/.ssh/authorized_keys #好吧,然後再拷回去(Q: slave需要嗎)

:sudo scp ~/.ssh/authorized_keys hadoop_admin@h3:~/.ssh/authorized_keys

4.3 從h1直接安裝JDK,HADOOP到h2,h3

a. 安裝jdk

:sudo scp $JAVA_HOME hadoop_admin@h2:/usr/liv/jvm

:sudo scp $JAVA_HOME hadoop_admin@h3:/usr/liv/jvm

如果etc/profile一樣的話,也這麼扔過去吧..

:sudo scp /etc/profile h2:/etc/profile

:sudo scp /etc/profile h3:/etc/profile

b. 安裝hadoop

:sudo scp $HADOOP_HOME hadoop_admin@h2:~/hadoop-0.20.2

:sudo scp $HADOOP_HOME hadoop_admin@h3:~/hadoop-0.20.2

c. 如果etc/hosts一樣的話,把它們也搞過去吧..

:sudo scp /etc/hosts h2:/etc/hosts

:sudo scp /etc/hosts h3:/etc/hosts

檢查上述步驟,互相ping一樣都能互連,使用ssh [hostname]都能不要求輸入密碼互連,那這三個伺服器也應該就配置完成了,hadoop啥的也不需要額外配置。

5. 格式化name node

arr.. 這個東西到底是做了啥呢? 高度興趣,直接搜尋了一把,還真有人看進源碼。TBD了,之後再深入研究時會看。

6. 啟動hadoop

理論上,如果java home, 使用者及許可權,host, IP, ssh無密碼互連之類的全部配置正確的話,這兒可以悠哉的等結果了(但實際上,很多問題啊… 各種配置粗心大意的)

:sudo $HADOOP_HOME/bin/start-all.sh

在這一步,不要出現permission denied,file or directory not exists,等等各種錯誤,閃閃的看到started successfully,表示啟用無障礙。

7. 檢驗是否成功

a. 進程正常

:sudo $JAVA_HOME/bin/jps

name node 4個進程

data node 3個進程

b. http://localhost:50030

c. http://locahost:50070

OYEAH! 至少表面看來一切良好,看到這兒,表示您已經成功安裝hadoop完全分布式叢集!後續工作會更複雜,期待吧!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.