1. 程式人生 > >大資料系列(hadoop) Hadoop+Zookeeper 3節點高可用叢集搭建

大資料系列(hadoop) Hadoop+Zookeeper 3節點高可用叢集搭建

原文地址:https://www.cnblogs.com/YellowstonePark/p/7750213.html

一、叢集規劃

主機名ipNameNodeDataNodeYarnZooKeeperJournalNode
node01192.168.1.201
node02192.168.1.202
node03192.168.1.203

注:所有操作都是在root使用者下操作,如需其他使用者,請自行建立。注意檔案許可權問題。

二、環境搭建

1、安裝JDK

1.1  下載jdk 

這裡使用的是jdk-8u144-linux-x64.tar.gz,下載地址:連結:http://pan.baidu.com/s/1eSEjL8u 

密碼:mfdj

將下載的jdk 上傳到node01伺服器的/opt目錄下

複製程式碼
[[email protected] usr]# cd /opt/
[[email protected] opt]# ll
total 727676
-rw-r--r--. 1 root root 149756462 Oct 23 12:24 apache-hive-2.1.1-bin.tar.gz
-rw-r--r--. 1 root root 266688029 Oct 23 12:24 hadoop-2.7.4.tar.gz
-rw-r--r--. 1 root root 104659474 Oct 23 12:24
hbase-1.2.6-bin.tar.gz -rw-r--r--. 1 root root 185515842 Oct 23 12:26 jdk-8u144-linux-x64.tar.gz -rw-r--r--. 1 root root 3465760 Oct 23 12:24 mysql-connector-java-5.1.44.tar.gz -rw-r--r-- 1 root root 35042811 Oct 23 13:37 zookeeper-3.4.10.tar.gz
複製程式碼

然後切換到/usr 目錄下

[[email protected] ~]# cd /usr/

新建app目錄,用以安裝所需軟體

[[email protected] usr]# mkdir -p /usr/app

進入app目錄

[[email protected] opt]# cd /usr/app/

解壓jdk到當前路徑下

[[email protected] app]# tar zxvf /opt/jdk-8u144-linux-x64.tar.gz 

建立jdk軟連線

[[email protected] app]# ln -s jdk1.8.0_144/ java

配置環境變數

[[email protected] app]# vi /etc/profile

在開啟的檔案末尾新增如下程式碼後儲存

export JAVA_HOME=/usr/app/java
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

使配置生效

[[email protected] app]# source /etc/profile

檢視Java版本,顯示如下則jdk安裝完成

[[email protected] app]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

根據以上流程,分別在node02、node03 節點上完成jdk 安裝。

2、安裝zookeeper

下載zookeeper 

將下載的zookeeper上傳到node01伺服器的/opt目錄下

複製程式碼
[[email protected] usr]# cd /opt/
[[email protected] opt]# ll
total 727676
-rw-r--r--. 1 root root 149756462 Oct 23 12:24 apache-hive-2.1.1-bin.tar.gz
-rw-r--r--. 1 root root 266688029 Oct 23 12:24 hadoop-2.7.4.tar.gz
-rw-r--r--. 1 root root 104659474 Oct 23 12:24 hbase-1.2.6-bin.tar.gz
-rw-r--r--. 1 root root 185515842 Oct 23 12:26 jdk-8u144-linux-x64.tar.gz
-rw-r--r--. 1 root root   3465760 Oct 23 12:24 mysql-connector-java-5.1.44.tar.gz
-rw-r--r--  1 root root  35042811 Oct 23 13:37 zookeeper-3.4.10.tar.gz
複製程式碼

然後切換到/usr/app 目錄下

[[email protected] ~]# cd /usr/app/

解壓zookeeper到當前路徑下

[[email protected] app]# tar zxvf /opt/zookeeper-3.4.10.tar.gz 

建立zookeeper軟連線

[[email protected] app]# ln -s zookeeper-3.4.10/ zookeeper

配置環境變數

[[email protected] app]# vi /etc/profile

在開啟的檔案末尾新增如下程式碼後儲存

export JAVA_HOME=/usr/app/java
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export ZOOKEEPER_HOME=/usr/app/zookeeper
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin

使配置生效

[[email protected] app]# source /etc/profile

切換到conf目錄,修改zookeepe配置檔案

[[email protected] app]# cd /usr/app/zookeeper/conf/
[[email protected] conf]# cp zoo_sample.cfg zoo.cfg 
[[email protected] conf]# vi zoo.cfg 

按照如下內容修改zoo.cfg 然後儲存

複製程式碼
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/app/zookeeper/data
dataLogDir=/usr/app/zookeeper/datalog

# the port at which the clients will connect
clientPort=21810
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

server.1=node01:28880:38880
server.2=node02:28880:38880
server.3=node03:28880:38880
複製程式碼

在zookeeper目錄下建立data和datalog兩個目錄

[[email protected] conf]# mkdir -p /usr/app/zookeeper/data
[[email protected] conf]# mkdir -p /usr/app/zookeeper/datalog

在data目錄下建立myid檔案並新增內容為1

[[email protected] conf]# cd /usr/app/zookeeper/data
[[email protected] data]# echo 1 > myid

根據以上步驟在node02、node03節點安裝好zookeeper

注:node02節點上的myid內容為2,node03節點上的myid內容為3。

三個節點的zookeeper配置完成後可以測試安裝是否成功

在三個節點上分別執行如下命令啟動zookeeper

[[email protected] data]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

 分別檢視三個節點的狀態,可以看到一個leader和兩個follower,說明zookeeper安裝成功。

[[email protected] data]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/app/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[[email protected] data]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/app/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[[email protected] hadoop]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/app/zookeeper/bin/../conf/zoo.cfg
Mode: follower

分別停止三個節點上的zookeeper

[[email protected] data]# zkServer.sh stop

3、安裝hadoop

下載hadoop

將下載的hadoop上傳到node01伺服器的/opt目錄下

複製程式碼
[[email protected] usr]# cd /opt/
[[email protected] opt]# ll
total 727676
-rw-r--r--. 1 root root 149756462 Oct 23 12:24 apache-hive-2.1.1-bin.tar.gz
-rw-r--r--. 1 root root 266688029 Oct 23 12:24 hadoop-2.7.4.tar.gz
-rw-r--r--. 1 root root 104659474 Oct 23 12:24 hbase-1.2.6-bin.tar.gz
-rw-r--r--. 1 root root 185515842 Oct 23 12:26 jdk-8u144-linux-x64.tar.gz
-rw-r--r--. 1 root root   3465760 Oct 23 12:24 mysql-connector-java-5.1.44.tar.gz
-rw-r--r--  1 root root  35042811 Oct 23 13:37 zookeeper-3.4.10.tar.gz
複製程式碼

然後切換到/usr/app 目錄下

[[email protected] ~]# cd /usr/app/

解壓hadoop到當前路徑下

[[email protected] app]# tar zxvf /opt/hadoop-2.7.4.tar.gz

建立hadoop軟連線

[[email protected] app]# ln -s hadoop-2.7.4/ hadoop

配置環境變數

[[email protected] app]# vi /etc/profile

在開啟的檔案末尾新增如下程式碼後儲存

複製程式碼

export JAVA_HOME=/usr/app/java
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export ZOOKEEPER_HOME=/usr/app/zookeeper
export HADOOP_HOME=/usr/app/hadoop

export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

複製程式碼

使配置生效

[[email protected] app]# source /etc/profile

切換到hadoop目錄,分別建立journal、hdfs/data、hdfs/name 路徑

[[email protected] app]# cd /usr/app/hadoop
[[email protected] hadoop]# mkdir journal
[[email protected] hadoop]# mkdir -p hdfs/name
[[email protected] hadoop]# mkdir -p hdfs/data

切換到配置檔案目錄

[[email protected] hadoop]# cd /usr/app/hadoop/etc/hadoop/

將如下程式碼寫入 core-site.xml

複製程式碼
[[email protected] hadoop]# vi core-site.xml 

<configuration> 

<!-- 指定hdfs的nameservice為ns --> 
 <property> 
<name>fs.defaultFS</name> 
<value>hdfs://ns</value> 
 </property> 
 <!--指定hadoop資料臨時存放目錄--> 
 <property> 
<name>hadoop.tmp.dir</name> 
<value>/usr/app/hadoop/tmp</value> 
 </property> 

<property> 
<name>io.file.buffer.size</name> 
<value>4096</value> 
 </property> 
 <!--指定zookeeper地址--> 
 <property> 
<name>ha.zookeeper.quorum</name> 
<value>node01:21810,node02:21810,node03:21810</value> 
 </property> 

</configuration>

複製程式碼

將如下程式碼寫入到 hdfs-site.xml

複製程式碼

[[email protected] hadoop]# vi hdfs-site.xml


<configuration> <!--指定hdfs的nameservice為ns,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns</value> </property> <!-- ns下面有兩個NameNode,分別是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>node01:9000</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>node01:50070</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>node02:9000</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>node02:50070</value> </property> <!-- 指定NameNode的元資料在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node01:8485;node02:8485;node03:8485/ns</value> </property> <!-- 指定JournalNode在本地磁碟存放資料的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/app/hadoop/journal</value> </property> <!-- 開啟NameNode故障時自動切換 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失敗自動切換實現方式 --> <property> <name>dfs.client.failover.proxy.provider.ns</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>/root/.ssh/id_rsa</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///usr/app/hadoop/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///usr/app/hadoop/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 在NN和DN上開啟WebHDFS (REST API)功能,不是必須 --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
複製程式碼

將如下程式碼寫入到  mapred-site.xml

複製程式碼
[[email protected] hadoop]# cp mapred-site.xml.template mapred-site.xml
[[email protected] hadoop]# vi mapred-site.xml

<configuration> 
  <property> 
    <name>mapreduce.framework.name</name> 
    <value>yarn</value> 
   </property> 
</configuration>

複製程式碼

將如下程式碼寫入到 yarn-site.xml

複製程式碼
[[email protected] hadoop]# vi yarn-site.xml

<configuration> 
  <!-- 指定nodemanager啟動時載入server的方式為shuffle server --> 
  <property> 
    <name>yarn.nodemanager.aux-services</name> 
    <value>mapreduce_shuffle</value> 
  </property> 
  <!-- 指定resourcemanager地址 --> 
  <property> 
    <name>yarn.resourcemanager.hostname</name> 
    <value>node03</value> 
  </property> 
</configuration>

複製程式碼

修改 hadoop-env.sh

找到檔案的export JAVA_HOME=${JAVA_HOME} 一行,將其修改為 export JAVA_HOME=/usr/app/java

修改 slaves 檔案

node01
node02
node03

按照如上步驟將node02、node03節點的hadoop配置完成

至此,Hadoop HA 叢集環境搭建完成,以下開始測試叢集

4、叢集啟動

分別在node01、node02、node03 三個節點執行以下命令啟動zookeeper

[[email protected] hadoop]# zkServer.sh start

驗證zookeeper叢集狀態

[[email protected] data]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/app/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[[email protected] data]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/app/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[[email protected] hadoop]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/app/zookeeper/bin/../conf/zoo.cfg
Mode: follower啟動 

 在node01上啟動journalnode叢集

[[email protected] hadoop]# hadoop-daemons.sh start journalnode

 執行jps命令,可以檢視到JournalNode的java程序pid

在node01上格式化zkfc

[[email protected] hadoop]# hdfs zkfc -formatZK

在node01上格式化hdfs

[[email protected] hadoop]# hadoop namenode -format

在node01上啟動namenode

[[email protected] hadoop]# hadoop-daemon.sh start namenode

在node02上啟動資料同步和standby的namenode

[[email protected] hadoop]# hdfs namenode -bootstrapStandby
[[email protected] hadoop]# hadoop-daemon.sh start namenode

在node01 上啟動datanode

[[email protected] hadoop]# hadoop-daemons.sh start datanode 

在node03上啟動yarn

[[email protected] hadoop]# start-yarn.sh

在node01上啟動zkfc

[[email protected] hadoop]# hadoop-daemons.sh start zkfc 

全部啟動後分別在node01、node02、node03上執行jps 可以看到下面這些程序

複製程式碼
[[email protected] hadoop]# jps
7073 QuorumPeerMain
2406 DFSZKFailoverController
2150 DataNode
2248 NodeManager
2536 NameNode
1849 JournalNode
7882 Jps
複製程式碼複製程式碼

            
           

相關推薦

no