從零搭建hadoop高可用叢集,hbase
阿新 • • 發佈:2018-12-21
一,叢集規劃
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