Hbase完全分布式高可用集群安装配置

来源:互联网 发布:小说我知女人心 编辑:程序博客网 时间:2024/06/08 14:48

1.准备安装软件

OS:centos7
Hadoop:hadoop-2.7.3
HBase:hbase-1.2.6
JDK:jdk-8u121-linux-x64
集群机器:

主机 IP地址 系统 软件 进程 nn1 192.168.150.181 centos7 jdk1.8+,hadoop,HBase NameNode、DFSZKFailoverController(zkfc)、ResourceManager、HMaster、HQuorumPeer nn2 192.168.150.182 centos7 jdk1.8+,hadoop,HBase NameNode、DFSZKFailoverController(zkfc)、ResourceManager、HQuorumPeer、HRegionServer dn1 192.168.150.183 centos7 jdk8+,hadoop,zookeeper,HBase DataNode、NodeManager、JournalNode、QuorumPeerMain、HQuorumPeer、HRegionServer dn2 192.168.150.184 centos7 jdk8+,hadoop,zookeeper,HBase DataNode、NodeManager、JournalNode、QuorumPeerMain、HQuorumPeer、HRegionServer dn3 192.168.150.185 centos7 jdk8+,hadoop,zookeeper,HBase DataNode、NodeManager、JournalNode、QuorumPeerMain、HQuorumPeer、HRegionServer

参照上面的列表创建5台虚拟机(ps:自己电脑的内存要足够大,每台虚拟机的内存至少是1G),创建hadoop用户,修改每个虚拟机的静态IP、主机名、主机名与IP的映射,关闭防火墙和selinux,不会的请参考 在centos7上搭建hadoop集群 之后就是就是安装,环境的搭建以及启动

对hadoop的理解:
hadoop的设计是主从分布式原理,主(namenod 简称nn)只有一个不负责记录实际数据,只记录元数据(文件描述信息),从(datanode 简称 dn)有多个用来记录实际数据。从(dn)写入数据并备份(默认3)成功后把块信息汇报个主(nn)并维持一个心跳。
所以从我的理解角度来看,数据不会出现spof。而影响整个集群是否能正常工作的地方就是主(nn),如果nn故障整个集群就瘫痪了也就是所谓的spof.
如何避免nn的spof,我的理解就是备份nn,并在其中一个nn故障时快速切换到可用的nn
要解决的问题:热备份,快速启动,防止脑裂,我所说的大家不了解的话可以网上查查。我简单说下
1. 热备份:就是要保证备份数据必须实时,不能丢失,和元数据一样
2. 快速启动:客户端感觉不出来,(因为nn启动时很慢的,根据记录的元数据多少有关)
3. 防止脑裂:hadoop集群任何时刻必须保证只有一个领导者(主nn),也就是一山不能容二虎,除非一公一母。母也就是备份 standby namenode ( snn )

QJM/Quorum Journal Manager方案:

action:表示在服务的
standby:表示不再服务,热备份中的
JN:JournalNode 存储服务中nn的状态,用来共享
zkfc:DFSZKFailoverController 健康监测 ,会话管理 ,master选举,防止脑裂

对HBase的理解:
1.Hbase出现的原因:
HBase作为面向列的数据库运行在HDFS之上,HDFS缺乏随即读写操作,HBase正是为此而出现。HBase以Google BigTable为蓝本,以键值对的形式存储。项目的目标就是快速在主机内数十亿行数据中定位所需的数据并访问它。
HBase是一个数据库,一个NoSql的数据库,像其他数据库一样提供随即读写功能,Hadoop不能满足实时需要,HBase正可以满足。如果你需要实时访问一些数据,就把它存入HBase。
2.HBase:
HBase是一个管理系统,数据依然是存在HDFS中,但是HBase管理的数据具有自己的组织结构,能够满足我们快速查询某一些数据的特点,而HDFS做不到。

HDFS和HBase如何用哪一个?
1)两者可以配合使用,即数据可以存储在HDFS中,同时也存储在HBase中(两者的数据可以稍有不同,比如一个数据比较全,另外一个根据需求,可以少一些),如果需要实时查询某些数据时,使用HBase,进行Hive统计,或者MapReduce运算时,使用HDFS数据。
2).MapReduce的 输入输出,可以设置为HBase
mapreduce编程模型之hbase表作为数据源输入输出
3)Hive也可以对HBase进行操作
http://www.cnblogs.com/npumenglei/p/how_to_use_hive_load_data_from_hbase.html

http://blog.csdn.net/itjavaer/article/details/47397307

http://blog.csdn.net/jiedushi/article/details/7325292

2.开始安装

1.安装jdk1.8+、hadoop(不会的请参考: 在centos7上搭建hadoop集群)
在centos7上搭建hadoop集群
2.安装zookeeper在dn3,dn4,dn5上
zookeeper下载连接
这里写图片描述
利用xftp上传至dn3,dn4,dn5上,解压到主体目录下:

tar -zvxf zookeeper-3.4.9.tar.gz

3.安装Hbase到所有机器上
HBase下载链接
这里写图片描述
注意:版本的兼容性,详情看Hbase官网
官网链接
这里写图片描述

3.配置环境变量

# Java Environment Variablesexport JAVA_HOME=/usr/java/jdk1.8.0_121export PATH=$PATH:$JAVA_HOME/bin# Hadoop Environment Variablesexport HADOOP_HOME=/home/hadoop/hadoop-2.7.3export HADOOP_INSTALL=$HADOOP_HOMEexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport YARN_HOME=$HADOOP_HOMEexport HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin# Zookeeper Environment Variablesexport ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.4.9export PATH=$PATH:$ZOOKEEPER_HOME/bin# HBase Environment Variablesexport HBASE_HOME=/home/hadoop/hbase-1.2.6export PATH=$PATH:$HBASE_HOME/bin

4.zookeeper配置,dn3,dn4,dn5

存放在zookeeper安装目录的conf目录下起名zoo.cfg

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.#dataDir=/tmp/zookeeper 在你的主机中建立相应的目录dataDir=/home/hadoop/zookeeper-3.4.9/data# the port at which the clients will connectclientPort=2181# 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=1server.1=dn3:2888:3888server.2=dn4:2888:3888server.3=dn5:2888:3888

在dn3,dn4,dn5的/home/hadoop/zookeeper-3.4.9/data下创建一个myid的文件里面写一个数字 要和上面配置中的信息一直如
server.1=dn3:2888:3888 表示要在node3的myid文件中写一个1的数字
server.2=dn4:2888:3888表示要在node4的myid文件中写一个2的数字
server.3=dn5:2888:3888表示要在node5的myid文件中写一个3的数字

5.hadoop ha配置,在每个node上

1.core-site.xml

<configuration>    <property>          <name>fs.defaultFS</name>          <value>hdfs://cluster</value>      </property>      <property>          <name>hadoop.tmp.dir</name>          <value>/home/hadoop/hadoop-2.7.3/tmp</value>      </property>      <property>          <name>ha.zookeeper.quorum</name>          <value>dn3:2181,dn4:2181,dn5:2181</value>      </property> </configuration>

2.hdfs-site.xml

<configuration>    <property>          <name>dfs.nameservices</name>          <value>cluster</value>      </property>      <property>          <name>dfs.ha.namenodes.cluster</name>          <value>nn1,nn2</value>      </property>    <property>          <name>dfs.namenode.rpc-address.cluster.node1</name>          <value>nn1:9000</value>      </property>      <property>          <name>dfs.namenode.http-address.cluster.node1</name>          <value>nn1:50070</value>      </property>      <property>          <name>dfs.namenode.rpc-address.cluster.node2</name>          <value>nn2:9000</value>      </property>      <property>          <name>dfs.namenode.http-address.cluster.node2</name>          <value>nn2:50070</value>      </property>      <property>          <name>dfs.namenode.shared.edits.dir</name>          <value>qjournal://dn3:8485;dn4:8485;dn5:8485/cluster</value>      </property>      <property>          <name>dfs.journalnode.edits.dir</name>          <value>/home/hadoop/hadoop-2.7.3/journaldata</value>      </property>      <property>          <name>dfs.ha.automatic-failover.enabled</name>          <value>true</value>      </property>      <property>          <name>dfs.client.failover.proxy.provider.cluster</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>      <property>          <name>dfs.ha.fencing.ssh.private-key-files</name>          <value>/home/hadoop/.ssh/id_rsa</value>      </property>      <property>          <name>dfs.ha.fencing.ssh.connect-timeout</name>          <value>30000</value>      </property>  </configuration>

3.mapred-site.xml

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

4.yarn-site.xml

<configuration><property>         <name>yarn.resourcemanager.ha.enabled</name>         <value>true</value>      </property>      <property>         <name>yarn.resourcemanager.cluster-id</name>         <value>yrc</value>      </property>      <property>         <name>yarn.resourcemanager.ha.rm-ids</name>         <value>rm1,rm2</value>      </property>      <property>         <name>yarn.resourcemanager.hostname.rm1</name>         <value>nn1</value>      </property>      <property>         <name>yarn.resourcemanager.hostname.rm2</name>         <value>nn2</value>      </property>      <property>         <name>yarn.resourcemanager.zk-address</name>         <value>dn3:2181,dn4:2181,dn5:2181</value>      </property>      <property>         <name>yarn.nodemanager.aux-services</name>         <value>mapreduce_shuffle</value>      </property>     </configuration>

5.slaves

dn3dn4dn5

5.Hbase配置,在每个node节点上

1.hbase-env.sh
源文件修改两处:

1.)修改HBASE的指向
这里写图片描述

2.)瞎改HBase是否应该管理它自己的实例的管理员为false。
这里写图片描述

2.hbase-site

<configuration>    <property>        <name>hbase.rootdir</name>        <value>hdfs://cluster/hbase</value>    </property>  <property>        <name>hbase.cluster.distributed</name>        <value>true</value>  </property>  <property>        <name>hbase.zookeeper.quorum</name>        <value>dn3,dn4,dn5</value>  </property>  <property>        <name>hbase.tmp.dir</name>        <value>/home/hadoop/app/tmp/hbase</value>  </property>  <property>        <name>hbase.zookeeper.property.dataDir</name>        <value>/home/hadoop/app/tmp/data</value>  </property>  <property>        <name>hbase.regionserver.restart.on.zk.expire</name>        <value>true</value>  </property></configuration>

3.regionservers

dn3dn4dn5

6.启动步骤

1.先启动zookeeper服务,分别在dn3,dn4,dn5上执行zkServer.sh start2.启动journalnode,分别在dn3,dn4,dn5上执行 hadoop-daemon.sh start journalnode 注意只有第一次需要这么启动,之后启动hdfs会包含journalnode3.格式化HDFS,在nn1上执行hdfs namenode -format注意:格式化之后需要把tmp目录拷给nn2(不然node2的namenode起不来)4.格式化ZKFC,在nn1上执行hdfs zkfc -formatZK5.启动HDFS,在nn1上执行,start-dfs.sh6.启动YARN,在nn1上执行,start-yarn.sh7.nn2的resourcemanager需要手动单独启动:yarn-daemon.sh start resourcemanager8.start-hbase.sh9.hbase-daemon.sh start master
原创粉丝点击