【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。其中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>
未完待續.......
尾註:本系列文件,筆者真機環境測試無誤得以分享,純屬原創,若有轉載,請註釋出處.