虛擬機centos7系統下安裝hadoop ha和yarn ha(詳細)


一:基礎環境准備##

(一):虛擬機新建五個centos7系統(復制文件夾的方式)
(二):角色分配

(三)按照角色分配表配置
(1)更改主機ip(自行查找),如果只是個人搭建玩一玩,可選擇安裝centos7圖形界面操作比較簡單
(2)更改主機名方法, vim /etc/hostname文件,修改成對應的主機名,保存(比如在192.168.254.2這台主機上,就修改成master)。再執行hostname 主機名,進行設置。
(3)在五個虛擬機系統中修改/etc/hosts文件,添加如下內容

192.168.254.2  master
192.168.254.3	 master2
192.168.254.4  slave01
192.168.254.5	 slave02
192.168.254.6  slave03

(四)關閉五台虛擬機系統上的防火牆firwall(或者iptable),樓主的還是firewall

關閉: systemctl stop firewalld
開機禁用  : systemctl disable firewalld

(五)配置完成后,五台主機相互ping 主機名(比如ping slave01),看是否可ping通,如果不能檢查虛擬機的網絡適配器模式(方式多種),樓主選擇的是nat方式可參考如下:
(1)進入本機的虛擬網卡8,然后設置其網關為192.168.254.254(和虛擬機里面配置的ip的網關一樣,而且虛擬機系統的ip要和本地網卡8的ip在同一個網段)
(六)創建專門的用戶

useradd hadoop (創建用戶)

passwd hadoop (設置密碼,5台機器上的hadoop密碼最好設置成一樣(容易記),比如hadoop123)

建議將hadoop加入root用戶組,操作方法:

先以root身份登錄,然后輸入

usermod -g root hadoop ,執行完后hadoop即歸屬於root組了,可以再輸入

id hadoop 查看輸出驗證一下,如果看到類似下面的輸出:

uid=502(hadoop) gid=0(root) 組=0(root)

就表示OK了 

(七)配置ssh,免密登錄(因為各個主機之間會進行自主通訊,所以必須配置)
(1)首先配置master,
①在master上,生成公鑰、私鑰對。

以hadoop身份登錄到系統
cd (進入個人主目錄,默認為/home/hadoop)

ssh-keygen -t rsa -P '' (注:最后是二個單引號)

即:以rsa算法,生成公鑰、私鑰對,-P ''表示空密碼。該命令運行完后,會在個人主目錄下生成.ssh目錄,里面會有二個文件id_rsa(私鑰) ,id_rsa.pub(公鑰)

②導入公鑰

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

chmod 600 .ssh/authorized_keys

執行完以后,可以在本機上測試下,用ssh連接自己,即:ssh master。如果不需要輸入密碼,就連接成功,表示ok,一台機器已經搞定了。

(2)配置其他四台系統,按照如下
①在其他四台上生成公鑰、私鑰對。

以hadoop身份登錄到系統
cd (進入個人主目錄,默認為/home/hadoop)

ssh-keygen -t rsa -P '' (注:最后是二個單引號)

即:以rsa算法,生成公鑰、私鑰對,-P ''表示空密碼。該命令運行完后,會在個人主目錄下生成.ssh目錄,里面會有二個文件id_rsa(私鑰) ,id_rsa.pub(公鑰)

②然后用scp命令,把公鑰文件發放給master(即:已經配置完成的那台機器)

master2上:

scp  .ssh/id_rsa.pub  hadoop@master:/home/hadoop/id_rsa_01.pub

slave01上:

scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_02.pub

slave02上:

scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_03.pub

slave03上

scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_04.pub

這四台行執行完后,回到master中,查看下/home/hadoop目錄,會有四個新文件id_rsa_01.pub、id_rsa_02.pub,id_rsa_03.pub,id_rsa_04.pub 然后在master上,導入這四個公鑰

cat id_rsa_01.pub >> .ssh/authorized_keys
cat id_rsa_02.pub >> .ssh/authorized_keys
cat id_rsa_03.pub >> .ssh/authorized_keys
cat id_rsa_04.pub >> .ssh/authorized_keys

這樣,master這台機器上,就有所有5台機器的公鑰了。

③在master上使用scp把authorized_keys發送給其他四台機器,執行命令如下:

scp .ssh/authorized_keys hadoop@master2:/home/hadoop/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave01:/home/hadoop/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave02:/home/hadoop/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave03:/home/hadoop/.ssh/authorized_keys

④修改其它機器上authorized_keys文件的權限

在其他四台系統上,均執行命令

chmod 600 .ssh/authorized_keys

⑤驗證

在每個虛擬機上,均用 ssh 其它機器的hostname 驗證下(如在master上ssh slave01),如果能正常無密碼連接成功,表示ok

至此基礎的環境配置完成,接下來安裝需要軟件

二:安裝jdk1.8##

可自行百度如何安裝jdk1.8 也可以參考linux下安裝oracle jdk

三:同步所有主機的時間##

如果個人搭建測試(使用虛擬機文件夾復制的方式來創建多台主機的可不用同步),如果不是安裝ntpdate進行時間的同步

四:在slave01,slave02,slave03上安裝zookeeper3.4.5##

(1)下載zookeeper3.4.5, 下載連接
(2)上傳zookeeper-3.4.5.tar.gz至slave01的/home/hadoop/目錄下,登陸到slave01上,切換hadoop用戶
(3)解壓壓縮包 tar -zvxf zookeeper-3.4.5.tar.gz
(4)解壓后進入該目錄,並cd conf 將 zoo_sample.cfg 修改為zoo.cfg,執行命令,mv zoo_sample.cfg zoo.cfg
(5)修改zoo.cfg,執行vim zoo.cfg如下后保存

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/hadoop/storage/zookeeper/data
dataLogDir=/home/hadoop/storage/zookeeper/logs
clientPort=2181
server.1=slave01:2888:3888
server.2=slave02:2888:3888
server.3=slave03:2888:3888

(6)創建目錄/home/hadoop/storage/zookeeper/data和/home/hadoop/storage/zookeeper/logs目錄,mkdir .....
(7)將配置好的zookeeper-3.4.5目錄發送到slave02,slave03上

在slave01上執行
scp -r /home/hadoop/zookeeper-3.4.5  hadoop@slave02:/home/hadoop/ 
scp -r /home/hadoop/zookeeper-3.4.5  hadoop@slave03:/home/hadoop/ 

(8)寫入id

在slave01上執行
echo '1' >  /home/hadoop/storage/zookeeper/data/myid  (這邊的1對應的是上面配置的server.1)
在slave02上執行
echo '2' >  /home/hadoop/storage/zookeeper/data/myid (這邊的2對應的是上面配置的server.2)
在slave03上執行
echo '3' >  /home/hadoop/storage/zookeeper/data/myid (這邊的3對應的是上面配置的server.3)

(9)驗證(分別登錄slave01,slave02,slave03啟動zookeeper)
①進入/home/hadoop/zookeeper-3.4.5/bin/目錄執行 zkServer.sh start
②分別進入三個系統輸入jps,查看是否存在QuorumPeerMain進程,如果存在則表示成功(如果jps沒有找到命令,則檢查java的安裝是否成功)

五:安裝hadoop2.6.0 ha,yarn ha(只因配合工作環境,版本比較舊)##

(一)首先到master系統上,要切換到hadoop用戶
①從網上下載hadoop2.6.0 並上傳至master虛擬機/home/hadoop/目錄下(如果安裝的虛擬機系統是圖形界面,可以直接黏貼,復制)
②執行tar -zxvf hadoop-2.6.0.tar.gz 解壓hadoop壓縮包
(二)修改hadoop配置的五個文件

/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/core-site.xml
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/hdfs-site.xml
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/mapred-site.xml(如果沒有這個文件,將該目錄下名稱為mapred-site.xml.template改名為mapred-site.xml)
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/yarn-site.xml
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/slaves

①vim /home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/core-site.xml

<!-- hdfs://master中的master可以隨便取名,但是要和后面的配置一致 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://master</value>
  </property>
 
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
  </property>
 
<!-- 指定hadoop臨時目錄 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/storage/hadoop/tmp</value>
    <description>Abase for other temporary directories.</description>
  </property>
 
<!--指定可以在任何IP訪問-->
  <property>
    <name>hadoop.proxyuser.hduser.hosts</name>
    <value>*</value>
  </property>
 
<!--指定所有用戶可以訪問-->
  <property>
    <name>hadoop.proxyuser.hduser.groups</name>
    <value>*</value>
  </property>
 
<!-- 指定zookeeper地址 -->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>slave01:2181,slave02:2181,slave03:2181</value>
  </property>

②vi /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml

 
<!--指定hdfs的block大小64M -->
  <property>  
    <name>dfs.block.size</name>  
    <value>67108864</value>
  </property> 
 
<!--指定hdfs的nameservice為master,需要和core-site.xml中的保持一致 -->
  <property>
    <name>dfs.nameservices</name>
    <value>master</value>
  </property>
 
<!-- master下面有兩個NameNode,分別是nn1,nn2 -->
  <property>
    <name>dfs.ha.namenodes.master</name>
    <value>nn1,nn2</value>
  </property>
 
<!-- nn1的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.master.nn1</name>
    <value>master:9000</value>
  </property>
 
<!-- nn1的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.master.nn1</name>
    <value>master:50070</value>
  </property>
 
<!-- nn2的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.master.nn2</name>
    <value>master2:9000</value>
  </property>
 
<!-- nn2的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.master.nn2</name>
    <value>master2:50070</value>
  </property>
 
<!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://slave01:8485;slave02:8485;slave03:8485/master</value>
  </property>
 
<!-- 配置失敗自動切換實現方式 -->
  <property>
    <name>dfs.client.failover.proxy.provider.master</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
 
<!-- 配置隔離機制 -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
 
<!-- 使用隔離機制時需要ssh免密碼登陸 -->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/hadoop/.ssh/id_rsa</value>
  </property>
 
<!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/hadoop/storage/hadoop/journal</value>
  </property>
 
<!--指定支持高可用自動切換機制-->
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
 
<!--指定namenode名稱空間的存儲地址-->
  <property>   
    <name>dfs.namenode.name.dir</name>   
    <value>/home/hadoop/storage/hadoop/name</value>  
  </property>
 
 <!--指定datanode數據存儲地址-->
  <property>   
    <name>dfs.datanode.data.dir</name>   
    <value>file:/home/hadoop/storage/hadoop/data</value>  
  </property>
  
<!--指定數據冗余份數-->
  <property>   
    <name>dfs.replication</name>   
    <value>3</value> 
  </property>
 
<!--指定可以通過web訪問hdfs目錄-->
  <property>  
    <name>dfs.webhdfs.enabled</name>  
    <value>true</value> 
  </property>
 
<!--保證數據恢復 -->  
  <property>  
    <name>dfs.journalnode.http-address</name>  
    <value>0.0.0.0:8480</value>  
  </property>
 
  <property>  
    <name>dfs.journalnode.rpc-address</name>  
    <value>0.0.0.0:8485</value>  
  </property> 
 
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>slave01:2181,slave02:2181,slave03:2181</value>
  </property>

③vi /home/hadoop/hadoop/etc/hadoop/mapred-site.xml

<configuration>
<!-- 配置MapReduce運行於yarn中 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
 
<!-- 配置 MapReduce JobHistory Server 地址 ,默認端口10020 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>0.0.0.0:10020</value>
  </property>
 
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默認端口19888 -->
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>0.0.0.0:19888</value>
  </property>
</configuration>

④vi /home/hadoop/hadoop/etc/hadoop/yarn-site.xml

<!--日志聚合功能--> 
  <property>
     <name>yarn.log-aggregation-enable</name>
     <value>true</value>
  </property>
 
<!--在HDFS上聚合的日志最長保留多少秒。3天--> 
  <property>
     <name>yarn.log-aggregation.retain-seconds</name>
     <value>259200</value>
  </property>
 
<!--rm失聯后重新鏈接的時間--> 
  <property> 
     <name>yarn.resourcemanager.connect.retry-interval.ms</name> 
     <value>2000</value> 
  </property>
 
<!--開啟resource manager HA,默認為false--> 
  <property> 
     <name>yarn.resourcemanager.ha.enabled</name> 
     <value>true</value> 
  </property> 
 
<!--配置resource manager -->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
 
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>slave01:2181,slave02:2181,slave03:2181</value> 
  </property>
  
<!--開啟故障自動切換--> 
  <property> 
     <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> 
     <value>true</value> 
  </property> 
 
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>master</value>
  </property>
                     
  <property>
     <name>yarn.resourcemanager.hostname.rm2</name>
     <value>master2</value>
  </property>
 
<!--在namenode1上配置rm1,在namenode2上配置rm2,注意:一般都喜歡把配置好的文件遠程復制到其它機器上,但這個在YARN的另一個機器上一定要修改--> 
  <property> 
    <name>yarn.resourcemanager.ha.id</name> 
    <value>rm1</value> 
  <description>If we want to launch more than one RM in single node, we need this configuration</description> 
  </property> 
 
<!--開啟自動恢復功能--> 
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name> 
    <value>true</value> 
  </property>
 
<!--配置與zookeeper的連接地址--> 
  <property> 
    <name>yarn.resourcemanager.zk-state-store.address</name> 
    <value>slave01:2181,slave02:2181,slave03:2181</value>
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.store.class</name> 
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> 
  </property> 
 
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>slave01:2181,slave02:2181,slave03:2181</value>
  </property>
 
  <property> 
    <name>yarn.resourcemanager.cluster-id</name> 
    <value>master-yarn</value> 
  </property> 
 
<!--schelduler失聯等待連接時間--> 
  <property> 
    <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name> 
    <value>5000</value> 
  </property> 
 
<!--配置rm1--> 
  <property> 
    <name>yarn.resourcemanager.address.rm1</name> 
    <value>master:8132</value> 
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.scheduler.address.rm1</name> 
    <value>master:8130</value> 
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.webapp.address.rm1</name> 
    <value>master:8188</value> 
  </property> 
 
  <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm1</name> 
    <value>master:8131</value> 
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.admin.address.rm1</name> 
    <value>master:8033</value> 
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.ha.admin.address.rm1</name> 
    <value>master:23142</value> 
  </property> 
 
<!--配置rm2--> 
  <property> 
    <name>yarn.resourcemanager.address.rm2</name> 
    <value>master2:8132</value> 
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.scheduler.address.rm2</name> 
    <value>master2:8130</value> 
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.webapp.address.rm2</name> 
    <value>master2:8188</value> 
  </property> 
 
  <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm2</name> 
    <value>master2:8131</value> 
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.admin.address.rm2</name> 
    <value>master2:8033</value> 
  </property> 
 
  <property> 
    <name>yarn.resourcemanager.ha.admin.address.rm2</name> 
    <value>master2:23142</value> 
  </property> 
 
  <property> 
    <name>yarn.nodemanager.aux-services</name> 
    <value>mapreduce_shuffle</value> 
  </property> 
 
  <property> 
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> 
    <value>org.apache.hadoop.mapred.ShuffleHandler</value> 
  </property> 
 
  <property> 
    <name>yarn.nodemanager.local-dirs</name> 
    <value>/home/hadoop/storage/yarn/local</value> 
  </property> 
 
  <property> 
    <name>yarn.nodemanager.log-dirs</name> 
    <value>/home/hadoop/storage/yarn/logs</value> 
  </property> 
 
  <property> 
    <name>mapreduce.shuffle.port</name> 
    <value>23080</value> 
  </property> 
 
<!--故障處理類-->
  <property> 
    <name>yarn.client.failover-proxy-provider</name> 
    <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value> 
  </property> 
 
  <property>
      <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
      <value>/yarn-leader-election</value>
      <description>Optional setting. The default value is /yarn-leader-election</description>
  </property>

⑤配置datenode vi /home/hadoop/hadoop/etc/hadoop/slaves

slave01
slave02
slave03

(三)同步hadoop文件夾到其他的四台機器(master2,slave01,slave02,slave03)

再master節點上執行
scp -r /home/hadoop/hadoop-2.6.0  hadoop@master2:/home/hadoop/
scp -r /home/hadoop/hadoop-2.6.0  hadoop@slave01:/home/hadoop/
scp -r /home/hadoop/hadoop-2.6.0  hadoop@slave02:/home/hadoop/
scp -r /home/hadoop/hadoop-2.6.0  hadoop@slave03:/home/hadoop/

(四)修改nn2(master2)配置文件yarn-site.xml

<property> 
    <name>yarn.resourcemanager.ha.id</name> 
    <value>rm2</value> 
  <description>If we want to launch more than one RM in single node, we need this configuration</description> 
  </property>

六:啟動集群##

(一)把各個zookeeper起來(slave01,slave02,slave03)

在三台機器上執行
/home/hadoop/zookeeper-3.4.5/bin/zkServer.sh start    
/home/hadoop/zookeeper-3.4.5/bin/zkServer.sh status (1個leader, 2個follower)
輸入jps,會顯示啟動進程:QuorumPeerMain

(二)在主namenode節點(master)執行如下命令,創建命名空間

/home/hadoop/hadoop-2.6.0/bin/hdfs zkfc -formatZK

(三)在slave01,slave02,slave03節點用如下命令啟日志程序
/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start journalnode

(四)在主namenode節點用./bin/hadoop namenode -format格式化namenode和journalnode目錄

/home/hadoop/hadoop-2.6.0/bin/hadoop namenode -format

(五)在任意一個zookeeper節點(salve01,slave02,slave03)執行

/home/hadoop/zookeeper-3.4.5/bin/zkCli.sh

[zk: localhost:2181(CONNECTED) 0] ls /
[hadoop-ha, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha 
[master]
[zk: localhost:2181(CONNECTED) 2] quit

(六)在主namenode節點啟動namenode進程

/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start namenode

(七)在備namenode節點(master2)執行第一行命令,把備namenode節點的目錄格式化並把元數據從主namenode節點copy過來,並且這個命令不會把journalnode目錄再格式化了!然后用第二個命令啟動備namenode進程!

/home/hadoop/hadoop-2.6.0/bin/hdfs namenode -bootstrapStandby

/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start namenode

(八)在兩個namenode節點都執行以下命令

/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start zkfc

(九)啟動datanode

方法①:在slave01上執行以下命令,slave02,salve03的datanode也會啟動,如果某個幾點上執行jps沒有看到datanode進程則在該節點也執行以下命令,或者使用方法②
/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemons.sh start datanode
方法②:直接在主NameNode(master)上執行如下命令一次性啟動所有datanode
/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemons.sh start datanode

(十) 啟動YARN(在master和master2上執行)

/home/hadoop/hadoop-2.6.0/sbin/start-yarn.sh

注:在namenode2(master2)上執行此命令時會提示NodeManager已存在等信息不用管這些,主要是啟動namenode2上的resourceManager完成與namenode1的互備作用,可忽略

(十一)查看狀態

啟動完成之后可以在瀏覽器中輸入http://master:50070和http://master2:50070查看namenode分別為Standby和Active。
在namenode1(master)上執行${HADOOP_HOME}/bin/yarn rmadmin -getServiceState rm1查看rm1和rm2分別為active和standby狀態,也可以通過瀏覽器訪問http://master:8188查看狀態

查看到正確信息表示安裝成功!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM