阿里雲ECS服務器部署HADOOP集羣(一):Hadoop徹底分佈式集羣環境搭建

準備:

兩臺配置CentOS 7.3的阿里雲ECS服務器;html

Hadoop:hadoop-2.7.3.tar.gz;java

Java: jdk-8u77-linux-x64.tar.gz;node

hostname及IP的配置:

更改主機名:

因爲系統爲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、Slave服務器ip域名(例如「test7972」),放置在ECS服務器原有本地域名(例如「iZuf67wb***************」)的前面。可是注意ECS服務器原有本地      域名(例如「iZuf67wb***************」)不能被刪除,由於操做系統別的地方還會使用到。
  •  IP本機內網,其它外網: 在本機上的操做,都要設置成內網ip;其它機器上的操做,要設置成外網ip。

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

解壓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

hadoop集羣配置

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: http://master:50070/

hdfs Datanode 節點信息

hdfs 的狀況

hdfs 的文件狀況

 yarn:http://master:18088/

 

阿里雲ECS服務器部署HADOOP集羣系列:

相關文章
相關標籤/搜索