1. 程式人生 > >從零搭建hadoop高可用叢集,hbase

從零搭建hadoop高可用叢集,hbase

一,叢集規劃

PC01 PC02 PC03
NameNode NameNode hive
ZKFC ZKFC
ntpd ResourceManager ResourceManager
DataNode DataNode DataNode
JournalNode JournalNode JournalNode
NodeManager NodeManager NodeManager
ZooKeeper ZooKeeper ZooKeeper
hbase hbase hbase

二,虛擬機器的配置

1. 修改主機名

臨時修改

【pc1】

hostname hodoop01

【pc2】

hostname hodoop02

【pc3】

hostname hodoop03
永久修改

【pc1】

vi /etc/sysconfig/network
======================
NETWORKING=yes
HOSTNAME=hadoop01

【pc2】

vi /etc/sysconfig/network
======================
NETWORKING=yes
HOSTNAME=hadoop02

【pc3】

vi /etc/sysconfig/network
======================
NETWORKING=yes
HOSTNAME=hadoop03

2. hosts檔案

配置主機對映【三臺pc】

vi /etc/hosts
======================
192.168.91.101 hadoop01
192.168.91.102 hadoop02
192.168.91.103 hadoop03

3. 網路配置

【pc01】

vi /etc/sysconfig/network-scripts/ifcfg-eth0
============================
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.91.101
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=8.8.8.8

【pc02】

vi /etc/sysconfig/network-scripts/ifcfg-eth0
============================
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.91.102
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=8.8.8.8

【pc03】

vi /etc/sysconfig/network-scripts/ifcfg-eth0
============================
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.91.103
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=8.8.8.8

4. 防火牆

關閉防火牆【三臺pc】
 service iptables stop
關閉防火牆開機自啟【三臺pc】
chkconfig iptables off

5. 設定SSH免密登陸

安裝ssh【三臺pc】
yum -y install openssh.x86_64
設定免密登陸【三臺pc】
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03

6. 時間同步

安裝伺服器【pc01】
yum -y install ntp.x86_64
配置時間同步伺服器【pc01】
vi /etc/ntp.conf
================================================
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.91.0 mask 255.255.255.0 nomodify notrap ##新增網段

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool. ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0##先禁用4個自帶的服務,新增server 127.127.1.0
啟動時間伺服器
service ntpd start
安裝客戶端【pc02,pc03】
yum -y install  ntpdate.x96_64
同步時間

【pc02】

ntpdate hadoop01

【pc03】

ntpdate hadoop01

三,安裝配置JDK

1.解壓JDK安裝包【三臺pc】

tar -zxvf /data/jdk...gz -C /usr/local

2.配置環境變數【三臺pc】

vi /etc/profile
==================
export JAVA_NOME=/opt/app/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin:

3.測試【三臺pc】

java -version
===================
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

四,安裝配置zookeeper

1.解壓安裝zookeeper【三臺pc】

tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/app/

2.配置zoo.cfg檔案【三臺pc】

cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
=====================
dataDir=/opt/modules/zookeeper-3.4.5/zkData
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888

3.建立zkData目錄【三臺pc】

mkdir zkData

在zkData目錄下建立myid檔案,編輯myid檔案,內容就是此臺server的zk的id號
【pc01】

vi zkData/myid
==============
1

【pc02】

vi zkData/myid
==============
2

【pc03】

vi zkData/myid
==============
3

4.啟動三臺zkServer【三臺pc】

bin/zkServer.sh start			##啟動服務
bin/zkServer.sh status			##檢視狀態	

五,安裝配置hadoop

1. 解壓hadoop安裝包【三臺pc】

tar -zxvf hadoop-2.7.2.tar.gz -C /opt/app/

2.配置環境檔案【三臺pc】

vi etc/hadoop/hadoop-env.sh
=================================
export JAVA_HOME=/opt/app/jdk1.8.0_181
vi etc/hadoop/mapred-env.sh
=================================
export JAVA_HOME=/opt/app/jdk1.8.0_181
vi etc/hadoop/yarn-env.sh
=================================
export JAVA_HOME=/opt/app/jdk1.8.0_181

3.配置核心檔案【三臺pc】

配置檔案core-site.xml檔案
vi etc/hadoop/hdfs-site.xml
======================
<configuration>
	<!-- 指定hdfs的nameservice為ns1 -->
	<property>
	        <name>fs.defaultFS</name>
	        <value>hdfs://ns1</value>
	 </property>
	 <!-- 配置zookeeper -->
	 <property>
	          <name>ha.zookeeper.quorum</name>
	          <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
	</property>
	<!-- 指定hadoop臨時目錄 -->
	<property>
	        <name>hadoop.tmp.dir</name>
	        <value>/opt/app/hadoop-2.7.2/data/tmp</value>
	</property>
</configuration>
配置檔案hdfs-site.xml檔案
vi etc/hadoop/hdfs-site.xml
======================
<configuration>
		<!--指定hdfs的nameservice為ns1,需要和core-site.xml中的保持一致 -->
		<property>
                <name>dfs.nameservices</name>
                <value>ns1</value>
        </property>
        
		<!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
        <property>
                <name>dfs.ha.namenodes.ns1</name>
                <value>nn1,nn2</value>
        </property>
        
		<!-- nn1的RPC通訊地址 -->
        <property>
                <name>dfs.namenode.rpc-address.ns1.nn1</name>
                <value>hadoop01:8020</value>
        </property>
		<!-- nn1的http通訊地址 -->
        <property>
                <name>dfs.namenode.http-address.ns1.nn1</name>
                <value>hadoop01:50070</value>
        </property>

		<!-- nn2的RPC通訊地址 -->
        <property>
                <name>dfs.namenode.rpc-address.ns1.nn2</name>
                <value>hadoop02:8020</value>
        </property>
		<!-- nn2的http通訊地址 -->
        <property>
                <name>dfs.namenode.http-address.ns1.nn2</name>
                <value>hadoop02:50070</value>
        </property>
		<!-- 指定NameNode的元資料在JournalNode上的存放位置 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns1</value>
        </property>
		<!-- 指定JournalNode在本地磁碟存放資料的位置 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/opt/app/hadoop-2.7.2/journal</value>
        </property>
		<!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行
sshfence:當Active出問題後,standby切換成Active,此時,原Active又沒有停止服務,這種情況下會被強制殺死程序。
shell(/bin/true):NN Active和它的ZKFC一起掛了,沒有人通知ZK,ZK長期沒有接到通知,standby要切換,此時,standby調一個shell(指令碼內容),這個指令碼返回true則切換成功。
-->
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>
                        sshfence
                        shell(/bin/true)
                </value>
        </property>
		<!-- 使用sshfence隔離機制時需要ssh免登陸 -->
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
		<!-- 配置sshfence隔離機制超時時間 -->
        <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
        </property>
		<!-- 開啟故障自動轉移 -->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
				<value>true</value>
        </property>

        <property>
                <name>dfs.client.failover.proxy.provider.ns1</name>
              	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>

        <property>
		          <name>dfs.permissions.enabled</name>
		          <value>false</value>
        </property>
</configuration>
配置檔案mapred-site.xml檔案
vi etc/hadoop/mapred-site.xm
======================
<configuration>
        <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

        <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop01:19888</value>
    </property>

        <property>
                  <name>mapreduce.job.ubertask.enable</name>
                  <value>true</value>
        </property>
</configuration>

配置檔案yarn-site.xml
vi etc/hadoop/yarn-site.xml
======================
<configuration>
<!-- Site specific YARN configuration properties -->
		<property>
           <name>yarn.resourcemanager.ha.enabled</name>
           <value>true</value>
        </property>

        <property>
           <name>yarn.resourcemanager.cluster-id</name>
           <value>rmcluster</value>
        </property>

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

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

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

        <property>
           <name>yarn.resourcemanager.zk-address</name>
           <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
        </property>

        <property>
           <name>yarn.resourcemanager.recovery.enabled</name>
           <value>true</value>
        </property>

        <property>
           <name>yarn.resourcemanager.store.class</name>
           <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        </property>

	  <property>
		        <name>yarn.nodemanager.aux-services</name>
		        <value>mapreduce_shuffle</value>
	    </property>
	
	 <property>
		    <name>yarn.log-aggregation-enable</name>
		    <value>true</value>
	  </property>
	
	  <property>
		    <name>yarn.nodemanager.log.retain-seconds</name>
		    <value>10800</value>
	
	    </property>
</configuration>

配置檔案slaves檔案
vi etc/hadoop/slaves
======================
hadoop01
hadoop02
hadoop03

六,啟動叢集

1.啟動zookeeper【三臺PC】

bin/zkServer.sh start

2.啟動journalnode【三臺PC】

sbin/hadoop-daemon.sh start journalnode

3.格式化hdfs【PC01】

bin/hdfs namenode -format					##格式化
sbin/hadoop-daemon.sh start namenode		##啟動namenode

6.同步nn1的元資料資訊【PC02】

bin/hdfs namenode -bootstrapStandby		##同步資料
sbin/hadoop-daemon.sh start namenode		##啟動namenode

7.關掉所有程序

8.重新啟動

重新啟動zookeeper【三臺PC】
bin/zkServer.sh start		##啟動zk
初始化zkfc【PC01】
bin/hdfs zkfc -formatZK
啟動hdfs【PC01】
sbin/start-dfs.sh			##啟動hdfs
bin/hdfs haadmin -getServiceState nn1     #檢視nn1狀態
bin/hdfs haadmin -getServiceState nn2     #檢視nn2狀態
啟動ResourceManagere【PC02】
sbin/start-yarn.sh
單獨啟動【PC03】
sbin/yarn-daemon.sh start resourcemanager
檢視狀態
bin/yarn rmadmin -getServiceState rm1      ##檢視rm1的狀態
bin/yarn rmadmin -getServiceState rm2      ##檢視rm2的狀態

七,安裝hbase【三臺PC】

1. 解壓HBASE安裝檔案到安裝路徑下【三臺PC】

sudo tar -zvxf hbase-1.3.1-bin.tar.gz -C /opt/app/

2. 修改許可權為hadoop使用者【三臺PC】

sudo chown -R hadoop:hadoop hbase-1.3.1/

3. 配置HBASE的環境 $HBASE/conf/hvase-env.sh【三臺PC】

vi $HBASE/conf/hvase-env.sh
======================================
// 修改JAVA_HOME
export JAVA_HOME=/opt/app/jdk1.8.0_181
// 關閉自帶的zookeeper, 不需要HBASE自帶的zookeeper
export HBASE_MANAGES_ZK=false

4. 配置HBASE-site.xml檔案【三臺PC】

vi hbase-site.xml
// 配置HBASE臨時目錄
<property >
		<name>hbase.tmp.dir</name>
		<value>/opt/app/hbase-1.3.1/hbase</value>
  </property>

// 配置hbase 臨時目錄儲存位置
 <property >
	    <name>hbase.rootdir</name>
	    <value>hdfs://ns1/hbase</value>
 </property>

//設定hbase的儲存模式為分散式儲存
 <property >
	    <name>hbase.cluster.distributed</name>
	    <value>true</value>
</property>

//設定hbase中zookeeper 的資訊,地址為自己配置的主機名稱
<property>
	    <name>hbase.zookeeper.quorum</name>
	    <value>hadoop01,hadoop02,hadoop03</value>
</property>

5. 配置hbase在hdfs上的儲存路徑【三臺PC】

cp core-site.xml /opt/app/hbase-1.3.1/conf/
cp hdfs-site.xml /opt/app/hbase-1.3.1/conf/

6. 配置regionservers 【三臺PC】

該檔案類似於 salves 檔案,描述的是 regionserver的節點資訊. 在配置過程中存在幾個regionserver 就寫幾個主機名稱

hadoop01
hadoop02
hadoop03

7. 修改 hbase中hadoop的jar包【三臺PC】

由於hbase要操作hdfs,所以hbase需要hadoop的jar包支援。所以在hbase中配置環境中hadoop的jar包

8. 啟動HBASE

1. 啟動master服務【pc01】
bin/hbase-daemon.sh start master
2. 啟動 regionserver 服務 在3個節點上啟動【三臺PC】
bin/hbase-daemon.sh start regionserver
3. 在web端檢視, 埠號為16010