Hadoop叢集完全分散式模式環境部署
Hadoop簡介
Hadoop是Apache軟體基金會旗下的一個開源分散式計算平臺。以Hadoop分散式檔案系統(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的開源實現)為核心的Hadoop為使用者提供了系統底層細節透明的分散式基礎架構。
對於Hadoop的叢集來講,可以分成兩大類角色:Master和Salve。一個HDFS叢集是由一個NameNode和若干個DataNode組成的。其中NameNode作為主伺服器,管理檔案系統的名稱空間和客戶端對檔案系統的訪問操作;叢集中的DataNode管理儲存的資料。MapReduce框架是由一個單獨執行在主節點上的JobTracker和執行在每個叢集從節點的TaskTracker共同組成的。主節點負責排程構成一個作業的所有任務,這些任務分佈在不同的從節點上。主節點監控它們的執行情況,並且重新執行之前的失敗任務;從節點僅負責由主節點指派的任務。當一個Job被提交時,JobTracker接收到提交作業和配置資訊之後,就會將配置資訊等分發給從節點,同時排程任務並監控TaskTracker的執行。
從上面的介紹可以看出,HDFS和MapReduce共同組成了Hadoop分散式系統體系結構的核心。HDFS在叢集上實現分散式檔案系統,MapReduce在叢集上實現了分散式計算和任務處理。HDFS在MapReduce任務處理過程中提供了檔案操作和儲存等支援,MapReduce在HDFS的基礎上實現了任務的分發、跟蹤、執行等工作,並收集結果,二者相互作用,完成了Hadoop分散式叢集的主要任務。
先決條件
1) 確保在你叢集中的每個節點上都安裝了所有必需軟體:sun-JDK ssh Hadoop。
2) JavaTM1.5.x,必須安裝,建議選擇Sun公司發行的Java版本。
3) ssh 必須安裝並且保證 sshd一直執行,以便用Hadoop 指令碼管理遠端Hadoop守護程式。
實驗環境
操作平臺:vmware
作業系統:CentOS 5.9
軟體版本:hadoop-1.2.1,jdk-6u45
叢集架構:包括4個節點:1個Master,3個Salve,節點之間區域網連線,可以相互ping通。節點IP地址分佈如下:
主機名 |
IP |
系統版本 |
Hadoop node |
hadoop程式名 |
Master |
192.168.137.100 |
CetOS 5.9 |
master |
namenode,jobtracker |
Slave1 |
192.168.137.101 |
CetOS 5.9 |
slave |
datanode,tasktracker |
Slave2 |
192.168.137.102 |
CetOS 5.9 |
slave |
datanode,tasktracker |
Slave3 |
192.168.137.103 |
CetOS 5.9 |
slave |
datanode,tasktracker |
四個節點上均是CentOS5.9系統,並且有一個相同的使用者hadoop。Master機器主要配置NameNode和JobTracker的角色,負責總管分散式資料和分解任務的執行;3個Salve機器配置DataNode和TaskTracker的角色,負責分散式資料儲存以及任務的執行。
安裝步驟
下載:jdk-6u45-linux-x64.bin , hadoop-1.2.1.tar.gz (主機名和網路配置略)
說明:在生產的hadoop叢集環境中,由於伺服器可能會有許多臺,透過配置DNS對映機器名,相比配置/etc/host方法,可以避免在每個節點都配置各自的host檔案,而且在新增節點時也不需要修改每個節點的/etc/host的主機名-IP對映檔案。減少了配置步驟和時間,便於管理。
1、JDK安裝
#/bin/bash jdk-6u45-linux-x64.bin
#mv jdk1.6.0_45 /usr/local/
新增java環境變數:
#vim /etc/profile
#最後新增
# set java environment
export JAVA_HOME=/usr/local/jdk1.6.0_45/
export JRE_HOME=/usr/local/jdk1.6.0_45/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
生效java變數:
#source /etc/profile
# java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
在所有的機器上都建立相同的目錄,也可以就建立相同的使用者,最好是以該使用者的home路徑來做hadoop的安裝路徑。安裝路徑都是:/home/hadoop/hadoop-1.2.1
#useradd hadoop
#passwd hadoop
2、SSH配置
在Hadoop啟動以後,Namenode是透過SSH(Secure Shell)來啟動和停止各個datanode上的各種守護程式的,這就須要在節點之間執行指令的時候是不須要輸入密碼的形式,故我們須要配置SSH運用無密碼公鑰認證的形式。以本文中的四臺機器為例,現在Master是主節點,他須要連線Slave1、Slave2和Slave3。須要確定每臺機器上都安裝了ssh,並且datanode機器上sshd服務已經啟動。
切換到hadoop使用者( 保證使用者hadoop可以無需密碼登入,因為我們後面安裝的hadoop屬主是hadoop使用者。)
1) 在每臺主機生成金鑰對
#su - hadoop
#ssh-keygen -t rsa#cat ~/.ssh/id_rsa.pub
這個命令生成一個金鑰對:id_rsa(私鑰檔案)和id_rsa.pub(公鑰檔案)。預設被儲存在~/.ssh/目錄下。
2) 將Master公鑰新增到遠端主機Slave1的 authorized_keys 檔案中
在/home/hadoop/.ssh/下建立authorized_keys
#vim authorized_keys
將剛才複製的公鑰複製進去
許可權設定為600.(這點很重要,網沒有設定600許可權會導致登陸失敗)
測試登陸:
$ ssh Slave1
The authenticity of host 'slave2 (192.168.137.101)' can't be established.
RSA key fingerprint is d5:18:cb:5f:92:66:74:c7:30:30:bb:36:bf:4c:ed:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave2,192.168.137.101' (RSA) to the list of known hosts.
Last login: Fri Aug 30 21:31:36 2013 from slave1
[hadoop@Slave1 ~]$
同樣的方法,將Master 的公鑰複製到其他節點。
3、安裝Hadoop
1) 切換為hadoop使用者,下載安裝包後,直接解壓安裝即可:
#su - hadoop
#wget
#tar -zxvf hadoop-1.2.1.tar.gz
我的安裝目錄為:
/home/hadoop/hadoop-1.2.1
為了方便,使用hadoop命令或者start-all.sh等命令,修改Master上/etc/profile 新增以下內容:
export HADOOP_HOME=/home/hadoop/hadoop-1.2.1
export PATH=$PATH:$HADOOP_HOME/bin
修改完畢後,執行source /etc/profile 來使其生效。
2) 配置conf/hadoop-env.sh檔案
配置conf/hadoop-env.sh檔案,新增:
export JAVA_HOME=/usr/local/jdk1.6.0_45/
這裡修改為你的jdk的安裝位置。
測試hadoop安裝:
/home/hadoop/hadoop-1.2.1/bin/hadoop jar hadoop-0.20.2-examples.jarwordcount conf/ /tmp/out
4、叢集配置(所有節點相同)
1) 配置檔案:conf/core-site.xml
<!--?xml version="1.0"?-->
<!--?xml-stylesheet type="text/xsl" href="configuration.xsl"?-->
<!-- Put site-specific property overrides in this file. -->
fs.default.name
Master:9000
The name of the default file system. Either the literal string "local" or a host:port forDFS.
hadoop.tmp.dir
/home/hadoop/tmp
A base for other temporary directories.
fs.default.name是NameNode的URI。hdfs://主機名:埠/hadoop.tmp.dir :Hadoop的預設臨時路徑,這個最好配置,如果在新增節點或者其他情況下莫名其妙的DataNode啟動不了,就刪除此檔案中的tmp目錄即可。不過如果刪除了NameNode機器的此目錄,那麼就需要重新執行NameNode格式化的命令。
2) 配置檔案:conf/mapred-site.xml
<!--?xml-stylesheet type="text/xsl" href="configuration.xsl"?-->
<!-- Put site-specific property overrides in this file. -->
mapred.job.tracker
Master:9001
The host and port that the MapReduce job tracker runs at. If "local", then jobs are runin-process as a single map and reduce task.
mapred.local.dir
/home/hadoop/tmp
mapred.job.tracker是JobTracker的主機(或者IP)和埠。主機:埠。
3) 配置檔案:conf/hdfs-site.xml
<!--?xml version="1.0"?-->
<!--?xml-stylesheet type="text/xsl" href="configuration.xsl"?-->
<!-- Put site-specific property overrides in this file. -->
dfs.name.dir
/home/hadoop/name1, /home/hadoop/name2
Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.
dfs.data.dir
/home/hadoop/data1, /home/hadoop/data2
Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.
dfs.replication
3
Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.
dfs.name.dir是NameNode持久儲存名字空間及事務日誌的本地檔案系統路徑。 當這個值是一個逗號分割的目錄列表時,nametable資料將會被複制到所有目錄中做冗餘備份。
dfs.data.dir是DataNode存放塊資料的本地檔案系統路徑,逗號分割的列表。 當這個值是逗號分割的目錄列表時,資料將被儲存在所有目錄下,通常分佈在不同裝置上。
dfs.replication是資料需要備份的數量,預設是3,如果此數大於叢集的機器數會出錯。
注意:此處的name1、name2、data1、data2目錄不能預先建立,hadoop格式化時會自動建立,如果預先建立反而會有問題。
4) 配置masters和slaves主從結點
配置conf/masters和conf/slaves來設定主從結點,注意最好使用主機名,並且保證機器之間透過主機名可以互相訪問,每個主機名一行。
$vim masters:
輸入:
Master
$vim slaves:
輸入:
Slave1
Slave2
Slave3
配置結束,把配置好的hadoop資料夾複製到其他叢集的機器中,並且保證上面的配置對於其他機器而言正確,例如:如果其他機器的Java安裝路徑不一樣,要修改conf/hadoop-env.sh
$scp -r /home/hadoop/hadoop-1.2.1 Slave1:/home/hadoop/
$scp -r /home/hadoop/hadoop-1.2.1 Slave2:/home/hadoop/
$scp -r /home/hadoop/hadoop-1.2.1 Slave3:/home/hadoop/
5、hadoop啟動
1) 格式化一個新的分散式檔案系統
$ cd /home/hadoop/hadoop-1.2.1 $ bin/hadoop namenode -format
成功情況下系統輸出:
Warning: $HADOOP_HOME is deprecated.
13/09/10 16:39:31 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = Master/192.168.137.100
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.1
STARTUP_MSG: build = -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG: java = 1.6.0_45
************************************************************/
13/09/10 16:39:32 INFO util.GSet: Computing capacity for map BlocksMap
13/09/10 16:39:32 INFO util.GSet: VM type = 64-bit
13/09/10 16:39:32 INFO util.GSet: 2.0% max memory = 1013645312
13/09/10 16:39:32 INFO util.GSet: capacity = 2^21 = 2097152 entries
13/09/10 16:39:32 INFO util.GSet: recommended=2097152, actual=2097152
13/09/10 16:39:32 INFO namenode.FSNamesystem: fsOwner=hadoop
13/09/10 16:39:32 INFO namenode.FSNamesystem: supergroup=supergroup
13/09/10 16:39:32 INFO namenode.FSNamesystem: isPermissionEnabled=true
13/09/10 16:39:32 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
13/09/10 16:39:32 INFO namenode.FSNamesystem: isAccessTokenEnabled=falseaccessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
13/09/10 16:39:32 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0
13/09/10 16:39:32 INFO namenode.NameNode: Caching file names occuring more than 10 times
13/09/10 16:39:33 INFO common.Storage: Image file /home/hadoop/name1/current/fsimage of size 112 bytes saved in 0 seconds.
13/09/10 16:39:33 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/home/hadoop/name1/current/edits
13/09/10 16:39:33 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/home/hadoop/name1/current/edits
13/09/10 16:39:33 INFO common.Storage: Storage directory /home/hadoop/name1 has been successfully formatted.
13/09/10 16:39:33 INFO common.Storage: Image file /home/hadoop/name2/current/fsimage of size 112 bytes saved in 0 seconds.
13/09/10 16:39:33 INFO namenode.FSEditLog: closing edit log: position=4, editlog= /home/hadoop/name2/current/edits
13/09/10 16:39:33 INFO namenode.FSEditLog: close success: truncate to 4, editlog= /home/hadoop/name2/current/edits
13/09/10 16:39:33 INFO common.Storage: Storage directory /home/hadoop/name2 has been successfully formatted.
13/09/10 16:39:33 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at Master/192.168.137.100
************************************************************/
檢視輸出保證分散式檔案系統格式化成功執行完後可以到master機器上看到/home/hadoop//name1和/home/hadoop/name2兩個目錄。在主節點master上面啟動hadoop,主節點會啟動所有從節點的hadoop。
2) 啟動所有節點
啟動方式1:
$ bin/start-all.sh
(同時啟動HDFS和Map/Reduce)系統輸出:
$ bin/start-all.sh
Warning: $HADOOP_HOME is deprecated.
starting namenode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-namenode-Master.out
Slave3: starting datanode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-datanode-Slave3.out
Slave2: starting datanode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-datanode-Slave2.out
Slave1: starting datanode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-datanode-Slave1.out
The authenticity of host 'master (192.168.137.100)' can't be established.
RSA key fingerprint is d5:18:cb:5f:92:66:74:c7:30:30:bb:36:bf:4c:ed:e9.
Are you sure you want to continue connecting (yes/no)? yes
Master: Warning: Permanently added 'master,192.168.137.100' (RSA) to the list of known hosts.
hadoop@master's password:
Master: starting secondarynamenode, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-secondarynamenode-Master.out
starting jobtracker, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-jobtracker-Master.out
Slave2: starting tasktracker, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-tasktracker-Slave2.out
Slave3: starting tasktracker, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-tasktracker-Slave3.out
Slave1: starting tasktracker, logging to /home/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-hadoop-tasktracker-Slave1.out
執行完後可以到master(Master)和slave(Slave1,Slave2,Slave3)機器上看到/home/hadoop/hadoopfs/data1和/home/hadoop/data2兩個目錄。
啟動方式2:
啟動Hadoop叢集需要啟動HDFS叢集和Map/Reduce叢集。
在分配的NameNode上,執行下面的命令啟動HDFS:
$ bin/start-dfs.sh
(單獨啟動HDFS叢集)
bin/start-dfs.sh指令碼會參照NameNode上${HADOOP_CONF_DIR}/slaves檔案的內容,在所有列出的slave上啟動DataNode守護程式。
在分配的JobTracker上,執行下面的命令啟動Map/Reduce:$bin/start-mapred.sh
(單獨啟動Map/Reduce)
bin/start-mapred.sh指令碼會參照JobTracker上${HADOOP_CONF_DIR}/slaves檔案的內容,在所有列出的slave上啟動TaskTracker守護程式。
3) 關閉所有節點
從主節點master關閉hadoop,主節點會關閉所有從節點的hadoop。
$ bin/stop-all.sh
Hadoop守護程式的日誌寫入到 ${HADOOP_LOG_DIR} 目錄 (預設是 ${HADOOP_HOME}/logs).
${HADOOP_HOME}就是安裝路徑.
6、測試
1) 用jps檢驗各後臺程式是否成功啟動
--在master節點檢視後臺程式
$ /usr/local/jdk1.6.0_45/bin/jps
3180 Jps
2419 SecondaryNameNode
2236 NameNode
2499 JobTracker
--在slave節點檢視後臺程式
$ /usr/local/jdk1.6.0_45/bin/jps
2631 Jps
2277 DataNode
2365 TaskTracker
2) 透過用瀏覽器和http訪問NameNode和JobTracker的網路介面:
NameNode – http://192.168.137.100:50070/dfshealth.jsp
Jobtracker – http://192.168.137.101:50060/tasktracker.jsp
3) 使用netstat –nat檢視埠9000和9001是否正在使用。
HDFS操作
執行bin/目錄的hadoop命令,可以檢視Haoop所有支援的操作及其用法,這裡以幾個簡單的操作為例。
建立目錄
$bin/hadoop dfs -mkdir testdir
Warning: $HADOOP_HOME is deprecated.
13/09/10 17:29:05 WARN fs.FileSystem: "Master:9000" is a deprecated filesystem name. Use"hdfs://Master:9000/" instead.
在HDFS中建立一個名為testdir的目錄
複製檔案
$ bin/hadoop dfs -put /home/hadoop/hadoop-1.2.1.tar.gz testfile.zip
Warning: $HADOOP_HOME is deprecated.
13/09/10 17:30:32 WARN fs.FileSystem: "Master:9000" is a deprecated filesystem name. Use"hdfs://Master:9000/" instead.
13/09/10 17:30:33 WARN fs.FileSystem: "Master:9000" is a deprecated filesystem name. Use"hdfs://Master:9000/" instead
把本地檔案/home/hadoop/hadoop-1.2.1.tar.gz複製到HDFS的根目錄/user/hadoop/下,檔名為testfile.zip
檢視現有檔案
$ bin/hadoop dfs -ls
Warning: $HADOOP_HOME is deprecated.
13/09/10 17:32:00 WARN fs.FileSystem: "Master:9000" is a deprecated filesystem name. Use"hdfs://Master:9000/" instead.
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2013-09-10 17:29 /user/hadoop/testdir
-rw-r--r-- 3 hadoop supergroup 63851630 2013-09-10 17:30 /user/hadoop/testfile.zip
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-2124373/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hadoop完全分散式叢集配置Hadoop分散式
- 完全分散式模式hadoop叢集安裝與配置分散式模式Hadoop
- 虛擬機器裝Hadoop叢集完全分散式虛擬機Hadoop分散式
- 完全分散式Hadoop叢集的安裝部署步驟分散式Hadoop
- hadoop分散式叢集搭建Hadoop分散式
- Hadoop框架:叢集模式下分散式環境搭建Hadoop框架模式分散式
- 生產環境Hadoop大叢集完全分散式模式安裝 NFS+DNS+awkHadoop分散式模式NFSDNS
- Hadoop分散式叢集搭建_1Hadoop分散式
- hadoop學習之hadoop完全分散式叢集安裝Hadoop分散式
- HBase篇--搭建HBase完全分散式叢集分散式
- Hadoop3.0完全分散式叢集安裝部署Hadoop分散式
- Hadoop的叢集環境部署說明Hadoop
- Hadoop HA叢集 與 開發環境部署Hadoop開發環境
- Hadoop完全分散式模式的安裝和配置Hadoop分散式模式
- hadoop完全分散式搭建Hadoop分散式
- [Hadoop踩坑]叢集分散式環境配置Hadoop分散式
- hadoop叢集搭建——單節點(偽分散式)Hadoop分散式
- 分散式Hadoop1.2.1叢集的安裝分散式Hadoop
- Centos7下GlusterFS分散式儲存叢集環境部署記錄CentOS分散式
- Hadoop 2.6 叢集搭建從零開始之4 Hadoop的安裝與配置(完全分散式環境)Hadoop分散式
- ElasticSearch 分散式叢集Elasticsearch分散式
- Hadoop hdfs完全分散式搭建教程Hadoop分散式
- hadoop完全分散式環境搭建Hadoop分散式
- hadoop分散式叢集搭建前期準備(centos7)Hadoop分散式CentOS
- 【Hadoop】 分散式Hadoop叢集安裝配置Hadoop分散式
- hadoop 2.8.5完全分散式環境搭建Hadoop分散式
- hadoop2.4.1完全分散式安裝Hadoop分散式
- hadoop偽分散式叢集的安裝(不是單機版)Hadoop分散式
- Centos7搭建hadoop3.3.4分散式叢集CentOSHadoop分散式
- golang分散式與叢集Golang分散式
- elasticsearch(三)---分散式叢集Elasticsearch分散式
- HA分散式叢集搭建分散式
- hbase分散式叢集搭建分散式
- HDFS分散式叢集搭建分散式
- [hadoop]hadoop2.6完全分散式環境搭建Hadoop分散式
- TiUP線上佈署TIDB分散式資料庫叢集節點刪除TiDB分散式資料庫
- Redis 4.0叢集環境部署Redis
- mongodb副本叢集和分片叢集佈署MongoDB