生产环境下hadoop HA集群及Hbase HA集群配置

一、环境准备

操作系统版本:
centos7 64位

hadoop版本:
hadoop-2.7.3

hbase版本:

hbase-1.2.4

 

1、机器及角色

IP角色
192.168.11.131NamenodeDFSZKFailoverControllerResourceManagerJobhistory    HMasterQuorumPeerMain
192.168.11.132NamenodeDFSZKFailoverController      HMasterQuorumPeerMain
192.168.11.133    DatanodeNodeManagerJournalNodeHRegionServer QuorumPeerMain
192.168.11.134    DatanodeNodeManagerJournalNodeHRegionServer QuorumPeerMain
192.168.11.135    DatanodeNodeManagerJournalNodeHRegionServer QuorumPeerMain

master1:
# hostnamectl set-hostname master1
其他主机名分别配置为master2、slave1、slave2、slave3

2、所有节点关闭防火墙及selinux

说明:

命令前面#表示在root用户下的操作,$表示在hduser用户下操作的。

 

查看防火墙状态

# firewall-cmd --state

running

 

关闭防火墙

# systemctl stop firewalld.service

 

防火墙配置为禁用状态

# systemctl disable firewalld.service

 

 

立即关闭selinux(临时)

# setenforce 0

 

永久关闭selinux

# vi /etc/sysconfig/selinux

SELINUX=enforcing --> disabled

 

3、配置yum源

 

所有节点配置yum源

# cd 

 

# mkdir apps

 

http://mirrors.163.com/centos/7/os/x86_64/Packages/wget-1.14-15.el7.x86_64.rpm

 

# rpm -i wget-1.14-15.el7.x86_64.rpm 

 

# cd /etc/yum.repos.d

 

# wget  http://mirrors.aliyun.com/repo/Centos-7.repo

 

# mv Centos-7.repo CentOS-Base.repo 

 

# scp CentOS-Base.repo root@192.168.11.131:/etc/yum.repos.d/

# scp CentOS-Base.repo root@192.168.11.132:/etc/yum.repos.d/

# scp CentOS-Base.repo root@192.168.11.133:/etc/yum.repos.d/

# scp CentOS-Base.repo root@192.168.11.134:/etc/yum.repos.d/

 

# yum clean all

 

# yum makecache

 

# yum update

 

4、配置ntp时间同步,master1为ntp服务端,其他为ntp客户端

所有节点安装ntp

# yum install -y ntp

 

ntp server端:

首先配置当前时间

# date -s "2018-05-27 23:03:30"

 

编辑配置文件

# vi /etc/ntp.conf

在注释下添加两行

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

server 127.127.1.0

fudge 127.127.1.0 stratum 11

 

注释下面

#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

 

启动ntp服务并配置为开机自启动

# systemctl start ntpd.service

 

# systemctl enable ntpd.service

 

ntp客户端(其余四台都为ntp客户端):

 

# vi /etc/ntp.conf

同样注释下添加两行

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

server 192.168.11.131

fudge 127.127.1.0 stratum 11

 

四行添加注释

#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

 

# systemctl start ntpd.service

 

# systemctl enable ntpd.service

 

手动同步时间

# ntpdate 192.168.11.131

28 May 07:04:50 ntpdate[1714]: the NTP socket is in use, exiting

 

对出现的报错做处理

# lsof -i:123

-bash: lsof: command not found

 

# yum install -y lsof

 

# lsof -i:123

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

ntpd    1693  ntp   16u  IPv4  25565      0t0  UDP *:ntp 

ntpd    1693  ntp   17u  IPv6  25566      0t0  UDP *:ntp 

ntpd    1693  ntp   18u  IPv4  25572      0t0  UDP localhost:ntp 

ntpd    1693  ntp   19u  IPv4  25573      0t0  UDP localhost.localdomain:ntp 

ntpd    1693  ntp   20u  IPv6  25574      0t0  UDP localhost:ntp 

ntpd    1693  ntp   21u  IPv6  25575      0t0  UDP localhost.localdomain:ntp 

 

杀掉ntp的进程,注意ntp进程id各不相同,按实际情况处理

# kill -9 1693

 

再次同步时间成功

# ntpdate 192.168.11.131

27 May 23:06:14 ntpdate[1728]: step time server 192.168.11.131 offset -28808.035509 sec

 

5、修改主机名和hosts文件

所有节点修改主机名(永久)

# hostnamectl set-hostname master1~slave3

临时修改主机名

# hostname master1~slave3

 

主节点修改hosts文件

# vi /etc/hosts

192.168.11.131    master1

192.168.11.132    master2

192.168.11.133    slave1

192.168.11.134    slave2

192.168.11.135    slave3

 

把hosts文件覆盖到其他机器

# scp /etc/hosts root@192.168.11.132~135:/etc/

 

所有节点创建管理用户和组

创建组和用户

# groupadd hduser

 

# useradd -g hduser hduser

 

# passwd hduser

 

二、配置hadoop环境

1、创建目录并赋权

每台机器上创建如下文件夹

# mkdir /data1

# mkdir /data2

 

修改权限

# chown hduser:hduser /data1

# chown hduser:hduser /data2

 

# su hduser

$ mkdir -p /data1/hadoop_data/hdfs/namenode

$ mkdir -p /data2/hadoop_data/hdfs/namenode 

$ mkdir -p /data1/hadoop_data/hdfs/datanode(NameNode不要)

$ mkdir -p /data2/hadoop_data/hdfs/datanode(NameNode不要)

$ mkdir -p /data1/hadoop_data/pids

$ mkdir -p /data2/hadoop_data/pids 

$ mkdir -p /data1/hadoop_data/hadoop_tmp

$ mkdir -p /data2/hadoop_data/hadoop_tmp

 

2、无密验证

master1和master2节点操作

# su - hduser

 

$ ssh-keygen -t rsa 

 

$ cd ~/.ssh

$ cat id_rsa.pub >> authorized_keys

 

master1节点操作

$ ssh-copy-id -i ~/.ssh/id_rsa.pub hduser@master2

 

master2节点操作

$ scp ~/.ssh/authorized_keys hduser@master1:~/.ssh/

 

slave1、slave2和slave3节点创建.ssh目录

# mkdir /home/hduser/.ssh 

 

# chown hduser:hduser /home/hduser/.ssh 

 

master1节点操作

$ scp ~/.ssh/authorized_keys hduser@slave1:~/.ssh

$ scp ~/.ssh/authorized_keys hduser@slave2:~/.ssh

$ scp ~/.ssh/authorized_keys hduser@slave3:~/.ssh

 

master1和master2节点验证

验证方法,分别在两个节点,ssh登陆本机(hdusser用户)及其他四个节点,看看是不是无密登陆。

 

如果未通过验证,所有机器执行下面命令

$ chmod 600 ~/.ssh/authorized_keys

$ chmod 700 ~/.ssh

 

3、所有节点配置java环境

$ mkdir -p /data1/usr/src 

 

上传包到/data1/usr/src目录下

 

$ cd /data1/usr/src

$ tar xf jdk1.7.0_79.tar -C /data1/usr/

 

$ vi ~/.bashrc

export JAVA_HOME=/data1/usr/jdk1.7.0_79      

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar

export PATH=$PATH:$JAVA_HOME/bin

 

$ source ~/.bashrc

 

4、mastar1节点配置hadoop

下载hadoop-2.7.3.tar.gz,上传到/data1/usr/src

http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

 

$ cd /data1/usr/src 

$ tar -zxf hadoop-2.7.3.tar.gz -C /data1/usr/

 

编辑hadoop-env.sh

$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/data1/usr/jdk1.7.0_79

export HADOOP_PID_DIR=/data1/hadoop_data/pids

export HADOOP_PID_DIR=/data2/hadoop_data/pids

export HADOOP_MAPRED_PID_DIR=/data1/hadoop_data/pids

 

编辑mapred-env.sh

$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/mapred-env.sh

export HADOOP_MAPRED_PID_DIR=/data2/hadoop_data/pids

 

编辑yarn-env.sh

$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/yarn-env.sh

export YARN_PID_DIR=/data2/hadoop_data/pids

 

编辑core-site.xml

$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/core-site.xml

<configuration>

<!-- 指定hdfs的nameservice为masters -->

 <property>

   <name>fs.defaultFS</name>

   <value>hdfs://masters</value>

 </property>

 <!-- 指定hadoop运行时产生文件的存储目录 -->

 <property>

   <name>hadoop.tmp.dir</name>

   <value>/data2/hadoop_data/hadoop_tmp</value>

 </property>

 <!-- 指定zookeeper地址 -->

 <property>

   <name>ha.zookeeper.quorum</name>

   <value>master1:2181,master2:2181,slave1:2181,slave2:2181,slave3:2181</value>

 </property>

</configuration>

 

编辑hdfs-site.xml

$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/hdfs-site.xml

<configuration>

       <!--指定hdfs的nameservice为masters,需要和core-site.xml中的保持一致 -->

       <property>

               <name>dfs.nameservices</name>

               <value>masters</value>

       </property>

       <!-- h1下面有两个NameNode,分别是master1,master2 -->

       <property>

               <name>dfs.ha.namenodes.masters</name>

               <value>master1,master2</value>

       </property>

       <!-- master1的RPC通信地址 -->

       <property>

               <name>dfs.namenode.rpc-address.masters.master1</name>

               <value>master1:9000</value>

       </property>

       <!-- master1的http通信地址 -->

       <property>

               <name>dfs.namenode.http-address.masters.master1</name>

               <value>master1:50070</value>

       </property>

       <!-- master2的RPC通信地址 -->

       <property>

               <name>dfs.namenode.rpc-address.masters.master2</name>

               <value>master2:9000</value>

       </property>

       <!-- master2的http通信地址 -->

       <property>

               <name>dfs.namenode.http-address.masters.master2</name>

               <value>master2:50070</value>

       </property>

       <!-- 指定NameNode的存放位置 -->

       <property>

               <name>dfs.namenode.name.dir</name>

               <value>file:///data2/hadoop_data/hdfs/namenode</value>

       </property>

       <!-- 指定DataNode的存放位置 -->

       <property>

               <name>dfs.datanode.data.dir</name>

               <value>file:///data1/hadoop_data/hdfs/datanode,data2/hadoop_data/hdfs/datanode</value>

       </property>

       <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->

       <property>

               <name>dfs.namenode.shared.edits.dir</name>

               <value>qjournal://slave1:8485;slave2:8485;slave3:8485/masters</value>

       </property>

       <!-- 指定JournalNode在本地磁盘存放数据的位置 -->

       <property>

               <name>dfs.journalnode.edits.dir</name>

               <value>/data2/hadoop_data/journal</value>

       </property>

       <!-- 开启NameNode失败自动切换 -->

       <property>

               <name>dfs.ha.automatic-failover.enabled</name>

               <value>true</value>

       </property>

       <!-- 配置失败自动切换实现方式 -->

       <property>

               <name>dfs.client.failover.proxy.provider.masters</name>

               <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

       </property>

       <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->

       <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/hduser/.ssh/id_rsa</value>

       </property>

       <!-- 配置sshfence隔离机制超时时间 -->

       <property>

               <name>dfs.ha.fencing.ssh.connect-timeout</name>

               <value>30000</value>

       </property>

       <!-- 这个地方是为Hbase的专用配置,最小为4096,表示同时处理文件的上限,不配置会报错 -->

       <property>

               <name>dfs.datanode.max.xcievers</name>

               <value>8192</value>

       </property>

       <property>

               <name>dfs.qjournal.write-txns.timeout.ms</name>

               <value>60000</value>

       </property>

</configuration>

 

编辑yarn-site.xml

$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/yarn-site.xml

<configuration>

 

<!-- Site specific YARN configuration properties -->

<!-- 开启RM高可靠 -->

       <property>

               <name>yarn.resourcemanager.ha.enabled</name>

               <value>true</value>

       </property>

       <!-- 指定RM的cluster id -->

       <property>

               <name>yarn.resourcemanager.cluster-id</name>

               <value>RM_HA_ID</value>

       </property>

       <!-- 指定RM的名字 -->

       <property>

               <name>yarn.resourcemanager.ha.rm-ids</name>

               <value>rm1,rm2</value>

       </property>

       <!-- 分别指定RM的地址 -->

       <property>

               <name>yarn.resourcemanager.hostname.rm1</name>

               <value>master1</value>

       </property>

       <property>

               <name>yarn.resourcemanager.hostname.rm2</name>

               <value>master2</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>

       <!-- 指定zk集群地址 -->

       <property>

               <name>yarn.resourcemanager.zk-address</name>

               <value>master1:2181,master2:2181,slave1:2181,slave2:2181,slave3:2181</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>

</configuration>

 

编辑mapred-site.xml

$ cp /data1/usr/hadoop-2.7.3/etc/hadoop/mapred-site.xml.template /data1/usr/hadoop-2.7.3/etc/hadoop/mapred-site.xml

$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/mapred-site.xml

<configuration>

 <!-- 指定mr框架为yarn方式 -->

 <property>

   <name>mapreduce.framework.name</name>

   <value>yarn</value>

 </property>

</configuration>

 

编辑slaves

$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/slaves

slave1

slave2

slave3

 

同步hadoop配置到其他节点

$ for ip in `seq 2 5`;do scp -rpq /data1/usr/hadoop-2.7.3 192.168.11.13$ip:/data1/usr;done

 

5、各节点zookeeper配置

http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

上传包到/data1/usr/src目录下

 

创建目录

$ mkdir -p /home/hduser/storage/zookeeper

 

$ cd /data1/usr/src

$ tar -zxf zookeeper-3.4.6.tar.gz -C /data1/usr

 

编辑zoo.cfg

$ cp /data1/usr/zookeeper-3.4.6/conf/zoo_sample.cfg /data1/usr/zookeeper-3.4.6/conf/zoo.cfg

$ vi /data1/usr/zookeeper-3.4.6/conf/zoo.cfg

dataDir=/home/hduser/storage/zookeeper

server.1=master1:2888:3888

server.2=master2:2888:3888

server.3=slave1:2888:3888

server.4=slave2:2888:3888

server.5=slave3:2888:3888

 

master1-slave3各节点依次做操作

$ echo "1" > /home/hduser/storage/zookeeper/myid

 

$ echo "2" > /home/hduser/storage/zookeeper/myid

 

$ echo "3" > /home/hduser/storage/zookeeper/myid

 

$ echo "4" > /home/hduser/storage/zookeeper/myid

 

$ echo "5" > /home/hduser/storage/zookeeper/myid

 

各节点启动ZK服务

$ cd /data1/usr/zookeeper-3.4.6/bin 

$ ./zkServer.sh start 

 

6、slave1、slave2和slave3启动journalnode

$ cd /data1/usr/hadoop-2.7.3/sbin 

$ ./hadoop-daemon.sh start journalnode 

用jps确认启动结果

 

7、在master1上格式化zookeeper节点格式化(第一次)

$ cd /data1/usr/hadoop-2.7.3

$ ./bin/hdfs zkfc -formatZK

 

8、在master1上执行命令格式化文件系统

./bin/hadoop namenode -format

 

9、在master1上启动namenode和zkfc服务

./sbin/hadoop-daemon.sh start namenode

./sbin/hadoop-daemon.sh start zkfc

 

10、需要在master2(备节点)上执行数据同步

./bin/hdfs namenode –bootstrapStandby

 

在master1上拷贝文件到master2

scp -r /data2/hadoop_data/hdfs/namenode hduser@master2:/data2/hadoop_data/hdfs/

 

11、在master2上启动namenode和zkfc服务

./sbin/hadoop-daemon.sh start namenode

./sbin/hadoop-daemon.sh start zkfc

 

12、设置master1为active

./bin/hdfs haadmin -transitionToActive master1

./bin/hdfs haadmin -getServiceState master1

 

13、在master1上启动datanode

./sbin/hadoop-daemons.sh start datanode

 

14、启动HDFS(第二次以后)

在master1上执行命令:

./sbin/start-dfs.sh

 

15、启动YARN

在master1上执行命令:

./sbin/start-yarn.sh

 

16、启动Jobhistory

./sbin/mr-jobhistory-daemon.sh start historyserver

 

17、验证

验证namenode

http://master1:50070

Overview 'master1:9000' (active)

http://master2:50070

Overview 'master2:9000' (standby)

 

18、验证文件系统

上传文件

./bin/hadoop fs -put /data1/usr/hadoop-2.7.3/etc/hadoop /test/hadoop

./bin/hadoop fs -ls /test

 

19、namenode的备份验证

杀死master1,master2变为active

 

20、验证yarn

./bin/hadoop jar /data1/usr/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/hadoop /test/out

 

三、安装HBASE

下载hbase-1.2.4-bin.tar.gz,解压

$ cd /data1/usr/src

$ tar -zxvf hbase-1.2.4-bin.tar.gz  -C /data1/usr/

 

3、创建目录

$ mkdir -p /data1/hadoop_data/hbase_tmp

$ mkdir -p /data2/hadoop_data/hbase_tmp 

 

2、配置master1的hbase环境

配置hbase-env.sh

$ vi /data1/usr/hbase-1.2.4/conf/hbase-env.sh

export JAVA_HOME=/data1/usr/jdk1.7.0_79

export HBASE_PID_DIR=/data2/hadoop_data/pids

export HBASE_MANAGES_ZK=false

export HADOOP_HOME=/data1/usr/hadoop-2.7.3

 

3、配置hbase-site.xml

$ vi /data1/usr/hbase-1.2.4/conf/hbase-site.xml

<!-- 指定HBase在HDFS上面创建的目录名hbase -->

   <property>

       <name>hbase.rootdir</name>

       <value>hdfs://masters/hbase</value>

   </property>

   <!-- 开启集群运行方式 -->

   <property>

       <name>hbase.cluster.distributed</name>

       <value>true</value>

   </property>

   <property>

       <name>hbase.master.port</name>

       <value>60000</value>

   </property>

   <property>

       <name>hbase.tmp.dir</name>

       <value>/data2/hadoop_data/hbase_tmp</value>

   </property>

   <property>

       <name>hbase.zookeeper.quorum</name>

       <value>master1,master2,slave1,slave2,slave3</value>

   </property>

 

4、配置regionservers

$ vi /data1/usr/hbase-1.2.4/conf/regionservers

slave1

slave2

slave3

 

5、配置backup-masters

$ vi /data1/usr/hbase-1.2.4/conf/backup-masters

master2

 

6、移除 HBase 里面的不必要 log4j 的 jar 包

cd ${HBASE_HOME}/lib

mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bak

 

7、将master1的hbase环境传输到其他节点

$ for ip in `seq 2 5`;do scp -rpq /data1/usr/hbase-1.2.4 192.168.11.13$ip:/data1/usr;done

 

8、master1上启动Hbase(hadoop集群已启动)

$ cd /data1/usr/hbase-1.2.4/bin 

$ ./start-hbase.sh

 

9、验证

查看hbase是否在HDFS文件系统创建成功

$ /data1/usr/hadoop-2.7.3/bin/hadoop fs -ls / 

 

执行: bin/hbase shell 可以进入Hbase管理界面、

输入 status 查看状态

 

创建表

create 'test', 'cf'

 

显示表信息

list 'test'

 

表中插入数据

put 'test', 'row1', 'cf:a', 'value1'

put 'test', 'row2', 'cf:b', 'value2'

put 'test', 'row3', 'cf:c', 'value3'

 

查询表

scan 'test'

 

取一行数据

get 'test', 'row1'

 

失效表

disable 'test'

 

删除表

drop 'test'

 

浏览器输入http://master1:16010可以打开Hbase管理界面

http://192.168.11.131/master-status

 

10、启动thrift2

hbase-daemons.sh start thrift2

 

各节点用jps确认服务是否启动,一般启动失败的原因是配置有误。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值