搭建hadoop集群

hadoop集群搭建

一.集群規(guī)劃

bigdata01 bigdata02 bigdata03
NameNode NameNode
JournalNode JournalNode JournalNode
DataNode DataNode DataNode
ZK ZK ZK
ResourceManager ResourceManager
NodeManager NodeManager NodeManager

二.集群搭建

1.修改服務(wù)器的主機(jī)名稱、主機(jī)名和IP的映射。

1.1 修改主機(jī)名稱

vim /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=bigdata01    ### //不能以數(shù)字開頭,標(biāo)點(diǎn)只能用減號(hào)-

1.2 修改主機(jī)名和IP映射

vim /etc/hosts

192.168.20.66   bigdata01
192.168.20.67   bigdata02
192.168.20.68   bigdata03

1.3 重啟網(wǎng)絡(luò)服務(wù),使配置生效

service network restart

1.4 測(cè)試主機(jī)名是否修改成功

hostname

1.5 查看主機(jī)名對(duì)應(yīng)的IP

hostname -i

1.6 主機(jī)之間相互訪問(wèn),判斷網(wǎng)絡(luò)是否相通

在bigdata01上面
ping bigdata02
ping bigdata03

在bigdata02上面
ping bigdata01
ping bigdata03

在bigdata03上面
ping bigdata01
ping bigdata02

2. 配置服務(wù)器之間SSH免密登錄

2.1 在服務(wù)器bigdata01上面執(zhí)行如下命令

ssh-key gen -t rsa  # 生成公鑰和私鑰

然后執(zhí)行如下命令
ssh-copy-id bigdata01
ssh-copy-id bigdata02
ssh-copy-id bigdata03

2.2 在服務(wù)器bigdata02上面執(zhí)行如下命令

ssh-key gen -t rsa  # 生成公鑰和私鑰

然后執(zhí)行如下命令
ssh-copy-id bigdata01
ssh-copy-id bigdata02
ssh-copy-id bigdata03

2.3 在服務(wù)器bigdata03上面執(zhí)行如下命令

ssh-key gen -t rsa  # 生成公鑰和私鑰

然后執(zhí)行如下命令
ssh-copy-id bigdata01
ssh-copy-id bigdata02
ssh-copy-id bigdata03

2.4 配置完成之后,可以在每臺(tái)機(jī)器上進(jìn)行試驗(yàn),是否成功

在bigdata01上面測(cè)試
ssh bigdata02  ssh bigdata03是否能夠免密登錄

2.5 如果不可用,在不可用的機(jī)器上,重新執(zhí)行ssh-copy-id 命令。

3.安裝jdk

3.1將jdk解壓到 /opt/module目錄下面

tar -zxvf  jdk-8u231-linux-x64.tar.gz -C /opt/module

3.2配置jdk的環(huán)境變量

vim /etc/profile
在文件最后面加入
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin

3.3使配置生效

source /etc/profile

4.關(guān)閉服務(wù)器防火墻

4.1 關(guān)閉防火墻

systemctl stop firewalld.service

4.2 查看防火墻狀態(tài)是否關(guān)閉成功

systemctl status firewalld.service

5.搭建zookeeper集群

5.1 將zookeeper解壓到/opt/module目錄下面(zookeeper要下載名稱中帶-bin的包)。

tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz -C /opt/module/

5.2 在zookeeper下面創(chuàng)建zkData目錄。

mkdir zkData

5.3 重命名conf目錄下面的配置文件zoo_simple.cfg

mv zoo_simple.cfg zoo.cfg

5.4 修改zoo.cfg文件。

具體配置 
dataDir=/opt/module/zookeeper-3.4.10/zkData  
增加如下配置 
#######################cluster########################## 
server.1=bigdata01:2888:3888
server.2=bigdata02:2888:3888
server.3=bigdata03:2888:3888

5.5 在zkData目錄下面創(chuàng)建myid文件

touch myid
在myid里面寫入1,表示zoo.cfg里面server.1中的1。

5.6 將配置好的zookeeper拷貝到另外兩臺(tái)服務(wù)器,修改myid文件中的值為對(duì)象的server的值。
5.7 分別啟動(dòng)zookeeper。

[root@bigdata01 zookeeper-3.5.6]# bin/zkServer.sh start
[root@bigdata02 zookeeper-3.5.6]# bin/zkServer.sh start
[root@bigdata03 zookeeper-3.5.6]# bin/zkServer.sh start

5.8 查看啟動(dòng)狀態(tài),有一臺(tái)leader,兩天follower,表示啟動(dòng)成功。

[root@bigdata01 zookeeper-3.5.6]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.6/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

[root@bigdata02 zookeeper-3.5.6]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.6/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

[root@bigdata03 zookeeper-3.5.6]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.5.6/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

5.9 如果啟動(dòng)過(guò)程中出現(xiàn)org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Address unresolved: bigdata03:3888 異常,是因?yàn)閎igdata03:3888后面有空格所致。

6.搭建hadoop集群

6.1 安裝hadoop。
6.2 修改hadoop的etc/hadoop目錄下面的hadoop-env.sh文件。

# 在其中加入jdk路徑
JAVA_HOME=/opt/module/jdk1.8.0_144 
# 加入各個(gè)組件操作的用戶,防止放棄操作出現(xiàn)用戶無(wú)法操作問(wèn)題。
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

6.3 修改的etc/hadoop目錄下面的core-site.xml文件。

<configuration>
   <!--把兩個(gè)NameNode的地址組裝成一個(gè)集群mycluster -->
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>
   </property>   
   <!--指定hadoop運(yùn)行時(shí)產(chǎn)生文件的存儲(chǔ)目錄 -->
   <property>
      <name>hadoop.tmp.dir</name>
      <value>/opt/module/hadoop-3.2.1/data/tmp</value>
   </property>
   
   <!--配置zookeeper集群的地址,進(jìn)行namenode發(fā)生故障時(shí)自動(dòng)轉(zhuǎn)移 -->
   <property>
      <name>ha.zookeeper.quorum</name>
      <value>bigdata01:2181,bigdata02:2181,bigdata03:2181</value>
   </property>
   
</configuration>

6.4 修改hadoop中etc/hadoop目錄下面的hdfs-site.xml文件。

<configuration>
  <!--完全分布式集群名稱 -->
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
  
  <!--集群中NameNode節(jié)點(diǎn)名稱 -->
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>
  
  <!--nn1的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>bigdata01:9000</value>
  </property>
  
  <!-- nn2的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>bigdata02:9000</value>
  </property>
  
  <!--nn1的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>bigdata01:50070</value>
  </property>
  
  <!-- nn2的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>bigdata02:50070</value>
  </property>
  
  <!--指定Namenode元數(shù)據(jù)在JournalNode上的存放位置 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://bigdata01:8485,bigdata02:8485,bigdata03:8485</value>
  </property>
  
  <!--配置隔離機(jī)制,即同一時(shí)刻只能有一臺(tái)服務(wù)器對(duì)外響應(yīng) -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>shell(/bin/true)</value>
  </property>
  
  <!--使用隔離機(jī)制時(shí)需要ssh無(wú)秘鑰登錄-->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
  </property>
  
  <!--聲明journalnode服務(wù)器存儲(chǔ)目錄-->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/hadoop-3.1.2/data/jn</value>
  </property>
  
  <!--關(guān)閉檢查權(quán)限 -->
  <property>
    <name>dfs.permissions.enables</name>
    <value>false</value>
  </property>
  
  <!--訪問(wèn)代理類client,mycluster,active 配置失敗自動(dòng)切換實(shí)現(xiàn)方式-->
  <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.Configu redFailoverProxyProvider</value>
  </property>
  
  <!-- 開啟故障自動(dòng)轉(zhuǎn)移 -->
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  
</configuration>

6.5 修改hadoop中etc/hadoop目錄下面的yarn-site.xml文件。

<configuration>

   <property> 
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
   </property>
   
   <!--啟用 resourcemanager ha--> 
   <property>
       <name>yarn.resourcemanager.ha.enabled</name>
       <value>true</value>
   </property>

    <!--聲明兩臺(tái) resourcemanager 的地址--> 
   <property>
       <name>yarn.resourcemanager.cluster-id</name>
       <value>cluster-yarn1</value>
   </property>

   <property>
       <name>yarn.resourcemanager.ha.rm-ids</name>
       <value>rm1,rm2</value>
   </property>

   <property>
       <name>yarn.resourcemanager.hostname.rm1</name>
       <value>bigdata01</value>
   </property>

   <property>
       <name>yarn.resourcemanager.hostname.rm2</name>
      <value>bigdata02</value>
   </property>

    <!--指定 zookeeper 集群的地址--> 
   <property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>bigdata01:2181,bigdata02:2181,bigdata03:2181</value>
   </property>

    <!--啟用自動(dòng)恢復(fù)--> 
   <property>
       <name>yarn.resourcemanager.recovery.enabled</name>
       <value>true</value>
   </property>

    <!--指定 resourcemanager 的狀態(tài)信息存儲(chǔ)在 zookeeper 集群-->  
   <property>
       <name>yarn.resourcemanager.store.class</name>
       <value>>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
   </property>
</configuration>

6.6 啟動(dòng)高可用hadoop集群

  • 啟動(dòng)hdfs集群。
  1. 在三臺(tái)服務(wù)器上分別啟動(dòng)journalnode。
在hadoop的bin目錄下面執(zhí)行下面語(yǔ)句
./hdfs --daemon start journalnode
  1. 在配置了NameNode的任一服務(wù)器上面格式化NameNode。
# 在bigdata01服務(wù)器的hadoop的bin目錄下面執(zhí)行命令
./hdfs namenode -format
  1. 在執(zhí)行了上面命令的那臺(tái)服務(wù)器上面啟動(dòng)NameNode。
# 在bigdata01服務(wù)器的hadoop的bin目錄下面執(zhí)行命令
./hdfs --daemon start namenode
  1. 在另外一臺(tái)配置了NameNode的服務(wù)器上面同步NameNode信息。
# 在bigdata02服務(wù)器的hadoop的bin目錄下面執(zhí)行命令
./hdfs namenode -bootstrapStandby
  1. 格式化zk
# 在bigdata01服務(wù)器的hadoop的bin目錄下面執(zhí)行命令
./hdfs zkfc -formatZK
  1. 啟動(dòng)hadoop集群
# 在bigdata01服務(wù)器的hadoop的sbin目錄下面執(zhí)行命令
./start-dfs.sh
  1. 啟動(dòng)其他服務(wù)器的DataNode。
# 在bigdata02和bigdata03服務(wù)器的bin目錄下面執(zhí)行命令
./hdfs --daemon start datanode
  • 啟動(dòng)yarn集群
  1. 在配置了resourcemanager的任一臺(tái)服務(wù)器上面啟動(dòng)resourcemanager。
# 在bigdata01服務(wù)器的hadoop的sbin目錄下執(zhí)行命令
./start-yarn.sh
  1. 在其余服務(wù)器上面啟動(dòng)nodemanager。
# 在bigdata02和bigdata03服務(wù)器的hadoop的bin目錄下執(zhí)行
./yarn --daemon start nodemanager

6.7高可用測(cè)試。

  • hdfs高可用測(cè)試。
  1. 查看NameNode的狀態(tài)。
# 在bigdata01和bigdata02服務(wù)器的hadoop的bin目錄下面執(zhí)行命令
./hdfs haadmin -getServiceState nn1
./hdfs haadmin -getServiceState nn2
  1. 手動(dòng)切換NameNode狀態(tài)
## 假如nn1的狀態(tài)為standby,nn2的狀態(tài)為active
# 在狀態(tài)為standby的NameNode所在的機(jī)器上的hadoop的bin目錄下執(zhí)行命令
./hdfs haadmin -transitionToActive nn1
# 可將NameNode的狀態(tài)切換為active。

# 在狀態(tài)為active的NameNode所在的機(jī)器上的hadoop的bin目錄下執(zhí)行命令
./hdfs haadmin -transitionToStandby nn2
# 可將NameNode的狀態(tài)切換為standby。
  1. 測(cè)試高可用

將NameNode狀態(tài)為active的服務(wù)器的active停掉。

# 在狀態(tài)為active的NameNode所在的機(jī)器上的hadoop的bin目錄下執(zhí)行命令
./hdfs --daemon stop namenode
# 然后查看狀態(tài)為standby的那個(gè)NameNode的狀態(tài),如果已經(jīng)變?yōu)閍ctive,表示成功。
  • 測(cè)試yarn高可用
  1. 查詢yarn的狀態(tài)
# 在bigdata01和bigdata02服務(wù)器的hadoop的bin目錄下面執(zhí)行命令
./hdfs rmadmin -getServiceState rm1
./hdfs rmadmin -getServiceState rm2
  1. 手動(dòng)切換yarn狀態(tài)
## 假如rm1的狀態(tài)為standby,rm2的狀態(tài)為active
# 在狀態(tài)為standby的resourcemanager所在的機(jī)器上的hadoop的bin目錄下執(zhí)行命令
./yarn rmadmin -transitionToActive rm1
# 可將resourcemanager的狀態(tài)切換為active。

# 在狀態(tài)為active的Nresourcemanager所在的機(jī)器上的hadoop的bin目錄下執(zhí)行命令
./hdfs rmadmin -transitionToStandby rm2
# 可將resourcemanager的狀態(tài)切換為standby。
  1. 測(cè)試高可用

將resourcemanager狀態(tài)為active的服務(wù)器的resourcemanager停掉。

# 在狀態(tài)為active的resourcemanager所在的機(jī)器上的hadoop的bin目錄下執(zhí)行命令
./yarn --daemon stop resourcemanager
# 然后查看狀態(tài)為standby的那個(gè)resourcemanager的狀態(tài),如果已經(jīng)變?yōu)閍ctive,表示成功。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 環(huán)境說(shuō)明:3臺(tái)華為云服務(wù)器 Distributor ID: UbuntuDescription: Ub...
    番茄ozz閱讀 3,345評(píng)論 1 13
  • Hadoop HA集群搭建文檔.............................................
    鐘敏_1788閱讀 1,592評(píng)論 0 0
  • /* Hadoop是Apache旗下主流的大數(shù)據(jù)計(jì)算和存儲(chǔ)框架之一,在近年來(lái)應(yīng)用的越來(lái)越廣泛。常規(guī)意義上的Hado...
    LannisterWF閱讀 4,148評(píng)論 0 1
  • 1 準(zhǔn)備工作 1.1 節(jié)點(diǎn)準(zhǔn)備 在開始安裝系統(tǒng)之前,我們需要先準(zhǔn)備5個(gè)節(jié)點(diǎn),他們均通過(guò)CentOS 7 Minim...
    Jackeroo閱讀 4,042評(píng)論 0 2
  • 今早出門的時(shí)候葉片上掉落下來(lái)兩片細(xì)長(zhǎng)的花瓣,我便知道這朵紅色雛菊已經(jīng)開始了她的告別。果不其然,下午回到家,拉開窗簾...
    峭峭閱讀 676評(píng)論 3 2

友情鏈接更多精彩內(nèi)容