1.下載安裝包(http://hadoop.apache.org/releases.html#Download)
這裏用的是:hadoop-2.7.4.tar.gz
2.1將安裝包解壓到指定目錄文件夾(這裏用的是普通用戶進行安裝:hadoop用戶)
[[email protected] ~]$tar -zxcf hadoop-2.7.4.tar.gz -C apps/ 將安裝包解壓到apps目錄下
2.2.配置集羣所有服務器的 /etc/hosts 文件完成主機名和ip的映射
添加下面三行:(這裏是用三臺服務器做集羣)
192.168.0.210 mini1
192.168.0.211 mini2
192.168.0.212 mini3
(要保證修改完主機之間可以用主機名相互ping通,否則後面的配置會導致dataNode無法找到nameNode)
3.進入配置文件目錄修改配置文件:
/home/hadoop/apps/hadoop-2.7.4/etc/hadoop
4.獲取本地的JAVA_HOME
[[email protected] hadoop]#echo $JAVA_HOME
/usr/java/jdk1.8.0_91
5.將JAVA_HOME添加到配置文件 hadoop-env.sh
修改裏面的:(配置java環境) 因爲是通過ssh啓動,用${JAVA_HOME} 在啓動線程中得不到JVM
export JAVA_HOME=/usr/java/jdk1.8.0_91
6.配置core-site.xml
[[email protected] hadoop]# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mini1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hdpdata</value>
</property>
</configuration>
(注意:這裏的nane node 主機要是寫的是ip則會造成dataNode無法連接到nameNode)
7.修改hdfs-site.xml (都有默認參數,可以選擇不配)
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
8.配置mapred-site.xml.template
(1)重命名爲:mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
(2)添加內容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
9.配置 yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.0.210</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
這裏就已經將所有hadoop配置文件修改完了,直接講修改完的hadoop安裝包複製到其他服務器上就行了
10.配置hadoop命令作用域爲全局(hadoop_home 和 path)
[[email protected] apps]$sudo vim /etc/profile
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(修改完記得 source /etc/profile 否則修改無效)
11.格式化文件系統(即:生成文件系統中需要的文件目錄)
(注意:這裏是定192.168.0.210 (即:mini1) 主機爲namenode節點,所以該命令在192.168.0.210主機執行)
[[email protected] ~]$hadoop namenode -format
(出現下面信息表上初始化成功)
12.啓動namenode和datanode:
apps/hadoop-2.7.4/sbin/hadoop-daemon.sh 這是啓動問價
(1)在192.168.0.210 (mini1)主機啓動nameNode :
[[email protected] ~]$hadoop-daemon.sh start namenode
(2)在192.168.0.211和192.168.0.212服務器啓動datanode:
[[email protected] apps]$hadoop-daemon.sh start datanode
13.測試hadoop
【 通過瀏覽器訪問(namenode主機): http://192.168.0.210:50070 查看節點活動情況】
(若無法訪問可能是因爲防火牆,關閉防火牆:[[email protected] ~]$ systemctl stop firewalld.service)
14.啓動失敗原因:
當在啓動datannode時用jps命令發現datanode進程不存在且在該目錄中沒有生成hdpdata文件夾
表明該服務器上hadoop中的mapred-site.xml.template配置文件沒有修改,用的是默認的localhost,即操作8沒有完成,按步驟8重新配置就行(這時namenode的文件系統就需要重新格式化,即步驟11重新執行一次)。
成功:
15.實現自動啓動所有節點:
(1).實現SSH免密登錄
當然要實現上面方式從一臺服務器同時啓動另外兩太服務器的zookeeper服務,則首先需要實現對另外兩條服務器的免密登錄:
(實現192.168.0.210免密登錄 192.168.0.210、192.168.0.211和192.168.0.212)
在192.168.0.210主機上執行下面命令:
[[email protected] ~]$ssh-keygen
[hadoop@mini1 ~]# ssh-copy-id 192.168.0.210
[hadoop@mini1 ~]# ssh-copy-id 192.168.0.211
[hadoop@mini1 ~]# ssh-copy-id 192.168.0.212
第一行命令是生成210主機的祕鑰對(一直點回車就行),第二條命令是將公鑰複製一份給211主機、第三條命令是將公鑰複製一份給212主機
(2)修改slaves文件(路徑:/home/hadoop/apps/hadoop-2.7.4/etc/hadoop/)
在文件中只寫dataNode主機的主機名,nameNode不用寫,(原有的localhost刪除了,否則nameNode主機同時也是dataNode主機)這裏dataNode只有mini2和mini3所以就寫下面兩行:
mini2
mini3
(3)腳本目錄 /home/hadoop/apps/hadoop-2.7.4/sbin
1>.啓動全部:[[email protected] sbin]$start-all.sh
(可以分成兩步啓動 [[email protected] sbin]$start-dfs.sh 和 [[email protected] sbin]$ start-yarn.sh
2>. 關閉全部:[[email protected] sbin]$stop-all.sh (同樣也可以分成兩步執行)
hdfs文件系統中常見命令:
創建文件夾:
[[email protected] ~]$ hadoop fs -mkdir -p /wordcount/input 在更目錄下建立 /wordcount/input 兩級目錄
文件上傳:
[[email protected] ~]$ hadoop fs -put a.txt b.txt /wordcount/input 將a.txt和b.txt文件上傳到 /wordcount/input目錄
16.執行一個mapredue程序
測試一個文件夾下所有文件單詞數量:
[[email protected] mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.4.jar wordcount /wordcount/input /wordcount/output
(這是執行一個mapreduce函數,wordcount是計算單詞量的函數名 ,掃描/woedcount/input目錄寫所有文件, 將結果保存到 /wordcount/output 目錄下且output目錄必須是不存在的不然報錯;hadoop-mapreduce-examples-2.7.4.jar這個jar 包路徑是:/home/hadoop/apps/hadoop-2.7.4/share/hadoop/mapreduce)
異常 1 、如果出現報錯信息:
需要檢查集羣服務器上 /etc/hosts 文件中hostname和IP的映射關係配置:
同時檢查防火牆是否關閉,將防火牆關閉應該就沒有問題了。
異常 2、如果出現報錯:
說明運行程序導出結果文件夾已經存在,執行該程序需要保證結果輸出文件夾是不存在的,否則報錯!
17.datanode不被識別問題
datanode在formate初始化時會生成兩個標識(blockPollId 和 clusterId)
新的datanode加入是會獲取這兩個表示作爲自己工作目錄中的標識,(注意:)一旦namenode重新formate後namenode的身份標識已變,而datanoded如果還是原來的標識的話就無法被namenode識別(需要將datanode的工作空間 'hdpdata' 刪除重新啓動datanode就行)
執行成功:
生成的part-r-00000文件就是程序運行結果保存的文件!
命令方式查看結果:
[[email protected] ~]$ hadoop fs -cat /wordcount/output/part-r-00000
【Linux配置普通用戶(hadoop)的sudo hostname命令:[ 到 /etc/sudoers 文件中添加一行 hadoopALL=(ALL)ALL 】