1. 程式人生 > >【Big Data】HADOOP叢集的配置(一)

【Big Data】HADOOP叢集的配置(一)

摘要: hadoop叢集配置系列文件,是筆者在實驗室真機環境實驗後整理而得。以便隨後工作所需,做以知識整理,另則與部落格園朋友分享實驗成果,因為筆者在學習初期,也遇到不少問題。但是網上一些文件大多互相抄襲,裡面錯誤百出。筆者結合自學書籍視訊等資料,完成這一套配置資料。實驗結果和過程經過反覆測試無誤後方整理出來的。配置過程中,初學者若有實驗環境,可以在真機環境下完成,若無條件,可補習下虛擬機器與Linux作業系統的基礎知識,以及裡面對linux常規命令使用,建議讀者邊配置學學習。(本文原創/整理,轉載請標註原文出處: Hadoop叢集的配置(一)

白寧超

2015年7月11日22:24:14

1.1    目的:

在虛擬機器環境下,讓同學們學會從零開始配置Hadoop-2.2叢集,並嘗試在真實環境下搭建叢集。

1.2    主要內容:

物理機器總共4臺,想配置基於物理機的Hadoop叢集中包括4個節點: 1 個 Master, 3個 Salve ,節點之間區域網連線,可以相互 ping通。IP的分佈如表1所示。

            表1        4個節點的IP地址分配及角色

Master機器主要配置NameNode和JobTracker的角色,負責總管分散式資料和分解任務的執行;3個Salve機器配置DataNode和TaskTracker的角色,負責分散式資料儲存以及任務的執行。

用到的所有檔案                        

1.4 使用者資訊(所有節點一樣)

2.搭建虛擬叢集環境

安裝完VMWare10後,解壓CentOS到指定資料夾下,開啟VMWare10,點選選單欄“檔案”-->“開啟”,選擇CentOS檔案,如圖。

右擊CentOS選擇屬性,彈出設定視窗。裡面是虛擬系統的主要硬體引數資訊,讀者可以根據自己機器效能配置,這裡選預設。

 

2.1三種連線方式

 VMWare提供了三種工作模式,它們是bridged(橋接模式)、NAT(網路地址轉換模式)和host-only(主機模式)。要想在網路管理和維護中合理應用它們,就應該先了解一下這三種工作模式。主機上安裝VMware Workstation或VMware Server的時候,預設會安裝3塊虛擬網絡卡,這3塊虛擬網絡卡的名稱分別為VMnet0、VMnet1、VMnet8,其中VMnet0的網路屬性為“物 理網絡卡”,VMnet1與VMnet8的網路屬性為“虛擬網絡卡”。在預設情況下,

VMnet1虛擬網絡卡的定義是“僅主機虛擬網路”,VMnet8虛擬網絡卡的定義是“NAT網路”,同時,主機物理網絡卡被定義為“橋接網路”,主機物理網絡卡也可以稱為VMnet0

 大家在安裝完虛擬機器後,預設安裝了兩個虛擬網絡卡,VMnet1和 VMnet8。其中VMnet1是hostonly網絡卡,用於host方式連線網路的。VMnet8是NAT網絡卡,用 於NAT方式連線網路的。它們的IP地址預設是的,如果要用虛擬機器做實驗的話,最好將VMnet1到VMnet8的IP地址改掉。習慣上把 VMware虛擬網絡卡使用的網段“固定”,即設定為靜態ip。使用如下原則:VMnet1對應的網段是192.168.10.0,VMnet8對應的網段是 192.168.80.0

1.bridged(橋接模式)

  在這種模式下,VMWare虛擬出來的作業系統就像是區域網中的一臺獨立的主機,它可以訪問網內任何一臺機器。在橋接模式下,需要手工為虛擬系統配置IP地址、子網掩碼,而且還要和宿主機器處於同一網段,這樣虛擬系統才能和宿主機器進行通訊。同時,由於這個虛擬系統是區域網中的一個獨立的主機系統,那麼就可以手工配置它的TCP/IP配置資訊,以實現通過區域網的閘道器或路由器訪問網際網路。使用橋接模式的虛擬系統和宿主機器的關係,就像連線在同一個Hub上的兩臺電腦。想讓它們相互通訊,你就需要為虛擬系統配置IP地址和子網掩碼,否則就無法通訊。如果想利用VMWare在區域網內新建一個虛擬伺服器,為區域網使用者提供網路服務,就應該選擇橋接模式。使用這種方式很簡單,前提是要得到1個以上的地址。對於想進行種種網路實驗的朋友不太適合,因為無法對虛擬機器的網路進行控制,它直接就出去了。

 

使用橋接方式,A,A1,A2,B可互訪。

2.host-only(僅主機模式)

  在某些特殊的網路除錯環境中,要求將真實環境和虛擬環境隔離開,這時你就可採用host-only模式。在host-only模式中,所有的虛擬系統是可以相互通訊的,但虛擬系統和真實的網路是被隔離開的。提示:在host-only模式下,虛擬系統和宿主機器系統是可以相互通訊的,相當於這兩臺機器通過雙絞線互連。在host-only模式下,虛擬系統的TCP/IP配置資訊(如IP地址、閘道器地址、DNS伺服器等),都可以由VMnet1(host-only)虛擬網路的DHCP伺服器來動態分配。如果想利用VMWare建立一個與網內其他機器相隔離的虛擬系統,進行某些特殊的網路除錯工作,可以選擇host-only模式。

    

使用Host方式,A,A1,A2可以互訪,但A1,A2不能訪問B,也不能被B訪問。

3.NAT(網路地址轉換模式)

  使用NAT模式,就是讓虛擬系統藉助NAT(網路地址轉換)功能,通過宿主機器所在的網路來訪問公網。也就是說,使用NAT模式可以實現在虛擬系統中安全的訪問網際網路。NAT模式下虛擬系統的TCP/IP配置資訊是由VMnet8(NAT)虛擬網路的DHCP伺服器提供的,無法進行手工修改,因此虛擬系統也就無法和本區域網中的其他真實主機進行通訊。採用NAT模式最大的優勢是虛擬系統接入網際網路非常簡單,你不需要進行任何其他的配置,只需要宿主機器能訪問網際網路即可。如果想利用VMWare安裝一個新的虛擬系統,在虛擬系統中不用進行任何手工配置就能直接訪問網際網路,建議採用NAT模式。提示:以上所提到的NAT模式下的VMnet8虛擬網路,host-only模式下的VMnet1虛擬網路,以及bridged模式下的VMnet0虛擬網路,都是由VMWare虛擬機器自動配置而生成的,不需要使用者自行設定。VMnet8和VMnet1提供DHCP服務,VMnet0虛擬網路則不提供。

 

使用NAT方式,A1,A2可以訪問B,但B不可以訪問A1,A2。但A,A1,A2可以互訪。

全域性網路拓撲圖:

 

思考:真實部署要根據網路環境的不同而配置不同的連線方式,那麼請思考,在6601機房搭建真實叢集對應哪種連線方式?

2.2  host-only連線步驟

在學習VMWare虛擬網路時,我們建議選擇host-only方式。第一,如果你的電腦是筆記本,從A移到B網路環境發生變化後,只有host-only方式不受影響,其他方式必須重新設定虛擬交換機配置。第二,將真實環境和虛擬環境隔離開,保證了虛擬環境的安全。

按綠色箭頭啟動虛擬機器,角色選擇other,輸入root角色名,這裡的密碼是hadoop,具體密碼由CentOS安裝時設定,而我們使用的是安裝好的。

 

由於選擇的是host-only連線方式,VMnet1必須開啟,然後設定ipv4。

 

由於host-only方式不能連線外網,所以DNS不需配置,其他方式想要訪問外網必須配置。

在Linux桌面環境中右擊電腦圖示,選中“EditConnection”進行如下配置:

 

開啟終端,檢視配置情況。

 

檢查與Windows主機的通訊情況。

1.Windows-->Linux

 

2.Linux-->Winodws

 

思考:訪問外部主機失敗,分析為什麼?

2.3 使用PieTTY連線Linux

    填寫連線目的的IP地址,埠是SSH模式的訪問埠22,點選open,輸入角色和密碼登入。

 

提示“潛在安全缺口”,由於首次使用PieTTy登陸Linux[微軟使用者1] 虛擬機器,PieTTY快取裡面並沒有該Linux虛擬機器的rsa2公鑰資訊,因此會提示是否信任次機器,我們選擇是。

 

 

其他常用登入工具還有putty,XShell等,PieTTY相比之下操作簡單功能豐富。

2.3 新建使用者

使用root登陸後,建立Hadoop使用者,在hadoopGroup組裡。

1.建立hadoopGroup組

新增使用者時,可以將使用者新增到現有的使用者組,或者建立一個新的使用者組。可以在/etc/group檔案中看到所有的使用者組資訊。預設的使用者組通常用來管理系統使用者,不建議將普通使用者新增到這些使用者組。使用groupadd命令建立使用者組的語法為:

groupadd [-g gid [-o]] [-r] [-f] groupname

每個選項的含義如下:

如果不指定選項,系統將使用預設值。建立一個 hadoopGroup使用者組:

$ groupadd hadoopGroup
2. 新增Hadoop使用者

新增使用者可以使用useradd命令,語法為:

useradd -d homedir -g groupname -m -s shell -u userid accountname

每個選項的含義如下:



指定使用者主目錄/home/hadoop使用者組hadoopGroup。

 

使用者被建立後,可以使用passwd命令來設定密碼,如:

$ passwd hadoop
Changing password for user hadoop.
New Linux password:******
Retype new UNIX password:******
passwd: all authentication tokens updated successfully.

2.4 安裝jdk,hadoop

1.使用winscp傳輸檔案

在root使用者下,執行命令rm -rf  /usr/local/*

刪除目錄下所有內容(當前內容無用)使用winscp把jdk檔案從windows複製到/usr/local目錄下。點選新建一個會話。

 

輸入使用者和密碼:

 

 

2.解壓檔案

解壓命令tar -zvxf jdk-7u67-linux-x64.tar.gz到當前目錄。

 

 更改檔名為jdk1.7。

同樣,解壓命令tar -zvxf jdk-7u67-linux-x64.tar.gz到當前目錄,並通過命令

 mv hadoop-2.2.0 /home/hadoop/hadoop2.2 移動到Hadoop使用者的主目錄下。

 

3.目錄規劃

Hadoop程式存放目錄為/home/hadoop/hadoop2.2,相關的資料目錄,包括日誌、儲存等指定為/home/hadoop/hadoop2.2。將程式和資料目錄分開,可以更加方便的進行配置的同步。

具體目錄的準備與配置如下所示:

l  在每個節點上建立程式儲存目錄/home/hadoop/hadoop2.2,用來存放Hadoop程式檔案。

l  在每個節點上建立資料儲存目錄/home/hadoop/hadoop2.2/hdfs,用來存放叢集資料。

l  在主節點node上建立目錄/home/hadoop/hadoop2.2/hdfs/name,用來存放檔案系統元資料。

l  在每個從節點上建立目錄/home/hadoop/hadoop2.2/hdfs/data,用來存放真正的資料。

l  所有節點上的日誌目錄為/home/hadoop/hadoop2.2/logs。

l  所有節點上的臨時目錄為/home/hadoop/hadoop2.2/tmp。

執行命令mkdir -p  /home/hadoop/hadoop2.2/hdfs,為還沒有的目錄建立,後面以此類推。

給hadoopGroup組賦予許可權,凡是屬於hadoopGroup組的使用者都有權利使用hadoop2.2,方便多使用者操作。首先,把Hadoop2.2加入到hadoopGroup組: 

 chgrp -R hadoopGroup hadoop2.2

給這個組賦予許可權:

chmod -R g=rwx hadoop2.2

4.匯入JDK環境變數

執行cd /etc命令後執行vi profile,在行末尾新增:

export JAVA_HOME=/usr/local/jdk1.7

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

export PATH=.:$JAVA_HOME/bin:$PATH


 執行source profile,使其配置立即生效。

 執行java –version,檢視是否安裝成功。

 

5.匯入Hadoop環境變數

同上面一樣,修改profile。

export  HADOOP_HOME=/home/hadoop/hadoop2.2

export PATH=.:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH

export HADOOP_LOG_DIR=/home/hadoop/hadoop2.2/logs

export YARN_LOG_DIR=$HADOOP_LOG_DIR

 

執行hadoop命令,檢視有沒有成功。

2.5.修改主機名

1.修改當前會話中的主機名,執行命令hostname node。

 

但是這種配置只對當前狀態有效,一旦重新啟動虛擬機器,主機名未變。

2.修改配置檔案中的主機名,執行命令vi /etc/sysconfig/network。

 

重啟生效,由於第一步已經在當前會話中配置了hostname,所以不用重啟。

3.繫結hostname與IP

執行vi/etc/hosts,增加內容如下:

192.168.10.100         node

192.168.10.101         node1

192.168.10.102         node2

192.168.10.103         node3

Ping node,檢驗是否修改成功?

 

2.6 關閉防火牆

如果不關閉防火牆,有以下幾種情況出現:

第一:hdfs的Web管理頁面,打不開該節點的檔案瀏覽頁面。

第二:後臺執行指令碼(HIVE的),會出現莫名其妙的假死狀態。

第三:在刪除和增加節點的時候,會讓資料遷移處理時間更長,甚至不能正常完成相關操作。

第四:不管你做任何操作,都是會執行不正常,而且很不順手。

執行命令service iptables stop

驗證:  service iptables status

 

執行上面操作可以關閉防火牆,但重啟後還會繼續執行,所以還要關閉防火牆的自動執行。

執行命令 chkconfig iptables off

驗證:  chkconfig --list |grep iptables

 

2.7 修改hadoop2.2配置檔案

      Hadoop沒有使用java.util.Properties管理配置檔案,也沒有使用Apache Jakarta Commons Configuration管理配置檔案,而是使用了一套獨有的配置檔案管理系統,並提供自己的API,即使org.apache.hadoop.conf.Configuration處理配置資訊,大家也可以通過eclipse工具分析下原始碼,並利用這些api修改配置檔案。

由於Hadoop叢集中每個機器上面的配置基本相同,所以先在namenode上面進行配置部署,然後再複製到其他節點。 

1. 配置 ~/hadoop2.2/etc/hadoop下的hadoop-env.sh、yarn-env.sh、mapred-env.sh

修改JAVA_HOME值(export JAVA_HOME=/usr/local/jdk1.7/)

 

2. 配置 ~/hadoop2.2/etc/hadoop/slaves(這個檔案裡面儲存所有slave節點)

                

3. 配置 ~/hadoop-2.2.0/etc/hadoop/core-site.xml

<configuration>
 
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node:9000/</value>
        <description> 設定 namenode 的 主機名 及 埠 </description>
    </property>
 
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp/hadoop-${user.name}</value>
        <description> 存放臨時檔案的目錄 </description>
    </property>  
 
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
 
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
 
</configuration>

4. 配置 ~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml

<configuration>  
 
    <property>  
        <name>dfs.namenode.http-address</name>  
        <value>node:50070</value>  
        <description> NameNode 通過當前引數 獲得 fsimage 和 edits </description>  
    </property>
 
    <property>  
        <name>dfs.namenode.secondary.http-address</name>  
        <value>node1:50090</value>  
        <description> SecondNameNode 通過當前引數 獲得最新的 fsimage </description>  
    </property> 
 
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description> 設定 HDFS 儲存檔案的副本個數,預設為3 </description>
    </property>
 
    <property>  
        <name>dfs.namenode.name.dir</name>  
        <value>file:///home/hadoop/hadoop2.2/hdfs/name</value>  
        <description> namenode 用來持續存放名稱空間和交換日誌的本地檔案系統路徑 </description>  
    </property>  
 
    <property>  
        <name>dfs.datanode.data.dir</name>
        <value>file:///home/hadoop/hadoop2.2/hdfs/data</value>  
        <description> DataNode 在本地存放塊檔案的目錄列表,用逗號分隔 </description>  
    </property>  
 
    <property>  
        <name>dfs.namenode.checkpoint.dir</name>  
        <value>file:///home/hadoop/hadoop2.2/hdfs/namesecondary</value>  
        <description> 設定 secondary 存放 臨時映象 的本地檔案系統路徑,如果這是一個用逗號分隔的檔案列表,則映象將會冗餘複製到所有目錄,只對 secondary 有效 </description>  
    </property> 
 
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
 
    <property>
        <name>dfs.stream-buffer-size</name>
        <value>131072</value>
        <description> 預設是4KB,作為hadoop緩衝區,用於hadoop讀hdfs的檔案和寫
hdfs的檔案,還有map的輸出都用到了這個緩衝區容量,對於現在的硬體很保守,可以設定為128k
(131072),甚至是1M(太大了map和reduce任務可能會記憶體溢位) </description>
    </property> 
 
    <property>  
        <name>dfs.namenode.checkpoint.period</name>  
        <value>3600</value>  
        <description> 兩次 checkpoints 之間的間隔,單位為秒,只對 secondary 有效 </description>  
    </property> 
 
</configuration> 

5. 配置 ~/hadoop-2.2.0/etc/hadoop/mapred-site.xml

<configuration>  
         <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
 <property>
		<name>mapreduce.jobtracker.address</name>
		<value>hdfs://trucy:9001</value>
	</property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node:10020</value>
        <description>
MapReduce JobHistory Server host:port, default port is 10020.</description>
    </property>
 
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node:19888</value>
<description>MapReduce JobHistory Server Web UI host:port, default port is 19888.</description>
    </property>
 
</configuration> 

6. 配置 ~/hadoop-2.2.0/etc/hadoop/yarn-site.xml

<configuration>
 
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node</value>
    </property>
 
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>node:8032</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>node:8030</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>node:8031</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>node:8033</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>node:8088</value>
    </property>
 
</configuration>

 未完待續.......

尾註:本系列文件,筆者真機環境測試無誤得以分享,純屬原創,若有轉載,請註釋出處.