阿里雲ECS服務器部署HADOOP集群(一):Hadoop完全分佈式集群環境搭建,阿里雲ECS服務器部署HADOOP集群(二):HBase完全分佈式集群搭建(使用外置ZooKeeper),阿里雲ECS服務器部署HADOOP集群(三):ZooKeeper 完全分佈式集群搭建,阿里雲ECS服務器部署HADOOP集群(四):Hive本地模式的安裝,阿里雲ECS服務器部署HADOOP集群(六):Flume 安裝,阿里雲ECS服務器部署HADOOP集群(七):Sqoop 安裝

準備:

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

hadoop-2.7.3.tar.gz安裝包;

jdk-8u77-linux-x64.tar.gz安裝包;

hostname及IP的配置:

更改主機名:

由於系統為CentOS 7,可以直接使用‘hostnamectl set-hostname 主機名’來修改,修改完畢后重新shell登錄或者重啟服務器即可。

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集群環境需參考以下兩篇文章:

總結一下那就是,在“/etc/hosts”文件中進行域名配置時要遵從2個原則:

  •  新加域名在前面: 將新添加的Master、Slave服務器ip域名(例如“test7972”),放置在ECS服務器原有本地域名(例如“iZuf67wb***************”)的前面。但是注意ECS服務器原有本地      域名(例如“iZuf67wb***************”)不能被刪除,因為操作系統別的地方還會使用到。
  •  IP本機內網,其它外網: 在本機上的操作,都要設置成內網ip;其它機器上的操作,要設置成外網ip。

master

slave1

此處摘自 

配置好后需要在各個節點上執行如下命令,測試是否相互 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,  ,  ,  ,   。

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

我這裡是已經關閉的,若未關閉,可以參考下圖(來自)

阿里雲服務器還需要在服務器安全組裡配置防火牆,需將配置文件里的相關端口全部添加,否則會出現 web 頁面打不開,以及 DataNode 啟動但 Live datenode 為 0 等問題

啟動 Hadoop 集群

$HADOOP_HOME/sbin/start-all.sh

 

  • 第一次啟動 hadoop 時會出現 ssh 提示,提示是否要連入 0.0.0.0 節點,輸入 yes 即可
  • 若出現 hadoop 啟動時 datanode 沒有啟動,可以參考來解決

啟動 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集群系列:

 

 

 

 

 

 

 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

您可能也會喜歡…