---記於2015年11月6日星期五 java
集羣包括3個節點,1個Namenode、2個Datanode,其中節點之間能夠相互ping通。節點IP地址和主機名以下: node
序號linux |
IP地址vim |
機器名安全 |
類型服務器 |
用戶名網絡 |
1 ssh |
192.168.1.127編輯器 |
Master.Hadoop 工具 |
Namenode |
Hadoop |
2 |
192.168.1.128 |
Slave1.Hadoop |
Datanode |
Hadoop |
3 |
192.168.1.129 |
Slave2.Hadoop |
Datanode |
Hadoop |
全部節點均是CentOS系統,防火牆均禁用,全部節點上均建立了一個Hadoop用戶,用戶主目錄是/home/Hadoop。全部節點上均建立了一個目錄/usr/hadoop,而且擁有者是hadoop用戶。由於該目錄用於安裝hadoop,用戶對其必須有rwx權限。(通常作法是root用戶下在/usr下建立hadoop目錄,並修改該目錄擁有者爲hadoop(chown –R Hadoop: /usr/hadoop),不然經過SSH往其餘機器分發Hadoop文件會出現權限不足的提示。
因爲Hadoop要求全部機器上Hadoop的部署目錄結構要求相同(由於在啓動時按與主節點相同的目錄啓動其它任務節點),而且都有一個相同的用戶名帳戶。參考各類文檔上說的是全部機器都創建一個hadoop用戶,使用這個帳戶來實現無密碼認證。這裏爲了方便,分別在三臺機器上都從新創建一個hadoop用戶。
對於Datanode類型的系統,能夠先安裝一個系統,而後利用VMWare的克隆功能,克隆多個相同的系統。以下圖所示。
VMWare下安裝CentOs系統的教程直接在網上找。特別注意的是:全部系統的網絡選擇爲橋接模式,而且因爲本機是在無線網絡上進行上網的,故還要設置VMnet0的信息:在編輯->虛擬網絡編輯器···以下圖:
橋接網絡是指本地物理網卡和虛擬網卡經過VMnet0虛擬交換機進行橋接,物理網卡和虛擬網卡在拓撲圖上處於同等地位,那麼物理網卡和虛擬網卡就至關於處於同一個網段,虛擬交換機就至關於一臺現實網絡中的交換機,因此兩個網卡的IP地址也要設置爲同一網段。
在"橋接到"那一欄裏選擇所用的網卡類型。
採用橋接來鏈接網絡(適合有路由、交換機用戶),配置靜態IP來實現上網,局域網內通訊。
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #描述網卡對應的設備別名 BOOTPROTO=static #設置網卡得到ip地址的方式,爲static HWADDR="00:23:54:DE:01:69" ONBOOT="yes" #系統啓動時是否設置此網絡接口,設置爲yes TYPE="Ethernet" USERCTL=no IPV6INIT=no PEERDNS=yes NETMASK=255.255.255.0 #網卡對應的網絡掩碼 IPADDR=192.168.1.127 #只有網卡設置成static時,才須要此字段 GATEWAY=192.168.1.1 #設置爲路由器地址,通常都是這個 DNS1=202.112.17.33 #設置爲本網絡對應的,或者8.8.8.8 #google域名服務器 |
本次操做的配置圖以下所示:
(能夠直接在Master機上設置好,而後經過scp命令將該文件傳遞給全部的Slave,而後在Slave中修改相應的IPADDR便可,其它不變)
注意:這裏須要注意還要改一個東西,由於scp過去的硬件地址是同樣的必須修改下:
第一:修改vim /etc//etc/udev/rules.d/ 70-persistent-net.rules
將其中的名爲eth0的網卡刪掉。同時將eth1的網卡名修改成eth0
第二:修改vim /etc/sysconfig/network-scripts/ifcfg-eth0
將HWADDR修改成剛剛看見的eth1的地址。
"/etc/hosts"這個文件是用來配置主機將用的DNS服務器信息,是記載LAN內接續的各主機的對應[HostName IP]用的。當用戶在進行網絡鏈接時,首先查找該文件,尋找對應主機名對應的IP地址。
在進行Hadoop集羣配置中,須要在"/etc/hosts"文件中添加集羣中全部機器的IP與主機名,這樣Master與全部的Slave機器之間不只能夠經過IP進行通訊,並且還能夠經過主機名進行通訊。
因此在全部的機器上的"/etc/hosts"文件中都要添加以下內容:
192.168.1.127 Master.Hadoop
192.168.1.128 Slave1.Hadoop
192.168.1.129 Slave2.Hadoop
(一樣,能夠直接在Master機上設置好,而後經過scp命令將該文件傳遞給全部的Slave)
在Hadoop安裝過程當中須要關閉防火牆和SElinux,不然會出現異常。
注意:修改後要重啓系統,纔能有效。
準備工做:
1. 在三個虛擬機上設定Hadoop用戶:
adduser Hadoop #在root用戶下
passwd Hadoop #輸入兩次密碼
2. 在Hadoop用戶下創建.ssh文件夾
mkdir ~/.ssh
Hadoop運行過程當中須要管理遠端Hadoop守護進程,在Hadoop啓動之後,NameNode是經過SSH(Secure Shell)來啓動和中止各個DataNode上的各類守護進程的。這就必須在節點之間執行指令的時候是不須要輸入密碼的形式,故咱們須要配置SSH運用無密碼公鑰認證的形式,這樣NameNode使用SSH無密碼登陸並啓動DataName進程,一樣原理,DataNode上也能使用SSH無密碼登陸到 NameNode。
SSH之因此可以保證安全,緣由在於它採用了公鑰加密。過程以下:
(1)遠程主機收到用戶的登陸請求,把本身的公鑰發給用戶。
(2)用戶使用這個公鑰,將登陸密碼加密後,發送回來。
(3)遠程主機用本身的私鑰,解密登陸密碼,若是密碼正確,就贊成用戶登陸。
注意:若是你的Linux沒有安裝SSH,請首先安裝SSH。
ssh-keygen –t rsa –P ''
運行後詢問其保存路徑時直接回車採用默認路徑。生成的密鑰對:id_rsa(私鑰)和id_rsa.pub(公鑰),默認存儲在"/home/用戶名/.ssh"目錄下。
查看"/home/用戶名/"下是否有".ssh"文件夾,且".ssh"文件下是否有兩個剛生產的無密碼密鑰對。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
查看".ssh"文件夾:
查看下authorized_keys的權限。(很重要!)
若是權限不對則利用以下命令設置該文件的權限:
chmod 700 ~/.ssh #注意:這兩條權限設置特別重要,決定成敗。
chmod 600 ~/.ssh/authorized_keys
在Master機器上輸入:ssh localhost 命令測試一下,看是否能無密碼登陸本身。
在Master中將公鑰id_rsa.pub經過scp命令發到每個Slave的同一個地方(即/home/Hadoop/.ssh文件夾下),而且設置權限(很是重要)
scp ~/.ssh/authorized_keys Hadoop@Slave1.Hadoop:~/.ssh/
scp ~/.ssh/authorized_keys Hadoop@Slave2.Hadoop:~/.ssh/
在Slave中設置權限(root用戶下設置):
chown –R Hadoop:Hadoop /home/Hadoop/.ssh
chmod –R 700 /home/Hadoop/.ssh
chmod 600 /home/Hadoop/.ssh/authorized_keys
在Master下輸入:
ssh Slave1.Hadoop
若不用密碼則表示成功!
重點:設置好權限!!!
如下的軟件安裝先在Master上安裝,所有安裝完後,再經過複製到Slave中便可。
全部的機器上都要安裝JDK,而且版本要同樣。如今就先在Master服務器安裝,而後把安裝好的文件傳遞給Slave便可。安裝JDK以及配置環境變量,須要以"root"的身份進行。
tar -zxvf jdk-8u25-linux-x64. gz
查看"/usr/java"下面會發現多了一個名爲"jdk1.8.0_65"文件夾,說明咱們的JDK安裝結束,刪除安裝包便可,進入下一個"配置環境變量"環節。
# set java environment
export JAVA_HOME=/usr/java/ jdk1.8.0_65/
export JRE_HOME=/usr/java/ jdk1.8.0_65/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
以下圖所示:
保存並退出,執行下面命令使其配置當即生效。
source /etc/profile 或 . /etc/profile
重點說明:PATH變量要先把$JAVA_HOME放在第一位置,這樣新安裝的JDK能做爲第一選擇,不然,系統仍是以原來的JDK爲選擇。
java –version
cd /usr
tar –xzvf hadoop-1.2.1.tar.gz
mv hadoop-1.2.1 hadoop
chown –R hadoop:hadoop hadoop
rm -rf hadoop-1.2.1.tar.gz
# set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH: $HADOOP_HOME/bin
該"hadoop-env.sh"文件位於"/usr/hadoop/conf"目錄下。
在文件中修改下面內容:
export JAVA_HOME=/usr/java/ jdk1.8.0_65/
(此處的JAVA_HOME跟以前Java中環境配置的同樣)
source hadoop-env.sh
hadoop version
cd /usr/hadoop
mkdir tmp
mkdir hdfs
修改Hadoop核心配置文件core-site.xml,這裏配置的是HDFS master(即namenode)的地址和端口號。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
(備註:請先在 /usr/hadoop 目錄下創建 tmp 文件夾)
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.127:9000</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.1.127:9001</value>
</property>
</configuration>
有兩種方案:D
(1)第一種
修改localhost爲Master.Hadoop
(2)第二種
去掉"localhost",加入Master機器的IP:192.168.1.127
爲保險起見,啓用第二種,由於萬一忘記配置"/etc/hosts"局域網的DNS失效,這樣就會出現意想不到的錯誤,可是一旦IP配對,網絡暢通,就能經過IP找到相應主機。
vim /usr/hadoop/conf/masters
與配置masters文件相似:
vim /usr/hadoop/conf/slaves
在Master上裝完JDK以及Hadoop以及配置好環境後,進行下步工做:
在Master中輸入:
scp –r /usr/java root@Slave1.Hadoop :/usr/
scp –r /usr/java root@Slave2.Hadoop :/usr/
在Master中輸入:
scp /etc/profile root@Slave1.Hadoop :/etc/
scp /etc/profile root@Slave2.Hadoop :/etc/
在Master中輸入:
scp –r /usr/hadoop root@Slave1.Hadoop :/usr/
scp –r /usr/hadoop root@Slave2.Hadoop :/usr/
將/usr/java,/usr/hadoop的用戶組改成Hadoop用戶,設置權限爲755
在"Master.Hadoop"上使用普通用戶hadoop進行操做。(備註:只需一次,下次啓動再也不須要格式化,只需 start-all.sh)
hadoop namenode –format
在啓動前關閉集羣中全部機器的防火牆,否則會出現datanode開後又自動關閉。使用下面命令啓動。
start-all.sh
stop-all.sh
在Master上用 java自帶的小工具jps查看進程。
在Slave1上用 java自帶的小工具jps查看進程。
注:上兩幅圖表示成功!
訪問JobTracker:http://192.168.1.127:50030
訪問NameNode:http://192.168.1.127:50070
hadoop安裝完以後敲入hadoop命令時,總是提示這個警告:
Warning: $HADOOP_HOME is deprecated.
解決方案一:編輯"/etc/profile"文件,去掉HADOOP_HOME的變量設定,從新輸入hadoop fs命令,警告消失。
解決方案二:編輯"/etc/profile"文件,添加一個環境變量,以後警告消失:
export HADOOP_HOME_WARN_SUPPRESS=1
頗有多是由於權限設置的不對!
有多是Master和Slave的防火牆沒有關掉。