Hadoop-centos7 安裝配置


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 】