Hadoop2.5.2叢集部署(完全分散式)
環境介紹
硬體環境
CPU 4 MEM 4G 磁碟 60G軟體環境
OS:centos6.5版本 64位Hadoop:hadoop2.5.2 64位
JDK: JDK 1.8.0_91
主機配置規劃
Hadoop01 172.16.1.156 (NameNode) Hadoop02 172.16.1.157 (DataNode) Hadoop03 172.16.1.158 (DataNode)設定主機名
如果沒有足夠的許可權,可以切換使用者為root
三臺機器統一增加以下host配置:
配置免密碼登入SSH
1)生成金鑰: ssh-keygen -t rsa2)將id_dsa.pub(公鑰)追加到授權key中:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys3)將認證檔案複製到另外兩臺DataNode節點上:
scp ~/.ssh/authorized_keys 172.16.1.157:~/.ssh/
scp ~/.ssh/authorized_keys 172.16.1.158:~/.ssh/3)測試:
ssh hadoop02或ssh hadoop03各節點安裝JDK
(1)檢查jdk版本、解除安裝openjdk版本檢視目前安裝openjdk資訊:rpm -qa|grep java
解除安裝以上三個檔案(需要root許可權,登入root許可權解除安裝)
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
rpm -e --nodeps tzdata-java-2013g-1.el6.noarch
(2)選擇版本是jdk-8u91-linux-x64.gz (3)解壓安裝: (4)重新命名jdk為jdk1.8(用mv命令) (5) 配置環境變數:vi /etc/profile加入以下三行 #JAVA_HOME export JAVA_HOME=/home/hadoop/jdk1.8 export PATH=$JAVA_HOME/bin:$PATH (6)執行source /etc/profile使環境變數的配置生效 (7)執行Java –version檢視jdk版本,驗證是否成功 (8) 將hadoop01機器上安裝好JDK複製到另外兩臺節點上Hadoop安裝
每臺節點都要安裝
Hadoop。上傳
hadoop-2.5.2.tar.gz到使用者
/home/hadoop/software目錄下。
解壓
tar -zvxf hadoop-2.5.2.tar.gz -C /home/hadoop/新增環境變數
vi /etc/profile,尾部新增如下 export JAVA_HOME=/home/hadoop/jdk1.8 export HADOOP_HOME=/home/hadoop/hadoop-2.5.2 export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export CLASSPATH=.:$JAVA_HOME/lib:$HADOOP_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH設定環境變數立即生效
source /etc/profile配置Hadoop檔案
(1) core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop01:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/hadoop-2.5.2/hadoop_tmp</value> </property> <property> <name>io.file.buffer.size</name><value>131072</value>
</property> </configuration> (2)hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value> hadoop01 :9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file: /home/hadoop/hadoop-2.5.2 /dfs/name</value> <description>namenode上儲存hdfs元資料</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/ home/hadoop/hadoop-2.5.2 /dfs/data</value> <description>datanode上資料塊物理儲存位置</description> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration> 注:訪問namenode的 webhdfs 使用50070埠,訪問datanode的webhdfs使用50075埠。要想不區分埠,直接使用namenode的IP和埠進行所有webhdfs操作,就需要在所有datanode上都設定hdfs-site.xml中dfs.webhdfs.enabled為true。 (3)mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop01:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop01:19888</value> </property> </configuration> jobhistory是Hadoop自帶一個歷史伺服器,記錄Mapreduce歷史作業。預設情況下,jobhistory沒有啟動,可用以下命令啟動: sbin/mr-jobhistory-daemon.sh start historyserver (4)yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value> hadoop01 :8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>hadoop01:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop01:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>hadoop01:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>hadoop01:8088</value> </property> </configuration>
(5)修改slaves檔案,新增datanode節點hostname到slaves檔案中
hadoop01 hadoop02 (6)如果已經配置了JAVA_HOME環境變數,hadoop-env.sh與yarn-env.sh這兩個檔案不用修改,因為裡面配置就是:
export JAVA_HOME=${JAVA_HOME}
如果沒有配置JAVA_HOME環境變數,需要分別在hadoop-env.sh和yarn-env.sh中
手動
新增
JAVA_HOME
export JAVA_HOME=
/home/hadoop/jdk1.8
最後,將整個hadoop-2.5.2資料夾及其子資料夾使用scp複製到兩臺Slave相同目錄中:
執行Hadoop
格式化
hdfs namenode –format啟動Hadoop
start-dfs.sh start-yarn.sh 可以用一條命令: start-all.sh停止Hadoop
stop-all.shJPS檢視程序
master主節點程序: slave資料節點程序:通過瀏覽器檢視叢集執行狀態
http://172.16.1.156:50070http://172.16.1.156:8088/
http://172.16.1.156:19888
jobhistory是Hadoop自帶一個歷史伺服器,記錄Mapreduce歷史作業。預設情況下,jobhistory沒有啟動,可用以下命令啟動: sbin/mr-jobhistory-daemon.sh start historyserver
測試Hadoop
1)建立輸入檔案:vi wordcount.txt
輸入內容為:
hello you
hello me
hello everyone
2)建立目錄
hadoop fs -mkdir /data/wordcount
hadoop fs –mkdir /output/
目錄/data/wordcount用來存放Hadoop自帶WordCount例子的資料檔案,執行這個MapReduce任務結果輸出到/output/wordcount目錄中。3)上傳檔案
hadoop fs -put wordcount.txt/data/wordcount/
4)執行wordcount程式
hadoop jar usr/local/program/Hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar wordcount /data/wordcount /output/wordcount/
5)檢視結果
hadoop fs -text /output/wordcount/part-r-00000
[[email protected]]# hadoop fs -text /output/wordcount/part-r-00000 everyone 1 hello 3 me 1 you 1搭建中遇到問題總結
問題一: 在配置環境變數過程可能遇到輸入命令ls命令不能識別問題: ls -bash: ls: command not found 原因:在設定環境變數時,編輯profile檔案沒有寫正確,將export PATH=$JAVA_HOME/bin:$PATH中冒號誤寫成分號 ,導致在命令列下ls等命令不能夠識別。 解決方案:export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 問題二: 在主機上啟動hadoop叢集,然後使用jps檢視主從機上程序狀態,能夠看到主機上的resourcemanager和各個從機上的nodemanager,但是過一段時間後,從機上的nodemanager就沒有了,主機上的resourcemanager還在。
原因是防火牆處於開啟狀態: 注:nodemanager啟動後要通過心跳機制定期與RM通訊,否則RM會認為NM死掉,會停止NM服務。 service 方式
開啟: service iptables start
關閉: service iptables stop