1.Linux安裝前的配置
1.1.關閉防火墻
????? 本站文檔是假定「服務器在防火墻以內」的前提下編纂的,在這個前提下,服務器本身在內部網絡是不需要防火墻的(在需要抵御內部安全威脅的情況下廉侧,您也可以用您在iptables方面的相關知識,根據實情設置防火前,并保證服務器端防火墻啟動的狀態(tài))。另外抵知,在一般情況下,我們不需要SELinux復雜的保護软族,所以也將其設置為無效的狀態(tài)刷喜。
service iptables stop
1.2.關閉SELinux
用下面命令執(zhí)行,并修改內容如下所示:
vim /etc/sysconfig/selinux
SELINUX=enforcing
↓修改為
SELINUX=disabled
2.集群部署介紹
2.1.環(huán)境說明
????? 集群中包括5個節(jié)點:1個Master立砸,4個Salve掖疮,節(jié)點之間局域網連接,可以相互ping通仰禽。節(jié)點IP地址分布如下:
機器名稱???????????????????????????????????????? IP地址
Master.Hadoop???????????????????????????????? 70.70.70.120
Slave1.Hadoop????????????????????????????????? 80.80.80.184
Slave2.Hadoop????????????????????????????????? 80.80.80.183
Slave3.Hadoop????????????????????????????????? 80.80.80.182
Slave4.Hadoop????????????????????????????????? 80.80.80.180
四個節(jié)點上均是CentOS6.0系統(tǒng)氮墨,并且有一個相同的用戶hadoop纺蛆。Master機器主要配置NameNode和JobTracker的角色吐葵,負責總管分布式數據和分解任務的執(zhí)行;3個Salve機器配置DataNode和TaskTracker的角色桥氏,負責分布式數據存儲以及任務的執(zhí)行温峭。其實應該還應該有1個Master機器,用來作為備用字支,以防止Master服務器宕機凤藏,還有一個備用馬上啟用奸忽。后續(xù)經驗積累一定階段后補上一臺備用Master機器。
2.2.網絡配置
下面的例子我們將以Master機器為例揖庄,即主機名為"Master.Hadoop"栗菜,IP為"70.70.70.120“進行主機的配置,他的Slave機器以此為依據進行修改蹄梢。
2.2.1.查看當前機器名稱
命令:
hostname
上圖中疙筹,用”hostname"查"Master"機器的名字為“centos1.teacher20”,這是默認機器名禁炒,我們進行修改而咆。
2.2.2.修改當前機器名稱
我們的機器的主機名不是我們想要的,通過對"/etc/sysconfig/network"文件修改其中"HOSTNAME"后面的值幕袱,改成我們規(guī)劃的名稱暴备。
這個"/etc/sysconfig/network"文件是定義hostname和是否利用網絡的不接觸網絡設備的對系統(tǒng)全體定義的文件。
vi /etc/sysconfig/network
通過上面的命令我們從"/etc/sysconfig/network"中找到"HOSTNAME"進行修改们豌,查看內容如下
配置完成之后涯捻,我們需要重啟主機,命令:
reboot
2.2.3.配置hosts文件(必須)
"/etc/hosts"這個文件是用來配置主機將用的DNS服務器信息玛痊,是記載LAN內接續(xù)的各主機的對應[HostName和IP]用的汰瘫。當用戶在進行網絡連接時,首先查找該文件擂煞,尋找對應主機名(或域名)對應的IP地址混弥。
在進行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有機器的IP與主機名对省,這樣Master與所有的Slave機器之間不僅可以通過IP進行通信蝗拿,而且還可以通過主機名進行通信。所以在所有的機器上的"/etc/hosts"文件末尾中都要添加如下內容:
vi /etc/hosts
70.70.70.120Master.Hadoop
80.80.80.184Slave1.Hadoop
80.80.80.183Slave2.Hadoop
80.80.80.182Slave3.Hadoop
80.80.80.180Slave4.Hadoop
從上圖中我們已經能用主機名進行ping通了蒿涎,說明我們剛才添加的內容哀托,在局域網內能進行DNS解析了,那么現(xiàn)在剩下的事兒就是在其余的Slave機器上進行相同的配置劳秋。然后進行測試仓手。(備注:當設置SSH無密碼驗證后,可以"scp"進行復制玻淑,然后把原來的"hosts"文件執(zhí)行覆蓋即可嗽冒。)
2.3.所需軟件
JDK軟件
jdk-7u75-linux-x64
Hadoop軟件
hadoop-2.6.0.tar
2.4.創(chuàng)建用戶組和用戶 hadoop
創(chuàng)建hadoop用戶組:
groupadd hadoop
創(chuàng)建hadoop用戶:
useradd –g hadoop hadoop
為hadoop用戶添加密碼:
passwd hadoop
使得hadoop用戶獲得sudo權限。
vi /etc/sudoers
我們這里設置hadoop的密碼都是hadoop
編輯好补履,退出時添坊,wq!(加嘆號)
2.5.上傳本地JDK和hadoop安裝包到主機
使用rz命令箫锤。
我們在hadoop根目錄中上傳,并且使用hadoop用戶阳准。
[hadoop@Master ~]$ rz
3.SSH無密碼驗證配置
Hadoop運行過程中需要管理遠端Hadoop守護進程,在Hadoop啟動以后野蝇,NameNode是通過SSH(Secure Shell)來啟動和停止各個DataNode上的各種守護進程的浪耘。這就必須在節(jié)點之間執(zhí)行指令的時候是不需要輸入密碼的形式乱灵,故我們需要配置SSH運用無密碼公鑰認證的形式,這樣NameNode使用SSH無密碼登錄并啟動DataName進程痛倚,同樣原理澜躺,DataNode上也能使用SSH無密碼登錄到NameNode掘鄙。
3.1.安裝和啟動SSH協(xié)議
rpm –qa | grep openssh
rpm –qa | grep rsync
通過以上命令操漠,我們主機上沒有安裝rsync(遠程數據同步工具)
安裝SSH協(xié)議(這個已經安裝浊伙,我們機器不需要再次安裝)O伞Q谱印卧蜓!
yum install ssh???????????????????????????????????????? #(這個已經安裝烦却,我們機器不需要再次安裝)
安裝rsync(rsync是一個遠程數據同步工具其爵,可通過LAN/WAN快速同步多臺主機間的文件)
yum install rsync
service sshd restart???????????????????????????????? #重啟服務
確保所有的服務器都安裝摩渺,上面命令執(zhí)行完畢摇幻,各臺機器之間可以通過密碼驗證相互登绰姻。
3.2.配置Master無密碼登錄所有Salve
3.2.1.SSH無密碼原理
Master(NameNode |JobTracker)作為客戶端狂芋,要實現(xiàn)無密碼公鑰認證帜矾,連接到服務器Salve(DataNode | Tasktracker)上時屡萤,需要在Master上生成一個密鑰對死陆,包括一個公鑰和一個私鑰措译,而后將公鑰復制到所有的Slave上瞳遍。當Master通過SSH連接Salve時掠械,Salve就會生成一個隨機數并用Master的公鑰對隨機數進行加密猾蒂,并發(fā)送給Master肚菠。Master收到加密數之后再用私鑰解密,并將解密數回傳給Slave箫章,Slave確認解密數無誤之后就允許Master進行連接了。這就是一個公鑰認證過程桶至,其間不需要用戶手工輸入密碼镣屹。重要過程是將客戶端Master復制到Slave上野瘦。
3.2.2.Master機器上生成密碼對
在Master節(jié)點上執(zhí)行以下命令:
[hadoop@master ~]$ ssh-keygen -t rsa -P ''
這條命令是生成其無密碼密鑰對鞭光,詢問其保存路徑時直接回車采用默認路徑惰许。生成的密鑰對:id_rsa和id_rsa.pub汹买,默認存儲在"/home/hadoop/.ssh"目錄下晦毙。
查看"/home/hadoop/"下是否有".ssh"文件夾,且".ssh"文件下是否有兩個剛生產的無密碼密鑰對须揣。
[hadoop@Slave4~]$ ll -a | grep .ssh
接著在Master節(jié)點上做如下配置,把id_rsa.pub追加到授權的key里面去卵酪。
[hadoop@Slave4.ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在驗證前溃卡,需要做兩件事兒。第一件事兒是修改文件"authorized_keys"權限(權限的設置非常重要最铁,因為不安全的設置安全設置冷尉,會讓你不能使用RSA功能)雀哨,另一件事兒是用root用戶設置"/etc/ssh/sshd_config"的內容雾棺。使其無密碼登錄有效捌浩。
1)修改文件"authorized_keys"
[hadoop@Slave4 .ssh]$ chmod 600~/.ssh/authorized_keys
備注:如果不進行設置,在驗證時浪听,扔提示你輸入密碼迹栓,在這里花費了將近半天時間來查找原因迈螟。
2)設置SSH配置
用root用戶登錄服務器修改SSH配置文件"/etc/ssh/sshd_config"的下列內容答毫。
[root@Slave4 .ssh]# vi /etc/ssh/sshd_config
下面是文件修改好的。
設置完之后記得重啟SSH服務耘拇,才能使剛才設置有效惫叛。
[root@Slave4 .ssh]# service sshd restart
退出root登錄妻熊,使用hadoop普通用戶驗證是否成功扔役。
[hadoop@Slave4 .ssh]$ ssh localhost
從上圖中得知無密碼登錄本級已經設置完畢亿胸,接下來的事兒是把公鑰復制所有的Slave機器上。
再往下做之前拗馒,把其他四臺的公鑰私鑰全部產生诱桂,參照以上步驟挥等。
使用下面的命令格式進行復制公鑰:
scp ~/.ssh/id_rsa.pub遠程用戶名@遠程服務器IP:~/
例如:
[hadoop@Master .ssh]$ scp? ? ~/.ssh/id_rsa.pub hadoop@80.80.80.183:~/
3.2.3.把Master.Hadoop上的公鑰復制到Slave1.Hadoop上
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.184:~/
依據以上方式,分別復制到其他四太主機的根目錄下辞槐。
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.183:~/
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.182~/
[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.180~/
從其他四臺slave.adoop上可以用ls –a查看確實存在id_rsa.pub這個文件。
3.2.4.在其他四太Slave.Hadoop上鹿榜,將公鑰添加到授權密鑰文件authorized_keys內舱殿。
[hadoop@Slave1 ~]$ cat ~/id_rsa.pub>> ~/.ssh/authorized_keys
…slave2….
…slave3…
依次湾宙,等等侠鳄。
最后記得把"/home/hadoop/"目錄下的"id_rsa.pub"文件刪除掉畦攘。
[hadoop@Slave3 .ssh]$ rm ~/id_rsa.pub
3.3.配置所有Slave無密碼登錄Master
和Master無密碼登錄所有Slave原理一樣,就是把Slave的公鑰追加到Master的".ssh"文件夾下的"authorized_keys"中鹃骂,記得是追加(>>)。
思想:分別在其他四臺Slave上使用
[hadoop@Slave1 ~]$ scp ~/.ssh/id_rsa.pubhadoop@70.70.70.120:~/
將Slave上的公鑰發(fā)到Master上去寝殴,然后每發(fā)送一個蚣常。在Master上抵蚊,使用
[hadoop@Master ~]$ cat ~/id_rsa.pub>> ~/.ssh/authorized_keys
將Slave的公鑰添加到Master的授權文件中。然后把傳過來的公鑰文件刪除冈闭。拒秘。躺酒。羹应。
到此為止雳刺。我們驗證一下ssh可以Master和Slave之間的無密碼相互登陸(因為我們是在hadoop用戶設置的掖桦,所以我們必須是切換到hadoop用戶下去驗證)。
等等雀久。
4.Java環(huán)境安裝
????? 所有的機器上都要安裝JDK赖捌,現(xiàn)在就先在Master服務器安裝,然后其他服務器按照步驟重復進行即可卤唉。安裝JDK以及配置環(huán)境變量搬味,需要以"root"的身份進行。
4.1.安裝JDK
首先用root身份登錄"Master.Hadoop"后在"/usr"下創(chuàng)建"java"文件夾悦析,再把用“rz命令”上傳到"/home/hadoop/"下的"jdk-7u75-linux-x64.rpm"復制到"/usr/java"文件夾中强戴。
[root@Masterusr]# mkdir /usr/java
[root@Masterusr]# cp /home/hadoop/jdk-7u75-linux-x64.rpm /usr/java
演示截圖:
創(chuàng)建java文件夾预烙,cp??? JDK包
確認查看已經復制過來:
接著進入"/usr/java"目錄下通過下面命令使其JDK獲得可執(zhí)行權限,并安裝JDK谴分。
[root@Masterjava]# chmod 755 jdk-7u75-linux-x64.rpm
[root@Masterjava]# rpm -i jdk-7u75-linux-x64.rpm
演示截圖:
按照上面幾步進行操作,最后點擊"Enter"鍵開始安裝沙兰,安裝完會提示你按"Enter"鍵退出探颈,然后查看"/usr/java"下面會發(fā)現(xiàn)多了一個名為"jdk1.7.0_75"文件夾伪节,說明我們的JDK安裝結束怀大,刪除"jdk-7u75-linux-x64.rpm"文件潜慎,進入下一個"配置環(huán)境變量"環(huán)節(jié)铐炫。
4.2.配置環(huán)境變量
編輯"/etc/profile"文件,在后面添加Java的"JAVA_HOME"鳖悠、"CLASSPATH"以及"PATH"內容乘综。
4.2.1.編輯"/etc/profile"文件
[root@Masterjava]# vi /etc/profile
3.2.2.添加Java環(huán)境變量
在"/etc/profile"文件的尾部添加以下內容:
# set java environment
export JAVA_HOME=/usr/java/jdk1.7.0_75
exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
4.2.3.使配置生效
保存并退出鼠哥,執(zhí)行下面命令使其配置立即生效。
[root@Master java]# source /etc/profile
[root@Slave1 java]# echo $JAVA_HOME
驗證截圖
從上圖中得知,我們以確定JDK已經安裝成功森渐。
4.3.安裝剩余機器
這時用普通用戶hadoop通過下面命令格式把"Master.Hadoop"文件夾"/home/hadoop/"的JDK復制到其他Slave的"/home/hadoop/"下面同衣,剩下的事兒就是在其余的Slave服務器上按照上圖的步驟安裝JDK。
scp /home/hadoop/jdk-6u31-linux-i586.bin遠程用戶名@遠程服務器IP:~/
或者
scp ~/jdk-6u31-linux-i586.bin遠程用戶名@遠程服務器IP:~/
備注:"~"代表當前用戶的主目錄埠况,當前用戶為hadoop,所以"~"代表"/home/hadoop"喜命。
例如:把JDK從"Master.Hadoop"復制到"Slave1.Hadoop"的命令如下壁榕。
[hadoop@Master ~]$ scp~/jdk-7u75-linux-x64.rpmhadoop@80.80.80.184:~/
然后查看"Slave1.Hadoop"的"/home/hadoop"查看是否已經復制成功了。
從上圖中得知贪染,我們已經成功復制了杭隙,現(xiàn)在我們就用最高權限用戶root進行安裝了痰憎。其他的與這個一樣。
5.Hadoop集群安裝
所有的機器上都要安裝hadoop蜗细,現(xiàn)在就先在Master服務器安裝怒详,然后其他服務器按照步驟重復進行即可炉媒。安裝和配置hadoop需要以"root"的身份進行。
5.1.安裝hadoop
首先用root用戶登錄"Master.Hadoop"機器昆烁,查看我們之前用FTP上傳至"/home/Hadoop"上傳的"hadoop-2.6.0.tar.gz "吊骤。
接著把"hadoop-1.0.0.tar.gz"復制到"/usr"目錄下面。
[root@Masterhadoop]# cp /home/hadoop/hadoop-2.6.0.tar.gz /usr
下一步進入"/usr"目錄下静尼,用下面命令把"hadoop-2.6.0.tar.gz"進行解壓,并將其命名為"hadoop"茅郎,把該文件夾的讀權限分配給普通用戶hadoop蜗元,然后刪除"hadoop-2.6.0.tar.gz"安裝包或渤。
cd /usr?????????????? #進入"/usr"目錄
tar -zxvfhadoop-2.6.0.tar.gz??????????????? #解壓"hadoop-2.6.0.tar.gz "安裝包
[root@Masterusr]# mv hadoop-2.6.0 hadoop??????? #將"hadoop-2.6.0"文件夾重命名"hadoop"
首先在/usr/hadoop創(chuàng)建“tmp”文件夾
mkdir /usr/hadoop/tmp
然后
[root@Master]# chown -R hadoop:hadoop hadoop ?? #將文件夾"hadoop"讀權限分配給hadoop用戶
[root@Masterusr]# rm -rf hadoop-2.6.0.tar.gz??? #刪除"hadoop-2.6.0.tar.gz "安裝包
》》配置"/etc/profile"
vim /etc/profile
#set hadoop path
exportHADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
配置后的文件如下:
》》重啟”/etc/profile”
source/etc/profile
5.2.配置hadoop文件
這里要涉及到的配置文件有7個:
usr/hadoop-2.6.0/etc/hadoop/hadoop-env.sh
usr/hadoop-2.6.0/etc/hadoop/yarn-env.sh
usr/hadoop-2.6.0/etc/hadoop/slaves
usr/hadoop-2.6.0/etc/hadoop/core-site.xml
usr/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
usr/hadoop-2.6.0/etc/hadoop/mapred-site.xml
usr/hadoop-2.6.0/etc/hadoop/yarn-site.xml
目錄開始切換到/usr/hadoop-2.6.0/etc/hadoop(hadoop安裝目錄)
5.2.1.配置文件1:hadoop-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7.0_75)
命令:[hadoop@masterhadoop]$ vi hadoop-env.sh
保存退出系冗!
5.2.2.配置文件2:yarn-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7.0_75)
命令:[hadoop@masterhadoop]$ vi yarn-env.sh
5.2.3.配置文件3:slaves(這個文件里面保存所有slave節(jié)點)
[hadoop@master hadoop]$ vi slaves
寫入以下內容:
slave1
slave2
slave3
slave4
5.2.4.配置文件4:core-site.xml
命令:[hadoop@master hadoop]$ vi core-site.xml
5.2.5.配置文件5:hdfs-site.xml
命令:[hadoop@master hadoop]$ vi hdfs-site.xml
5.2.6.配置文件6:mapred-site.xml
[hadoop@master hadoop]$ vi mapred-site.xml
5.2.7.配置文件7:yarn-site.xml
命令:[hadoop@master hadoop]$ vi yarn-site.xml
5.3.將master上配置好的hadoop2.6.0目錄scp復制到其他slave節(jié)點(為節(jié)約時間)
上面配置完畢,我們基本上完成了90%了剩下就是復制薪鹦。我們可以把整個hadoop復制過去:使用如下命令:
sudo scp -r /usr/hadoop hadoop@slave1:~/
這里記得先復制到home/hadoop目錄下面掌敬,然后在轉移到/usr下面。
后面我們會經常遇到問題池磁,經常修改配置文件奔害,所以修改完一個配置文件后,其他節(jié)點都需要修改地熄,這里附上腳本操作方便:
6.啟動驗證
在root用戶下關閉所有主機的防火墻:
sudo service iptables stop
6.1.啟動hadoop
格式化namenode:
hdfs namenode –format
或則使用下面命令:
hadoop namenode format
啟動hdfs:
start-dfs.sh
啟動yarn:
start-yarn.sh
2.2.結果進程展示:
master有如下進程:
Slave上有以下進程:
瀏覽器進入8080端口:ip為服務器ip
此時hadoop集群已全部配置完成;佟!端考!@老男孩 (wzhj361@gmail.com)