Hadoop 2.3.0 分布式集群搭建圖文
一。配置虛擬機軟件
下載地址:https://www.virtualbox.org/wiki/downloads
1.虛擬機軟件設定
1)進入全集設定
2)常規設定
2.Linux安裝配置
1)名稱類型
名稱最后具有說明意義。版本根據個人情況。
2)內存
在下物理機系統Win7x64,處理器i53210,內存8G。
3)磁盤選擇
4)磁盤文件
virtualbox格式vdi,VMWare格式vmdk,微軟格式vhd(virtualbox不支持),Parallels格式hdd(virtualbox不支持)。
vdi轉vmdk:VBoxManage.exe clonehd 原鏡像.vmdk 目標鏡像.vdi --format VDI
vdi轉vhd :VBoxManage.exe clonehd 原鏡像.vdi 目標鏡像.vmdk --format VMDK
vmdk轉vhd:VBoxManage.exe clonehd 原鏡像.vdi 目標鏡像.vhd --format VHD
5)磁盤空間
根據個人物理機配置,固定大小運行更快。
6)磁盤位置
7)數據傳輸
共享粘貼板和鼠標拖放的實現還需要系統安裝結束后安裝增強功能。
8)軟驅
去除勾選。
9)Linux鏡像
10)網絡
去除勾選,安裝過程中禁用網絡。
二。安裝模板Linux
1.一般安裝過程
2.初始化用戶
注意:不要使用“自動登錄”。在下使用的是Ubuntu10.10,曾經這一步選擇自動登錄,給后續工作造成了很大麻煩。此時的用戶名最好是一個通用的名稱,因為后續會涉及SSH登錄。
三。配置Linux
1.在桌面顯示終端
便于使用命令行。
2.在桌面顯示“我的電腦”
注意類型為“位置”。
3.安裝增強功能
實現和物理機的粘貼板共享、鼠標拖放。
現在有很多視圖模式可以使用:
4.初始化root用戶
當前用戶涉及集群配置的幾個重要信息:
5.關閉防火墻
為了避免不必要的麻煩,在學習中建議關閉防火墻,這一步如果有修改,需重啟系統:
四。準備資源
0.下載
OpenSSH:http://archive.ubuntu.com/ubuntu/pool/main/o/openssh/
http://mirrors.oschina.net/ubuntu/pool/main/o/openssh/
這里不要下載太新的版本,以為你的Linux可能缺少其依賴。
JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
Hadoop:http://www.apache.org/dyn/closer.cgi/hadoop/common/
1.安裝SSH
1)openssh-client
SHELL$ sudo dpkg -i openssh-client_5.3p1-3ubuntu3_i386.deb
2)openssh-server
SHELL$ sudo dpkg -i openssh-server_5.3p1-3ubuntu3_i386.deb
3)ssh-all
SHELL$ sudo dpkg -i sudo dpkg -i ssh_5.3p1-3ubuntu3_all.deb
4)ssh-keygen
在我們的學習環境中沒有必要使用密碼,所以創建密鑰時留空,直接回車。
當然從這一步到6)可以先放棄,因為后續我們還需要單獨在每臺主機上操作。
SHELL$ ssh-keygen
5)authorized_keys
創建自動密碼驗證文件。如果使用cat命令,一個>為覆蓋寫入,另個為追加寫入。還可以使用cp命令。
SHELL$ sudo cat id_rsa.pub > authorized_keys
SHELL$ sudo cat id_rsa.pub >> authorized_keys
SHELL$ sudo cp id_rsa.pub authorized_keys
6)ssh localhost
登錄測試,初次登錄會讓用戶確認:
2.安裝JDK
因為在下的jdk是gz格式,所以首先需要解壓。解壓后移動到合適的目錄,注意不要用當前用戶的工作目錄,這是為了簡化后續工作。
解壓:SHELL$ sudo tar -zxvf jdk-7u51-linux-i586.gz
移動:SHELL$ sudo mv jdk1.7.0_51 /home
1)環境變量
SHELL$ sudo gedit /etc/profile
2)重載環境變量,測試
SHELL$ sudo source /etc/profile
3.安裝Hadoop
同樣,為了簡化后續工作解壓后移動到合適的目錄。
解壓:SHELL$ sudo tar -zxvf hadoop-2.3.0.tar.gz
移動:SHELL$ sudo mv hadoop-2.3.0 /home
配置環境變量:在環境變量加入hadoop的sbin目錄并重載。
五。分布式集群搭建
1.增加虛擬系統
1)復制出一定數量的虛擬系統文件
2)修改UUID
CMD$ %virtualbox%> VBoxManage internalcommands sethduuid 虛擬系統文件.vmdk
3)導入系統
依照上文創建虛擬系統,到配置硬盤文件這一步:
先打開工作目錄,發現虛擬系統文件夾已經創建,將復制出的系統文件放入:
然后使用已有的虛擬硬盤文件:
這樣,每個虛擬系統的全部信息都保存在同一個文件夾了。
也可以使用VirtualBox的系統復制功能:
2.集群預設
7 個系統要按照下表一一配置:主機名 | 角色 | 登錄用戶 | hostname | hosts | IP | 網關 |
hapmaster | 主控 master | hadoop (全部7個主機的用戶都是同樣的) |
hapmaster | 127.0.0.1 localhost 192.168.1.240 hapmaster 192.168.1.241 hapslave1 192.168.1.242 hapslave2 192.168.1.243 hapslave3 192.168.1.244 hapslave4 192.168.1.245 hapslave5 192.168.1.246 hapslave6 |
192.168.1.240 | 192.168.1.1 |
hapslave1 | 附屬 slave | hadoop | hapslave1 |
127.0.0.1 localhost ... |
192.168.1.241 |
192.168.1.1 |
hapslave2 | 附屬 slave | hadoop | hapslave2 |
127.0.0.1 localhost ... |
192.168.1.242 |
192.168.1.1 |
hapslave3 |
附屬 slave | hadoop | hapslave3 |
127.0.0.1 localhost ... |
192.168.1.243 |
192.168.1.1 |
hapslave4 | 附屬 slave | hadoop | hapslave4 |
127.0.0.1 localhost ... |
192.168.1.244 |
192.168.1.1 |
hapslave5 | 附屬 slave | hadoop | hapslave5 |
127.0.0.1 localhost ... |
192.168.1.245 |
192.168.1.1 |
hapslave6 | 附屬 slave | hadoop | hapslave6 |
127.0.0.1 localhost ... |
192.168.1.246 |
192.168.1.1 |
下面就開始對7個系統分別進行配置,本文檔記錄以從屬機hapslave1為例:
首先我們啟動虛擬系統,直接使用root用戶登錄:
1)修改用戶名
創建模板系統時我們已經初始化了root用戶,所以,以后在學習環境中完全可以一直使用root用戶。另外,如果你在安裝ubuntu時初始化用戶為“hadoop”,這一步和2)就可以跳過了。
(1)在root下修改登錄用戶名
SHELL$ chfn -f 新登錄名 原登錄名
(2)使用root修改用戶
SHELL$ usermod -l 新登錄名 -d /home/新登錄名 -m 原登錄名
2)配置 hostname
如果這一步使用的用戶是非root,在命令前要加sudo 。建議繼續在root下修改。主控機hapmaster也不需要此步驟。
SHELL$ sudo gedit /etc/hostname
3)配置hosts
無論主控機還是從屬機,現在開始都需要單獨配置。注意每次重啟系統后一定要確認一下。
SHELL$ sudo gedit /etc/hosts
127.0.0.1 localhost 192.168.1.240 hapmaster 192.168.1.241 hapslave1 192.168.1.242 hapslave2 192.168.1.243 hapslave3 192.168.1.244 hapslave4 192.168.1.245 hapslave5 192.168.1.246 hapslave6
注意:配置hostname和hosts后需重啟系統。可以在4)、5)步驟都結束后最終重啟系統。或者執行:
SHELL$ sudo /etc/init.d/networking restart
4)配置網卡靜態IP
首先查看網卡名稱
SHELL$ ifconfig
然后配置這個網卡:
SHELL$ sudo gedit /etc/network/interfaces
auto eth0 iface eth0 inet static address 192.168.1.24* gateway 192.168.1.1 netmask 255.255.255.0
這一步,如果只看到一個“lo”,一定要檢查虛擬系統的網絡配置是否開啟。
配置interfaces后重啟網卡:
SHELL$ sudo /etc/init.d/networking restart
5)賦予用戶對hadoop安裝目錄可寫的權限
SHELL$ sudo chown -hR 用戶 hadoop根目錄
3.集群的SSH配置
首先,把全部虛擬主機的網絡都配置為橋接,以組成一個局域網。
然后逐個啟動系統。都啟動后最好使用ping命令測試是否能夠互相通訊。
在創建模板系統時,已經在hapmaster主機創建了authorized_keys密鑰文件,并且拷貝出的6個從屬系統上也都有這個文件。
現在把7臺主機上面的authorized_keys、id_rsa、id_rsa.pub三個文件都刪掉。這三個文件在/home/用戶名/.ssh/目錄里。
下面使用hapmaster主機開始操作:
1)生成新的id_rsa和id_rsa.pub文件
2)將hapmaster的authorized_keys文件發給hapslave1主機
注意:遠程用戶要對遠程主機上指定的目錄有足夠權限。
SHELL$ scp 文件 遠程用戶@遠程主機:目錄
3)為hapslave1新建id_rsa.pub并追加到authorized_keys文件
SHELL$ cat 源文件 目標文件
如果在執行追加時提示“bash: authorized_keys: 權限不夠”,可以使用chown命令給當前用戶添加操作.ssh目錄的權限。
4)依次將全部主機的空密碼加入到同一個authorized_keys文件
每個主機都獲取了保存有7個主機公鑰的authorized_keys文件后,開始測試SSH登錄。
4.Hadoop集群配置
這一步的配置在7臺系統上是相同的。在hadoop2.3.0中,以下配置文件都在%hadoop%/etc/hadoop目錄里。現在以hapslave1系統為例進行配置。
1)core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <!-- 當前集群NameNode的IP地址和端口號。2.0前使用fs.default.name,但后續兼容--> <name>fs.defaultFS</name> <value>hdfs://192.168.1.240:9000</value> </property> <property> <!-- 設置臨時文件目錄 --> <name>hadoop.tmp.dir</name> <!-- 當前用戶須要對此目錄有讀寫權限。可使用命令sudo chown -hR hadoop /home/hadoop-2.3.0/ --> <value>/home/hadoop-2.3.0/hadoop-temp</value> </property> </configuration>
2)hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration> <property> <!-- SecondaryNamenode網絡地址 --> <name>dfs.namenode.secondary.http-address</name> <value>192.168.1.240:9001</value> </property> <property> <!-- NameNode工作目錄,須預先存在 --> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop-2.3.0/dfs-name</value> </property> <property> <!-- DataNode工作目錄 --> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop-2.3.0/dfs-data</value> </property> <property> <!-- 文件(副本)的存儲數量 --> <name>dfs.replication</name> <!-- 小于或等于附屬機數量。默認3 --> <value>4</value> </property> <property> <!-- 可以從網頁端監控hdfs --> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration></pre>
3)mapred-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration> <property> <!-- map-reduce運行框架 --> <name>mapreduce.framework.name</name> <!-- yarn:分布式模式 --> <value>yarn</value> </property> </configuration></pre>
4)yarn-site.xml
<?xml version="1.0"?> <configuration> <property> <name>Yarn.nodemanager.aux-services</name> <value>mapreduce.shuffle</value> </property> </configuration>5)yarn-env.sh
export JAVA_HOME=/home/jdk1.7.0_516)hadoop-env.sh
export JAVA_HOME=/home/jdk1.7.0_517)slaves
這里保存的是全部從屬機的主機名。
hapslave1 hapslave2 hapslave3 hapslave4 hapslave5 hapslave68)拷貝
SHELL$ sudo scp -rpv /home/hadoop-2.3.0/etc/hadoop/* 其它主機:/home/hadoop-2.3.0/etc/hadoop/
六。啟動集群
1.格式化HDFS系統
注意:需無任何warning或error。
SHELL../bin$ hdfs namenode -format 或 hadoop namenode -format
hadoop@hapmaster:/home/hadoop-2.3.0/bin$ hdfs namenode -format 14/03/14 13:27:47 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = hapmaster/127.0.0.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 2.3.0 STARTUP_MSG: classpath = /home/hadoop-2.3.0/etc/hadoop:/home/hadoop-2.3.0/share/hadoop/common/lib/jsr305-1.3.9.jar:/home/hadoop-2.3.0/share/hadoop/common/lib/junit-4.8.2.jar: STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common -r 1567123; compiled by 'jenkins' on 2014-02-11T13:40Z STARTUP_MSG: java = 1.7.0_51 ************************************************************/ 14/03/14 13:27:47 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT] Formatting using clusterid: CID-82cb09b4-74eb-4053-9b46-8de025de7f74 14/03/14 13:27:50 INFO namenode.FSNamesystem: fsLock is fair:true 14/03/14 13:27:51 INFO namenode.HostFileManager: read includes: HostSet( ) 14/03/14 13:27:51 INFO namenode.HostFileManager: read excludes: HostSet( ) 14/03/14 13:27:51 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000 14/03/14 13:27:51 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true 14/03/14 13:27:51 INFO util.GSet: Computing capacity for map BlocksMap 14/03/14 13:27:51 INFO util.GSet: VM type = 32-bit 14/03/14 13:27:51 INFO util.GSet: 2.0% max memory 966.7 MB = 19.3 MB 14/03/14 13:27:51 INFO util.GSet: capacity = 2^22 = 4194304 entries 14/03/14 13:27:51 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false 14/03/14 13:27:51 INFO blockmanagement.BlockManager: defaultReplication = 4 14/03/14 13:27:51 INFO blockmanagement.BlockManager: maxReplication = 512 14/03/14 13:27:51 INFO blockmanagement.BlockManager: minReplication = 1 14/03/14 13:27:51 INFO blockmanagement.BlockManager: maxReplicationStreams = 2 14/03/14 13:27:51 INFO blockmanagement.BlockManager: shouldCheckForEnoughRacks = false 14/03/14 13:27:51 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000 14/03/14 13:27:51 INFO blockmanagement.BlockManager: encryptDataTransfer = false 14/03/14 13:27:51 INFO blockmanagement.BlockManager: maxNumBlocksToLog = 1000 14/03/14 13:27:51 INFO namenode.FSNamesystem: fsOwner = hadoop (auth:SIMPLE) 14/03/14 13:27:51 INFO namenode.FSNamesystem: supergroup = supergroup 14/03/14 13:27:51 INFO namenode.FSNamesystem: isPermissionEnabled = true 14/03/14 13:27:51 INFO namenode.FSNamesystem: HA Enabled: false 14/03/14 13:27:51 INFO namenode.FSNamesystem: Append Enabled: true 14/03/14 13:27:52 INFO util.GSet: Computing capacity for map INodeMap 14/03/14 13:27:52 INFO util.GSet: VM type = 32-bit 14/03/14 13:27:52 INFO util.GSet: 1.0% max memory 966.7 MB = 9.7 MB 14/03/14 13:27:52 INFO util.GSet: capacity = 2^21 = 2097152 entries 14/03/14 13:27:52 INFO namenode.NameNode: Caching file names occuring more than 10 times 14/03/14 13:27:52 INFO util.GSet: Computing capacity for map cachedBlocks 14/03/14 13:27:52 INFO util.GSet: VM type = 32-bit 14/03/14 13:27:52 INFO util.GSet: 0.25% max memory 966.7 MB = 2.4 MB 14/03/14 13:27:52 INFO util.GSet: capacity = 2^19 = 524288 entries 14/03/14 13:27:52 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033 14/03/14 13:27:52 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0 14/03/14 13:27:52 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension = 30000 14/03/14 13:27:52 INFO namenode.FSNamesystem: Retry cache on namenode is enabled 14/03/14 13:27:52 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis 14/03/14 13:27:52 INFO util.GSet: Computing capacity for map Namenode Retry Cache 14/03/14 13:27:52 INFO util.GSet: VM type = 32-bit 14/03/14 13:27:52 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB 14/03/14 13:27:52 INFO util.GSet: capacity = 2^16 = 65536 entries 14/03/14 13:27:52 INFO common.Storage: Storage directory /home/hadoop-2.3.0/dfs-name has been successfully formatted. 14/03/14 13:27:52 INFO namenode.FSImage: Saving image file /home/hadoop-2.3.0/dfs-name/current/fsimage.ckpt_0000000000000000000 using no compression 14/03/14 13:27:52 INFO namenode.FSImage: Image file /home/hadoop-2.3.0/dfs-name/current/fsimage.ckpt_0000000000000000000 of size 218 bytes saved in 0 seconds. 14/03/14 13:27:52 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 14/03/14 13:27:52 INFO util.ExitUtil: Exiting with status 0 14/03/14 13:27:52 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hapmaster/127.0.0.1 ************************************************************/ hadoop@hapmaster:/home/hadoop-2.3.0/bin$2.啟動集群
SHELL.../sbin$ start-all.sh
![]()
3.監控集群資源
1)命令行
SHELL$ hdfs dfsadmin -report
![]()
2)網頁
- end
來自:http://my.oschina.net/vigiles/blog/208430