Hadoop完全分布式搭建


---記於2015年11月6日星期五

  1. 准備工作

    1. 軟硬件環境

  • 主機操作系統:處理器:i5,主頻:3.2G,內存:8G,Windows64
  • 虛擬機軟件:VMware Workstation 10
  • 虛擬操作系統:CentOs-6.5 64位
  • JDk:1.8.0_65 64位
  • Hadoop:1.2.1
  1. 集群網絡環境

集群包括3個節點,1個Namenode、2個Datanode,其中節點之間可以相互ping通。節點IP地址和主機名如下:

 

序號

IP地址

機器名

類型

用戶名

192.168.1.127

Master.Hadoop 

Namenode

Hadoop 

192.168.1.128

Slave1.Hadoop

Datanode

Hadoop 

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文件會出現權限不足的提示。

  1. 注意

由於Hadoop要求所有機器上Hadoop的部署目錄結構要求相同(因為在啟動時按與主節點相同的目錄啟動其它任務節點),並且都有一個相同的用戶名賬戶。參考各種文檔上說的是所有機器都建立一個hadoop用戶,使用這個賬戶來實現無密碼認證。這里為了方便,分別在三台機器上都重新建立一個hadoop用戶。

  1. 環境搭建

    1. 操作系統安裝

對於Datanode類型的系統,可以先安裝一個系統,然后利用VMWare的克隆功能,克隆多個相同的系統。如下圖所示。

 

 

    VMWare下安裝CentOs系統的教程直接在網上找。特別注意的是:所有系統的網絡選擇為橋接模式,並且由於本機是在無線網絡上進行上網的,故還要設置VMnet0的信息:在編輯->虛擬網絡編輯器···如下圖:

橋接網絡是指本地物理網卡和虛擬網卡通過VMnet0虛擬交換機進行橋接,物理網卡和虛擬網卡在拓撲圖上處於同等地位,那么物理網卡和虛擬網卡就相當於處於同一個網段,虛擬交換機就相當於一台現實網絡中的交換機,所以兩個網卡的IP地址也要設置為同一網段。

    在"橋接到"那一欄里選擇所用的網卡類型。

  1. 本地環境配置

  1. 網絡配置

采用橋接來連接網絡(適合有路由、交換機用戶),配置靜態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的地址。

 

  1. 配置hosts文件

"/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)

  1. 操作系統設置

在Hadoop安裝過程中需要關閉防火牆和SElinux,否則會出現異常。

  1. 關閉防火牆
  • service iptables status 查看防火牆狀態,如下所示表示iptables已經開啟:

  • 關閉防火牆:chkconfig iptables off
  1. 關閉SElinux
  • 使用getenforce命令查看是否關閉
  • 修改/etc/selinux/config 文件

 

注意:修改后要重啟系統,才能有效。

  1. SSH無密碼驗證配置

准備工作:

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。

 

  1. 配置Master無密碼登錄所有Salve

 

  1. 在Master節點上執行以下命令:

ssh-keygen –t rsa –P ''

 

 

運行后詢問其保存路徑時直接回車采用默認路徑。生成的密鑰對:id_rsa(私鑰)和id_rsa.pub(公鑰),默認存儲在"/home/用戶名/.ssh"目錄下。

 

查看"/home/用戶名/"下是否有".ssh"文件夾,且".ssh"文件下是否有兩個剛生產的無密碼密鑰對。

 

  1. 接着在Master節點上做如下配置,把id_rsa.pub追加到授權的key里面去。

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

 

 

查看".ssh"文件夾:

 

查看下authorized_keys的權限。(很重要!)

如果權限不對則利用如下命令設置該文件的權限:

 

chmod 700 ~/.ssh #注意:這兩條權限設置特別重要,決定成敗。

chmod 600 ~/.ssh/authorized_keys

 

在Master機器上輸入:ssh localhost 命令測試一下,看是否能無密碼登錄自己。

 

  1. 將公鑰發給Slave

在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

  1. 測試

在Master下輸入:

ssh Slave1.Hadoop

若不用密碼則表示成功!

 

重點:設置好權限!!!

  1. 軟件安裝及環境配置

以下的軟件安裝先在Master上安裝,全部安裝完后,再通過復制到Slave中即可。

  1. Java安裝及其環境配置

所有的機器上都要安裝JDK,並且版本要一樣。現在就先在Master服務器安裝,然后把安裝好的文件傳遞給Slave即可。安裝JDK以及配置環境變量,需要以"root"的身份進行。

  1. 首先用root身份登錄"Master.Hadoop"后在"/usr"下創建"java"文件夾,再將"jdk-8u25-linux-x64. gz"復制到"/usr/java"文件夾中,然后解壓即可。

    tar -zxvf jdk-8u25-linux-x64. gz

 

查看"/usr/java"下面會發現多了一個名為"jdk1.8.0_65"文件夾,說明我們的JDK安裝結束,刪除安裝包即可,進入下一個"配置環境變量"環節。

  1. 配置環境變量。編輯"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"內容如下:

    # 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為選擇。

  1. 驗證

java –version

  1. Hadoop安裝及其環境配置

  1. 首先用root用戶登錄"Master.Hadoop"機器,將下載的"hadoop-1.2.1.tar.gz"復制到/usr目錄下。然后進入"/usr"目錄下,用下面命令把"hadoop-1.1.2.tar.gz"進行解壓,並將其重命名為"hadoop",把該文件夾的讀權限分配給普通用戶hadoop,然后刪除"hadoop-1.2.1.tar.gz"安裝包。

    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

     

  2. 把Hadoop的安裝路徑添加到"/etc/profile"中。

    # set hadoop path

    export HADOOP_HOME=/usr/hadoop

    export PATH=$PATH: $HADOOP_HOME/bin

 

  1. 配置hadoop-env.sh,並確認生效

該"hadoop-env.sh"文件位於"/usr/hadoop/conf"目錄下。

在文件中修改下面內容:

export JAVA_HOME=/usr/java/ jdk1.8.0_65/

(此處的JAVA_HOME跟之前Java中環境配置的一樣)

 

source hadoop-env.sh

hadoop version

 

 

  1. 在/usr/hadoop目錄下創建子目錄

cd /usr/hadoop

mkdir tmp

mkdir hdfs

 

  1. 配置core-site.xml文件

修改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>

 

  1. 配置hdfs-site.xml文件

<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>

 

 

  1. 配置mapred-site.xml文件

修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。

 

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>http://192.168.1.127:9001</value>

</property>

</configuration>

 

 

  1. 配置masters文件

有兩種方案:D

 

(1)第一種

修改localhost為Master.Hadoop

(2)第二種

去掉"localhost",加入Master機器的IP:192.168.1.127

為保險起見,啟用第二種,因為萬一忘記配置"/etc/hosts"局域網的DNS失效,這樣就會出現意想不到的錯誤,但是一旦IP配對,網絡暢通,就能通過IP找到相應主機。

    vim /usr/hadoop/conf/masters

 

 

  1. 配置slaves文件(Master主機特有)

    與配置masters文件類似:

    vim /usr/hadoop/conf/slaves

     

  1. Slave服務器上的文件安裝及配置

在Master上裝完JDK以及Hadoop以及配置好環境后,進行下步工作:

  1. 將/usr/java文件夾復制到其他Slave

     

    在Master中輸入:

    scp –r /usr/java root@Slave1.Hadoop :/usr/

scp –r /usr/java root@Slave2.Hadoop :/usr/

 

  1. 將/etc/profile復制到其他Slave

     

    在Master中輸入:

    scp /etc/profile root@Slave1.Hadoop :/etc/

    scp /etc/profile root@Slave2.Hadoop :/etc/

     

  2. 將/usr/hadoop文件夾復制到其他Slave

     

    在Master中輸入:

    scp –r /usr/hadoop root@Slave1.Hadoop :/usr/

    scp –r /usr/hadoop root@Slave2.Hadoop :/usr/

     

  3. 改變權限

    將/usr/java,/usr/hadoop的用戶組改為Hadoop用戶,設置權限為755

    1. 啟動及驗證

      1. 啟動

  4. 格式化HDFS文件系統

在"Master.Hadoop"上使用普通用戶hadoop進行操作。(備注:只需一次,下次啟動不再需要格式化,只需 start-all.sh)

hadoop namenode –format

 

  1. 啟動hadoop

在啟動前關閉集群中所有機器的防火牆,不然會出現datanode開后又自動關閉。使用下面命令啟動。

start-all.sh

 

  1. 關閉hadoop

    stop-all.sh

    1. 驗證測試

  2. 用"jps"命令測試

在Master上用 java自帶的小工具jps查看進程。

在Slave1上用 java自帶的小工具jps查看進程。

注:上兩幅圖表示成功!

 

  1. 用"hadoop dfsadmin -report"查看集群狀態

 

  1. 通過網頁查看集群

訪問JobTracker:http://192.168.1.127:50030

 

訪問NameNode:http://192.168.1.127:50070

  1. 所遇到的問題及解決方法

    1. 關於 Warning: $HADOOP_HOME is deprecated.

hadoop安裝完之后敲入hadoop命令時,老是提示這個警告:

Warning: $HADOOP_HOME is deprecated.

解決方案一:編輯"/etc/profile"文件,去掉HADOOP_HOME的變量設定,重新輸入hadoop fs命令,警告消失。

解決方案二:編輯"/etc/profile"文件,添加一個環境變量,之后警告消失:

export HADOOP_HOME_WARN_SUPPRESS=1

  1. SSH設置不成功

很有可能是因為權限設置的不對!

  1. Datanode連接不上

有可能是Master和Slave的防火牆沒有關掉。


免責聲明!

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



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