一.修改配置文件(hadoop目錄/etc/hadoop/配置文件)
1.修改hadoop-env.sh,指定JAVA_HOME
修改完畢后
2.修改core-site.xml
1 <configuration>
2 <!-- 指定hadoop運行時產生的臨時文件存儲目錄 -->
3 <property>
4 <name>hadoop.tmp.dir</name>
5 <value>/opt/module/hadoop-3.1.1/data/tmp</value>
6 </property>
7
8 <!-- 指定hfds namenode的缺省路徑,可以是主機/ip :端口 -->
9 <property>
10 <name>fs.defaultFS</name>
11 <value>hdfs://hadoop002:9000</value>
12 </property>
13 </configuration>
3.修改hdfs-site.xml
1 <configuration>
2 <!-- 指定HDFS副本的數量 -->
3 <property>
4 <name>dfs.replication</name>
5 <value>1</value>
6 </property>
7 <!--配置namenode的web界面-->
8 <property>
9 <name>dfs.namenode.http-address</name>
10 <value>hadoop002:50070</value>
11 </property>
12 </configuration>
到這啟動hadoop的基本配置已經完成了(配置完這些已經可以啟動hadoop了),下面配置yarn相關的文件
4.修改mapred-site.xml(此配置文件中盡量不要使用中文注釋,否則啟動的時候會有一個java.lang.RuntimeException: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 start byte 0xb5 (at char #672, byte #20))
1 <configuration>
2 <!-- 使用yarn框架 -->
3 <property>
4 <name>mapreduce.framework.name</name>
5 <value>yarn</value>
6 </property>
7 </configuration>
5.修改yarn-site.xml(此配置文件中盡量不要使用中文注釋,否則啟動的時候會有一個java.lang.RuntimeException: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 start byte 0xb5 (at char #672, byte #20))
1 <configuration>
2 <!-- Site specific YARN configuration properties -->
3 <!--resourcemanager address-->
4 <property>
5 <name>yarn.resourcemanager.hostname</name>
6 <value>localhost</value>
7 </property>
8
9 <!--reduce-->
10 <property>
11 <name>yarn.nodemanager.aux-services</name>
12 <value>mapreduce_shuffle</value>
13 </property>
14 </configuration>
6.啟動
6.1按照官方文檔,第一步先檢查ssh能否免密登錄如果不能免密登錄需要執行以下命令
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys
如果不能免密且沒有執行這三個命令,那么啟動時會有Permission Dennied
如果出現ssh connect to host xxx port 22:Connection timed out,ifconfig查看自己的ip與 /etc/hosts下的映射中的ip是否一致
6.2執行hdfs namenode -format格式化namenode,第一次啟動時執行即可,今后不再需要
6.3執行start-dfs.sh
6.4執行start-yarn.sh
或者直接執行stop-all.sh
6.5jps查看進程
可以在/tmp/下查看*.pid文件,其內容為上圖的進程號
6.6停止的話使用對應的stop-xxx.sh(或者stop-all.sh)即可
到這hadoop已經成功啟動了,官方文檔:http://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-common/SingleCluster.html
6.7無法停止hadoop
此時雖然已經可以正常啟動了,但為了維護方便建議修改pid的路徑 ,因為默認把pid文件存儲在/tmp/下,而linux會定期清理/tmp/路徑一旦pid文件被清理到,此時想執行stop-all.sh后再次jps發現hadoop依然在運行,這個時候想關閉hadoop就只能手動的kill了因此要修改pid的存儲路徑,打開hadoop目錄/etc/hadoop/hadoop-env.sh,找到HADOOP_PID_DIR,修改路徑為你自定義的路徑即可接下來通過實驗證明以上結論
先執行jps,證明此時hadoop並未啟動,然后再啟動hadoop
成功啟動后查看pid文件后然后刪除
執行stop-all.sh,發現hadoop依然在運行
此時重新啟動hadoop,發現進程號沒有改變,雖然重新生成了pid
到這說明,一旦hadoop的pid文件被刪除想要停止hadoop就只能手動kill,而且如果hadoop沒有停止掉,又重新啟動了hadoop,此時雖然會生成新的pid,但從進程號上來看依舊是之前沒有被停止掉的hadoop
6.8初始化時出現Cannot remove/create xxxx
打開你的core-site.xml,如果是在"/"下創建目錄最好手動去創建 並且修改屬主與組為你啟動hadoop的用戶
sudo mkdir -p /hadoop/tmp
sudo chown -R tele:tele /hadoop/
創建並且修改完成后重新初始化即可,如果不是在"/"直接創建文件夾,那么就可以交給hadoop自動創建屬主為啟動hadoop的用戶的文件夾了初始化之后如果啟動hadoop,發現沒有datanode,在你指定的tmp路徑/dfs/name目錄下找到一個current/VERSION文件,記錄clusterID並復制。然后dfs/data目錄下找到一個current/VERSION文件,將其中clustreID的值替換成剛剛復制的clusterID的值后重新啟動即可