摘要: hadoop集羣配置系列文檔,是筆者在實驗室真機環境實驗後整理而得。以便隨後工做所需,作以知識整理,另則與博客園朋友分享實驗成果,由於筆者在學習初期,也遇到很多問題。可是網上一些文檔大多互相抄襲,裏面錯誤百出。筆者結合自學書籍視頻等資料,完成這一套配置資料。實驗結果和過程通過反覆測試無誤後方整理出來的。配置過程當中,初學者如有實驗環境,能夠在真機環境下完成,若無條件,可補習下虛擬機與Linux操做系統的基礎知識,以及裏面對linux常規命令使用,建議讀者邊配置學學習。(本文原創/整理,轉載請標註原文出處: Hadoop集羣的配置(一) )html
白寧超java
2015年7月11日22:24:14node
【MySql集羣搭建】 真機環境下MySQL-Cluster搭建文檔linux
【Hadoop集羣搭建1】Hadoop集羣的配置web
【Hadoop集羣搭建2】Hadoop集羣的配置 shell
在虛擬機環境下,讓同窗們學會從零開始配置Hadoop-2.2集羣,並嘗試在真實環境下搭建集羣。數據庫
物理機器總共4臺,想配置基於物理機的Hadoop集羣中包括4個節點: 1 個 Master, 3個 Salve ,節點之間局域網鏈接,能夠相互 ping通。IP的分佈如表1所示。apache
表1 4個節點的IP地址分配及角色windows
Master機器主要配置NameNode和JobTracker的角色,負責總管分佈式數據和分解任務的執行;3個Salve機器配置DataNode和TaskTracker的角色,負責分佈式數據存儲以及任務的執行。api
用到的全部文件
安裝完VMWare10後,解壓CentOS到指定文件夾下,打開VMWare10,點擊菜單欄「文件」-->「打開」,選擇CentOS文件,如圖。
右擊CentOS選擇屬性,彈出設置窗口。裏面是虛擬系統的主要硬件參數信息,讀者能夠根據本身機器性能配置,這裏選默認。
VMWare提供了三種工做模式,它們是bridged(橋接模式)、NAT(網絡地址轉換模式)和host-only(主機模式)。要想在網絡管理和維護中合理應用它們,就應該先了解一下這三種工做模式。主機上安裝VMware Workstation或VMware Server的時候,默認會安裝3塊虛擬網卡,這3塊虛擬網卡的名稱分別爲VMnet0、VMnet一、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機房搭建真實集羣對應哪一種鏈接方式?
在學習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相比之下操做簡單功能豐富。
使用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.
在root用戶下,執行命令rm -rf /usr/local/*
刪除目錄下全部內容(當前內容無用)使用winscp把jdk文件從windows複製到/usr/local目錄下。點擊新建一個會話。
輸入用戶和密碼:
解壓命令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用戶的主目錄下。
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
執行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,查看是否安裝成功。
同上面同樣,修改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命令,查看有沒有成功。
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,檢驗是否修改爲功?
若是不關閉防火牆,有如下幾種狀況出現:
第一:hdfs的Web管理頁面,打不開該節點的文件瀏覽頁面。
第二:後臺運行腳本(HIVE的),會出現莫名其妙的假死狀態。
第三:在刪除和增長節點的時候,會讓數據遷移處理時間更長,甚至不能正常完成相關操做。
第四:無論你作任何操做,都是會運行不正常,並且很不順手。
執行命令service iptables stop
驗證: service iptables status
執行上面操做能夠關閉防火牆,但重啓後還會繼續運行,因此還要關閉防火牆的自動運行。
執行命令 chkconfig iptables off
驗證: chkconfig --list |grep iptables
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>
http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-common/core-default.xml
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>
http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
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>
http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
未完待續.......
尾註:本系列文檔,筆者真機環境測試無誤得以分享,純屬原創,如有轉載,請註釋出處.