兩臺配置CentOS 7.3的阿里雲ECS服務器;html
Hadoop:hadoop-2.7.3.tar.gz;java
Java: jdk-8u77-linux-x64.tar.gz;node
因爲系統爲CentOS 7,能夠直接使用‘hostnamectl set-hostname 主機名’來修改,修改完畢後從新shell登陸或者重啓服務器便可。linux
1 hostnamectl set-hostname master 2 exit 3 ssh root@master
1 hostnamectl set-hostname slave1 2 exit 3 ssh root@slave1
設置本地域名這一步很是關鍵,ip的本地域名信息配置很差,即有可能形成Hadoop啓動出現問題,又有可能形成在使用Hadoop的MapReduce進行計算時報錯。在ECS上搭建Hadoop集羣環境需參考如下兩篇文章:web
阿里雲ECS搭建Hadoop集羣環境——啓動時報錯「java.net.BindException: Cannot assign requested address」問題的解決shell
阿里雲ECS搭建Hadoop集羣環境——計算時出現「java.lang.IllegalArgumentException: java.net.UnknownHostException」錯誤的解決apache
總結一下那就是,在「/etc/hosts」文件中進行域名配置時要聽從2個原則:vim
master安全
slave1服務器
此處摘自 https://blog.csdn.net/dongdong9223/article/details/81275360
配置好後須要在各個節點上執行以下命令,測試是否相互 ping 得通,若是 ping 不通,後面就沒法順利配置成功:
1 ping master -c 3 2 ping slave1 -c 3
例如我在 master 節點上 ping slave1 ,ping 通的話會顯示 time,顯示的結果以下圖所示:
master: NameNode ResourceManager
slave1: DataNode NodeManager
分別在 master 和 slave1 上作以下操做
1 ssh-keygen -t rsa 2 ssh-copy-id master 3 ssh-copy-id slave1
驗證
ssh master date;ssh slave1 date
解壓JDK安裝包到/usr/local/下
tar -zxvf jdk-8u77-linux-x64.tar.gz -C /usr/local/
將解壓目錄改成 jdk1.8
mv jdk1.8.0_77/ jdk1.8/
設置JAVA_HOME到系統環境變量
vim /etc/profile
在最後加入如下兩行代碼
export JAVA_HOME=/usr/local/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin
從新加載環境
source /etc/profile
這樣 master 的jdk就配置好了,能夠用命令 java -version 測試下。
java -version
下面只需將 master 上配置好的文件分發到 slave1 上便可。
將/usr/local/jdk1.8分發到 slave1 的/usr/local/下(建議壓縮後再分發)
scp -r /usr/local/jdk1.8/ slave1:/usr/local/
將/etc/profile分發到 slave1 的/etc/下
scp /etc/profile slave1:/etc/
而後從新加載 slave1 環境便完成了 slave1 的jdk配置
source /etc/profile
1 cd ~ 2 tar -zxvf hadoop-2.7.3.tar.gz -C /usr/local # 解壓到/usr/local中 3 cd /usr/local/ 4 mv ./hadoop-2.7.3/ ./hadoop # 將文件夾名改成hadoop
輸入以下命令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息:
1 cd /usr/local/hadoop 2 ./bin/hadoop version
添加 HADOOP_HOME 到系統環境變量
vim /etc/profile
在後面添加以下兩行
1 export HADOOP_HOME=/usr/local/hadoop 2 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
從新加載環境,並輸出變量 HADOOP_HOME 驗證
進入/user/local/hadoop/etc/hadoop/能夠看到以下配置文件
集羣/分佈式模式須要修改 /usr/local/hadoop/etc/hadoop 中的6個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了我完成課堂做業所必須的設置項:hadoop-env.sh, slaves, core-default.xml, hdfs-default.xml, mapred-default.xml, yarn-default.xml 。
1.首先來配置 hadoop-env.sh ,只須要設置一下JAVA_HOME便可
注:以前在配置jdk中配置的是基於系統的JAVA_HOME變量,這裏須要配置基於Hadoop集羣的JAVA_HOME變量。
hadoop-env.sh 是Hadoop的環境變量配置腳本。
因此應作如下修改 vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8
2.配置 slave , 指定 slave 節點
sudo vi slaves
刪去原有的 localhost , 添加將做爲 slave 節點的 slave1
3.配置 core-site.xml
1 <configuration>
2
3 <property>
4 <name>fs.defaultFS</name>
5 <value>hdfs://master:9000</value>
6 <description>The name of the default file system.</description>
7 </property>
8 # 設置訪問hdfs的默認名,9000是默認端口 9 10 <property> 11 <name>hadoop.tmp.dir</name> 12 <value>/usr/local/hadoop/tmp</value> 13 <description>Abase for other temporary directories.</description> 14 </property> 15 # 在hdfs格式化的時候會自動建立相應的目錄 'tmp/' 16 17 <property> 18 <name>fs.trash.interval</name> 19 <value>4320</value> 20 <description>Number of minutes after which the checkpoint gets deleted.</description> 21 </property> 22 # 設置回收站裏的文件保留時間(單位:秒) 23 24 </configuration>
4.配置 hdfs-site.xml
1 <configuration>
2
3 <property>
4 <name>dfs.namenode.name.dir</name>
5 <value>/usr/local/hadoop/tmp/dfs/name</value>
6 </property>
7
8 <property>
9 <name>dfs.datanode.data.dir</name>
10 <value>/usr/local/hadoop/tmp/dfs/data</value>
11 </property>
12
13 <property>
14 <name>dfs.replication</name>
15 <value>1</value>
16 </property>
17 # 副本,由於有一個 slave 節點這裏設置爲1(通常僞分佈模式設1個,三個或三個以上節點設3個) 18 19 <property> 20 <name>dfs.permissions.enabled</name> 21 <value>false</value> 22 <description>If "true", enable permission checking in HDFS. If "false", permission checking is turned off, but all other behavior is unchanged. Switching from one parameter value to the other does not change the mode, owner or group of files or directories.</description> 23 </property> 24 25 </configuration>
5.配置 mapred-site.xml (這個文件沒有直接提供,而是提供了模版文件,需將模版文件轉換爲配置文件)
1 sudo mv mapred-site.xml.template mapred-site.xml 2 sudo vi mapred-site.xml
1 <configuration> 2 3 <property> 4 <name>mapreduce.framework.name</name> 5 <value>yarn</value> 6 <description>The runtime framework for executing MapReduce jobs.Can be one of local, classic or yarn.</description> 7 </property> 8 <property> 9 <name>mapreduce.jobtracker.http.address</name> 10 <value>master:50030</value> 11 </property> 12 <property> 13 <name>mapreduce.jobhisotry.address</name> 14 <value>master:10020</value> 15 </property> 16 <property> 17 <name>mapreduce.jobhistory.webapp.address</name> 18 <value>master:19888</value> 19 </property> 20 <property> 21 <name>mapreduce.jobhistory.done-dir</name> 22 <value>/jobhistory/done</value> 23 </property> 24 <property> 25 <name>mapreduce.jobhistory.intermediate-done-dir</name> 26 <value>/jobhisotry/done_intermediate</value> 27 </property> 28 <property> 29 <name>mapreduce.job.ubertask.enable</name> 30 <value>true</value> 31 <description>Whether to enable the small-jobs "ubertask" optimization,which runs "sufficiently small" jobs sequentially within a single JVM."Small" is defined by the following maxmaps, maxreduces, and maxbytes settings. Note that configurations for application masters also affect the "Small" definition - yarn.app.mapreduce.am.resource.mb must be larger than both mapreduce.map.memory.mb and mapreduce.reduce.memory.mb, and yarn.app.mapreduce.am.resource.cpu-vcores must be larger than both mapreduce.map.cpu.vcores and mapreduce.reduce.cpu.vcores to enable ubertask. Users may override this value.</description> 32 </property> 33 34 </configuration>
6.配置 yarn-site.xml
1 <configuration> 2 3 <property> 4 <name>yarn.resourcemanager.hostname</name> 5 <value>master</value> 6 </property> 7 <property> 8 <name>yarn.nodemanager.aux-services</name> 9 <value>mapreduce_shuffle</value> 10 <description>A comma separated list of services where service name should only contain a-zA-Z0-9_ and can not start with numbers</description> 11 </property> 12 <property> 13 <name>yarn.resourcemanager.address</name> 14 <value>master:18040</value> 15 </property> 16 <property> 17 <name>yarn.resourcemanager.scheduler.address</name> 18 <value>master:18030</value> 19 </property> 20 <property> 21 <name>yarn.resourcemanager.resource-tracker.address</name> 22 <value>master:18025</value> 23 </property> 24 <property> 25 <name>yarn.resourcemanager.admin.address</name> 26 <value>master:18141</value> 27 </property> 28 <property> 29 <name>yarn.resourcemanager.webapp.address</name> 30 <value>master:18088</value> 31 </property> 32 <property> 33 <name>yarn.log-aggregation-enable</name> 34 <value>true</value> 35 </property> 36 <property> 37 <name>yarn.log-aggregation.retain-seconds</name> 38 <value>86400</value> 39 </property> 40 <property> 41 <name>yarn.log-aggregation.retain-check-interval-seconds</name> 42 <value>86400</value> 43 </property> 44 <property> 45 <name>yarn.nodemanager.remote-app-log-dir</name> 46 <value>/tmp/logs</value> 47 </property> 48 <property> 49 <name>yarn.nodemanager.remote-app-log-dir-suffix</name> 50 <value>logs</value> 51 </property> 52 53 </configuration>
到這裏 master 就已經配置好了,下面將該服務器的配置分發到 slave1 上去(建議壓縮後再分發),在此使用壓縮後分發的方法
在 master 節點上執行
1 cd /usr/local 2 tar -zcvf ~/hadoop.master.tar.gz ./hadoop 3 cd ~ 4 scp ./hadoop.master.tar.gz slave1:/root/ 5 scp /etc/profile slave1:/etc/
在 slave1 節點上執行
tar -zxvf ~/hadoop.master.tar.gz -C /usr/local
在 slave1 上從新加載環境並檢查驗證
source /etc/profile echo $HADOOP_HOME
HDFS NameNode 格式化(只要在 master 上執行便可)
$HADOOP_HOME/bin/hdfs namenode -format
看到下面的輸出,代表hdfs格式化成功
INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted.
啓動前檢查防火牆狀態
systemctl status firewalld
我這裏是已經關閉的,若未關閉,能夠參考下圖(來自http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/)
阿里雲服務器還須要在服務器安全組裏配置防火牆,需將配置文件裏的相關端口所有添加,不然會出現 web 頁面打不開,以及 DataNode 啓動但 Live datenode 爲 0 等問題
啓動 Hadoop 集羣
$HADOOP_HOME/sbin/start-all.sh
啓動 job history server
在 master 上執行
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
成功後在兩個節點上驗證
在 master 上 執行
jps
能夠看到 ResourceManager、SecondaryNameNode、NameNode、JobHistoryServer 四個進程所有啓動
在 slave1 上執行
jps
能夠看到 NodeManager、DataNode 兩個進程所有啓動
缺乏任一進程都表示出錯。另外還須要在 Master 節點上經過命令 hdfs dfsadmin -report 查看 DataNode 是否正常啓動,若是 Live datanodes 不爲 0 ,則說明集羣啓動成功。例如我這邊一共有 1 個 Datanodes:
所有配置完成以後查看 web 頁面
hdfs Datanode 節點信息
hdfs 的狀況
hdfs 的文件狀況
yarn:http://master:18088/
阿里雲ECS服務器部署HADOOP集羣系列: