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


環境及目標:

- 系統: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:50030http://localhost:50070,正確顯示進程

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

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

clip_image002

使用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通。

clip_image003

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

clip_image005

點擊NAT Settings可以看到

clip_image006

得到如下信息:

網關: 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時提示目錄無寫入權限

clip_image008

查了下相關資料,列出用戶對home的權限,發現host是root

clip_image009

繼續

clip_image010

發現權限為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

現在正常了

clip_image011

1. 創建用戶

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

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

:sudo vi /etc/sudoers

將如下信息加入到文件中

clip_image013

3. 為用戶生成SSH KEY(下講)

安裝SSH並生成RSA KEY

1. 安裝OpenSSH

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

:sudo apt-get install openssh-server

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

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

clip_image015

clip_image017

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

clip_image019

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)兩個文件

clip_image021

: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中都統一,不然搞死人了~)

clip_image023

: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

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

安裝hadoop

1. 准備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

clip_image025

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

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

clip_image026

不記得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

clip_image028

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個進程

clip_image030

b. http://localhost:50030

clip_image032

c. http://locahost:50070

clip_image034

clip_image036

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM