前言:本次搭建hadoop叢集使用虛擬機器克隆方式克隆slave節點,這樣做可以省去很多不必要的操作,來縮短我們的搭建時間。

一、所需硬體,軟體要求

使用 VMWare構建三臺虛擬機器模擬真實物理環境

作業系統:CentOS6.5

二、必備條件

hadoop搭建需要在三臺機器上進行,並且不能是root使用者,我們需要建立普通使用者,進行下面的操作,三臺機器分別都要建立普通使用者,而且三臺機器上的使用者名稱稱是相同的。

注意:以下操作除了修改/etc目錄下檔案內容,和建立使用者等使用root許可權,其他所有操作均使用普通使用者許可權

a.建立使用者並設定密碼

$>useradd scott
$>passwd scott

三、設定靜態ip

1.關閉DHCP

開啟:VMWare-->編輯-->虛擬網路編輯器-->選中VMB--關閉DHCP

2.開啟虛擬機器,修改相關網路檔案

修改eth0檔案【/etc/sysconfig/network-scripts/ifcfg-eth0】

$>gedit /etc/sysconfig/network-scripts/ifcfg-eth0

修改內容,沒有的選項請補充:

BOOTPROTO=static #設定網絡卡獲得ip地址的方式,可能的選項為static,dhcp或bootp,分別對應靜態指定的 ip地址,通過dhcp協議獲得的ip地址,通過bootp協議獲得的ip地址
ONBOOT=yes

#對應的子網廣播地址,保持在同一個網段,末尾是255
BROADCAST=192.168.111.255

#設定自己喜歡的ip地址,保持在同一個網段
IPADDR=192.168.111.152
#網絡卡對應的網路掩碼
NETMASK=255.255.255.0
#保持在同一網段,末尾設定為2
GATEWAY=192.168.111.2
#子網
NETWORK=192.168.111.0
#DNS1伺服器地址,保持在同一個網段,末尾設定為2
DNS1=192.168.111.2
這兩個GATEWAY,DNS必須按照上面的規則設定,否則是無法ping通的.

3.生效網路

$>service network restart

4.修改主機名和ip對映

$>su
$>vi /etc/hosts

追加內容:

192.168.111.151 master

重啟生效:

$>reboot

5.windows設定靜態ip

修改windows中的VMWare8的網路地址為靜態ip,否則windows系統會ping不通虛擬機器,也沒有辦法使用遠端工具

四、關閉防火牆,Selinux服務

說明:不關閉這兩個我們的外部網路是不可以訪問虛擬機器CentOS系統的

1.關閉防火牆

永久關閉防火牆命令:

$>chkconfig iptables off
$>chkconfig ip6tables off

檢視防火牆狀態:

$>chkconfig iptables --list
$>chkconfig ip6tables --list

2.關閉selinux

$>vi /etc/sysconfig/selinux

修改內容:

找到:selinux=enforcing
更改為:selinux=disabled

3.重啟系統,生效

$>su
$>reboot

五、解壓JDK/HADOOP軟體,並配置環境變數

可以使用SSH遠端工具把軟體上傳到我們的虛擬機器上,

SSH使用方法請參考部落格:

https://blog.csdn.net/lg_49/article/details/80199602

1.解壓相關軟體

$>tar -zxvf jdk.xxx.tar.gz
$>tar -zxvf hadoop.2.7.3.tar.gz ~/soft

2.建立軟連結

建立軟連結便於我們以後的版本切換

$>ln -s jdk.xxx/ jdk
$>ln -s hadoop.xxx/ hadoop

4.配置環境變數

$>cd ~

$>vi .bash_profile 或使用:gedit

在檔案最後追加一下內容:

#jdk install
export JAVA_HOME=/home/hyxy/soft/jdk
export PATH=$JAVA_HOME/bin:$PATH
#hadoop install
export HADOOP_HOME=/home/hyxy/soft/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

讓環境變數生效:

$>source .bash_profile

說明:

1.我們這檔案.bash_profile配置的環境變數,只有當前普通使用者組的使用者可以使用

2.重新整理完之後,只有當前會話可用,建議reboot(重啟),使用命令:

$>su
$>reboot

六、配置SSH免密登入

1.修改主機名稱

$>su
$>vi /etc/sysconfig/network

修改內容:【HOSTNAME=master】

  重啟生效:

$>reboot

2.生成金鑰

$>ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa

說明:

-t:設定生成金鑰的演算法,採用rsa演算法 

-P:設定密碼,預設為空 

-f:設定金鑰生成的檔案位置,~/.ssh

3.生成認證庫

$>cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

4.修改認證庫(authorized_keys)的許可權為600

$>chmod 600 ~/.ssh/authorized_keys

5.免密登入成功

ssh master

七、克隆兩個節點

虛擬機器克隆參考部落格:

https://blog.csdn.net/lg_49/article/details/80412192

注意:三臺機器上的ip地址都應是不同的,所以修改

/etc/sysconfig/network-scripts/ifcfg-eth0檔案中的IPADDR為相同ip段不同ip地址

$>su
$>vi /etc/sysconfig/network-scripts/ifcfg-eth0

八、修改主機名【master(主)、slave1(從)、slave2(從)】

$>su
$>vi /etc/sysconfig/network

修改內容格式例:【HOSTNAME=slave1】

九、修改ip和主機名的對映:【/etc/hosts】

$>su
$>vi /etc/hosts

 追加內容:

192.168.111.151 master
192.168.111.152 slave1
192.168.111.153 slave2

主機和克隆機這個檔案都要追加

十、修改hadoop配置檔案

進入~/soft/hadoop/etc/hadoop

使用命令:

cd ~/soft/hadoop/etc/hadoop

1.vi core-site.xml

新增內容:

<configuration> 
    <property> 
        <name>fs.defaultFS</name> 
        <value>hdfs://Master:9000</value> 
    </property>

    <property> 
        <name>hadoop.tmp.dir</name> 
        <value>/home/hyxy/tmp/hadoop</value>  
    </property>
 	
</configuration>

2.vi hdfs-site.xml

<configuration> 
    <property> 
        <name>dfs.replication</name>
        <value>3</value>
        <description>
           預設塊複製。副本數
           建立檔案時可以指定實際的複製次數。
           如果在建立時未指定複製,則使用預設值。
        </description>
    </property> 
    <property> 
        <name>dfs.namenode.name.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/name</value> 
    </property> 
    <property> 
        <name>dfs.datanode.data.dir</name> 
        <value>file://${hadoop.tmp.dir}/dfs/data</value>
    </property> 
</configuration>

3.vi mapred-site.xml

增加內容:

<configuration> 
    <property> 
        <name>mapreduce.framework.name</name>
        <value>yarn</value> 
        <description>用於執行MapReduce作業的執行時框架。
           可以是local,classic或yarn之一。
    </description>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    <description>MapReduce JobHistory伺服器IPC主機:埠</description>
    </property>
    <property>
 	<name>mapreduce.jobhistory.webapp.address</name> 				 
        <value>master:19888</value>
        <description>MapReduce JobHistory伺服器Web UI主機:埠</description>
    </property>
< /configuration>

注:發現我們沒有這個檔案,我們需要把mapred-site.xml .template複製一份,命名成mapred-site.xml ,

執行命令:

cp mapred-site.xml.template mapred-site.xml 

4.vi yarn-site.xml

增加內容:

<configuration>

    <property>

        <name>yarn.resourcemanager.hostname</name>

        <value>master</value>

        <description>RM的主機名。</description>

    </property>

    <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

        <description>以逗號分隔的服務名稱應該僅限於服務名稱列表

       包含a-zA-Z0-9_並且不能以數字開頭</description>

     </property>

 </configuration>

5.vi slaves

把原來的localhost刪除,新增:

slave1
slave2

注意:這裡是初學者比較糾結的事情,所以不用糾結不管是主機還是從機內容都是一樣的,這裡也可以是從機的ip地址,因為我們配置了/etc/hosts這個檔案,所以我們可以使用名稱來找到對應的ip地址。

6.vi hadoop-env.sh

找到這個位置,並修改

# The java implementation to use.

#export JAVA_HOME=${JAVA_HOME} 

修改內容:

export JAVA_HOME=/home/llg/soft/jdk

jdk的安裝路徑

7.vi yarn-env.sh

新增JAVA_HOME

我們需要改變的檔案為下面幾個:

注意:

1)將hosts檔案分發到所有節點

$>scp /etc/hosts [email protected]:/etc/

2) 將hadoop目錄分發到所有從節點

$>scp -r ~/soft/hadoop/etc/hadoop [email protected]:~/soft/hadoop/etc

十一、格式化

a. 刪除hadoop.tmp.dir路徑下的所有檔案(所有節點)

b. 刪除HADOOP_LOG_DIR設定路徑下的日誌檔案(所有節點)

c. 格式化:

$>hdfs namenode -format(主節點)

注:

1.這個是命令使用普通使用者執行的,不能使用root許可權,會報錯,並且是在主節點上執行的

2.如果你的hadoop叢集搭建成功了,這個格式化只需要執行一次,你想再格式化之前,請把上面a、b兩個檔案刪除乾淨

十二、開啟完全分散式:

$>start-all.sh

使用命令檢視工作程序

$>jps

瀏覽器上輸入:http://192.168.111.151:50070/,出現:

並且可以檢視到有兩個存活節點,表示搭建成功,如果不成功不要氣餒,檢視日誌檔案~/soft/hadoop/logs找到錯誤

我們可以使用命令:

$>hadoop fs -put ./test.txt /

上傳檔案到我們hadoop根目錄

檢視我們是否上傳成功:

出現:

十三、關閉完全分散式:

$>stop-all.sh

到此我們的hadoop環境就搭建成功了!!!

十四、補充知識:

1.解決CentOS6.5sudo不可用問題

修改/etc/sudoers檔案

$>su
$>visudo

root ALL=(ALL)  ALL

下插入:

hyxy ALL=(ALL)  ALL

2.補充命令:

安全模式解除指令:

$>hadoop dfsadmin -safemode leave

刪除hadoop叢集檔案指令:

$>hadoop fs -rm /test.txt