【HBase分布式数据库】第二章 HBase入门前提

HBase版本选择

任务目的

认识hbase官网

学习如何选择版本

巧妙利用官网

任务清单

任务1:hbase官网

任务2:hbase版本选择

任务3:巧妙利用官网

任务步骤

任务1:hbase官网

2.1-1

2.1-1

01 Apache HBase参考指南常见问题:

地址:http://hbase.apache.org/book.html#quickstart

2.1-2

02 HBase的下载方式

2.1-3

2.1-4

任务2:hbase版本选择

当我们想整合hadoop,hbase,hive,zookeeper的时候,如果刚入门,可能认为这是比较简单的问题。但是当你自己真正想整合的时候,却会遇到很多的问题。

hadoop与hbase哪些版本兼容?

hadoop与hive哪些版本兼容?

hbase与hive哪些版本兼容?

hbase与zookeeper哪些版本兼容?

所以当我们真正想做整合的时候,我们需要解决上面四个问题,有些同学,忽略上面问题,直接部署,导致产生各种问题。所以我们现在就要解决上面问题。第一个问题,hadoop与hbase哪些版本兼容。

这里的每一个问题,当然我们需要引用官网的内容。

2.1-5

Java和HBase的版本兼容问题

HBase既不会构建也不会与Java 6一起运行。

JAVA_HOME在群集的每个节点上进行设置。hbase-env.sh提供了一种方便的机制来执行此操作。

官网提供了下图供参考:

2.1-6

HBase和Zookeeper的兼容问题

我们在上章的课程中讲过,其实在HBase中自带Zookeeper程序,但是为了保证Zookeeper的版本与其他组件的一致性,所以我们会在配置HBase的时候将其自带的Zookeeper程序屏蔽掉,而使用我们自己去安装的Zookeeper程序,这样就可以防止其他版本兼容的问题发生。

同样我们可以在官网上找到答案:

2.1-7

hive与Hadoop以及HBase的兼容问题

在实际的生产环境以及我们课程的后期会将hive这个大数据的工具集成到我们的项目中来,从而更方便我们去处理大数据,所以我们在规划集群的同时会将hive的版本考虑进来,而对于hive与Hadoop以及HBase的兼容问题,官方同样给出了答案:

2.1-8

任务3:巧妙利用官网

其实官网当中除了这些版本兼容信息以外还有很多值得我们学习的东西在里面,比如:

参考指南

用户API

开发人员API

中文版参考指南

2.1-9

zookeeper配置文件详解

任务目的

认识zookeeper

理解zookeeper与hbase之间的关系

理解zookeeper的工作原理

任务清单

任务1:ZooKeeper简介

任务2:ZooKeeper与hbase的关系

任务3:工作原理

任务步骤

任务1:ZooKeeper简介

01 ZooKeeper定义

打开zookeeper官网,赫然一行大字,写着:"Apache ZooKeeper致力于开发和维护实现高度可靠的分布式协调的开源服务器"。什么意思呢?就是Apache ZooKeeper的目标是开发和维护开源服务器,这服务器是干什么的呢?是做分布式协调的。这服务器的特点是什么呢?是高度可靠的。关键就是高度可靠,不用去验证,也不用怀疑zookeeper的高度可靠性,搜索应用界的大佬solr和大数据服务界的大佬Hadoop就是使用zookeeper提供集群管理。

02 什么是ZooKeeper

ZooKeeper诞生于Yahoo,后转入Apache孵化,最终孵化成Apache的顶级项目,是Hadoop和Hbase的重要组件。

ZooKeeper是一种集中式服务,用于维护配置信息、命名、提供分布式同步和提供组织服务。所有这些类型的服务都以分布式应用程序的某种形式使用。由于实现上述需求都需要做很多工作来修复不可避免的错误和竞争条件。因此,这些服务的实现变得非常困难,即使这些服务顺利完成,管理和运维的成本也非常高,所以zookeeper以救世主的身份出现,解决上述技术难题,降低了分布式应用程序的开发难度和工作量,让程序员专注于分布式架构的设计。

03 zookeeper的三种部署方式

​ 1、独立部署模式,即部署在单台机器上的一个zookeeper服务,适用于学习、了解zookeeper基础功能。

​ 2、伪分布模式,即部署在一台机器上的多个(原则上大于3个)zookeeper服务,虚拟分布式的zookeeper集群,适用于学习、开发和测试,不适用生产环境。

​ 3、全分布式模式(复制模式),即在多台机器上部署zookeeper服务,真正的集群模式,适合于学习、开发和测试,可投入到生产环境中使用。

04 在什么场景下使用ZooKeeper

集群管理

​ ①节点监控:集群环境下,有很多节点,节点可能因为网络故障连接不上,可能因为机器故障无法工作,要求保证集群中的节点都能正常工作,就需要把异常的节点从集群中屏蔽掉,这时使用zookeeper的短暂节点和watcher机制,可以很好的实现集群的管理。

​ ②领导者选举:集群是多个节点(可把节点理解为机器)协同工作,这是需要一个把控全局的领导者节点来接收外部请求、任务派发等,那么,领导者节点如何产生?领导者节点出现故障怎么处理?

领导者选举是zookeeper最优秀的功能之一,如果当前领导者节点出现故障,zookeeper可在很短的时间内选举出新的领导者来接替故障领导者的工作。

配置管理

实际应用中,配置使应用变得灵活,但是在分布式应用下,需要到每一台机上面修改配置,维护配置则复杂很多,基于这种场景,把配置放在zookeeper的znode中,分布式应用的机器到zookeeper的znode中读取配置应用到系统中即可。此外,利用zookeeper的watcher机制,如果配置(znode)发生改变,zookeeper通知各个机器配置信息已经被修改,各机器通过刷新来获取到最新的配置。

zookeeper还可以应用到很多场景,比如分布式锁、数据的发布和订阅、队列管理等等,此处就不一一介绍了。

05 ZooKeeper的性能

ZooKeeper旨在提供高性能,但是ZooKeeper的性能如何呢?

zookeeper官网提供了一份性能测试结果图,通过分析测试结果图,可以大概了解zookeeper的性能,如下图所示:

2.2-1

从测试结果图得知测试分为5组,分别为3台服务器一组(暂且称为A组)、5台服务器一组(暂且称为B组)、7台服务器一组(暂且称为C组)、9台服务器一组(暂且称为D组)、13台服务器一组(暂且称为E组),观察到几个现象:

​ ①读取请求的百分比在60%之前,吞吐率为A>B>C>D>E。

​ ②读取请求百分比到达80%偏左侧一点,大概75%时,吞吐率开始发生变化,A组的吞吐率开始被其他组超越。

​ ③读取请求百分比到达约95%时,吞吐率发生逆转,约为E>D>C>B>A,读取请求百分比趋近于瓶颈时,zookeeper集群约庞大,满足的吞吐率约高。

​ ④zookeeper集群的吞吐率起点大约在10000左右,性能下限很高。

结论:

​ ①zookeeper小规模集群也能提供较高的吞吐率,如果对吞吐率有较高要求时,可以通过新增zookeepe服务节点来满足需求。

​ ②随着zookeeper服务节点的增加,zookeeper的性能呈指数上升。

任务2:ZooKeeper与hbase的关系

HBase RegionServer 向ZooKeeper注册,告诉ZooKeeper自己的状态信息(是否在线),HMaster启动时候将系统表加载到ZooKeeper集群上,通过ZooKeeper可以获取当前表的信息,两者之间互相通信,ZooKeeper作为HBase的集群协调器,协调处理好HBase的活动。ZooKeeper主要有以下几个作用:

配置管理:

可对所有的分布式机器通过简单的操作进行你想要的配置,简单方便。

名字服务:

相当于一个点名册,记住所有机器的名字。

集群管理:

相当与帮你做事情的某个机器挂掉后,可以让ZooKeeeper再帮你分配一个机器。

ZooKeeper的特点

​ 1 最终一致性:为客户端展示同一视图,这是zookeeper最重要的功能。

​ 2 可靠性:如果消息被到一台服务器接受,那么它将被所有的服务器接受。

​ 3 实时性:Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。

​ 4 等待无关(wait-free):慢的或者失效的client不干预快速的client的请求。

​ 5 原子性:更新只能成功或者失败,没有中间状态。

​ 6 顺序性:所有Server,同一消息发布顺序一致。

任务3:工作原理

ZooKeeper角色

​ >> 领导者(leader),负责进行投票的发起和决议,更新系统状态

​ >> 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票

​ >> Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度

​ >> 客户端(client),请求发起方

2.2-2

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协

议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后 恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

2.2-3

​ • 为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

​ • 每个Server在工作过程中有三种状态:

​ LOOKING:当前Server不知道leader是谁,正在搜寻

​ LEADING:当前Server即为选举出来的leader

​ FOLLOWING:leader已经选举出来,当前Server与之同步

Java及ZooKeeper安装

任务目的

掌握Java的安装方式

掌握zookeeper的安装方式

任务清单

任务1:java安装

任务2:zookeeper安装

任务步骤

任务1:java安装

01 准备软件

JDK的安装包已经为大家准备好,在/root/software目录下,可以使用如下命令进行查看:

shell 复制代码
cd /root/software/	# 进入目录
ll	# 罗列出当前文件或目录的详细信息,是ls -l的别名
如图所示

2.3-1

02 解压压缩包

看:

shell 复制代码
tar -zxvf jdk-8u221-linux-x64.tar.gz 

tar命令:用于打包并压缩和解包并解压缩文件

使用格式:

​ ○ 打包并压缩:tar -zcvf 打包压缩名文件名/目录

​ ○ 解包并解压缩:tar -zxvf *.tar.gz格式的打包压缩文件

常用选项:

​ ○ z:gzip,通过 gzip 格式压缩或者解压缩

​ ○ -C:指定需要解压的目录,若是未指定,则解压到当前目录

03 配置环境变量

配置环境变量就是在整个运行环境都可以使用的变量,而路径添加到PATH类似于在Windows平台下将程序添加到注册表,添加某个路径到PATH环境变量后,执行该路径下的文件就不需要输入完整的命令路径而只需要输入命令的文件名。

例如,JDK的安装目录为/root/software/jdk1.8.0_221,那么要查看JDK的版本,需要输入"/root/software/jdk1.8.0_221/bin/java -version",但是如果将/root/software/jdk1.8.0_221/bin/配置到PATH下,就只需要直接输入"java -version"。

Linux环境变量和Windows的环境变量一样,分系统环境变量和用户环境变量,系统环境变量对所有用户有效,而用户环境变量只对当前用户有效。

系统环境变量:对于添加给所有用户的环境变量,直接编辑 "/etc/bashrc"或者"/etc/profile";

用户环境变量:对于添加给某一个用户的环境变量,可以编辑用户/home目录下的 " 用户名/.bashrc "或者"用户名/.bash_profile"。

(1)在此处我们配置系统环境变量,使用命令:

shell 复制代码
vim /etc/profile

(2)在最后加入以下两行内容:

shell 复制代码
export JAVA_HOME=/root/software/jdk1.8.0_221	# 配置Java的安装目录
export PATH=$PATH:$JAVA_HOME/bin	# 在原PATH的基础上加入JDK的bin目录

注意:

​ export 是把这三个变量导出为全局变量。

​ 大小写必须严格区分。

如下所示:

shell 复制代码
export JAVA_HOME=/root/software/jdk1.8.0_221
export PATH=$PATH:$JAVA_HOME/bin

添加完成,使用:wq保存退出。

(3)让配置文件立即生效,使用如下命令:

shell 复制代码
source /etc/profile

(4)检测JDK是否安装成功,使用命令查看JDK版本:

shell 复制代码
java -version

执行此命令后,若是出现JDK版本信息说明配置成功

任务2:zookeeper安装

01 解压zookeeper

zookeeper同样在/root/software/目录下:

2.3-2

解压命令

shell 复制代码
tar -zxvf /root/software/zookeeper-3.4.14.tar.gz

解压后的目录中可以看到zookeeper的配置文件目录

2.3-3

首先需要进入到zookeeper的安装目录中,然后修改zoo_sample.cfg为zoo.cfg

2.3-4

查看与修改zoo.cfg内容

2.3-5

2.3-6

tickTime: ZooKeeper 中使用的基本时间单元, 以毫秒为单位, 默认值是 2000。它用来调节心跳和超时。例如, 默认的会话超时时间是两倍的 tickTime。

initLimit: 默认值是 10, 即 tickTime 属性值的 10 倍。它用于配置允许 followers 连接并同步到 leader 的最大时间。如果 ZooKeeper 管理的数据量很大的话可以增加这个值。

syncLimit: 默认值是 5, 即 tickTime 属性值的 5 倍。它用于配置leader 和 followers 间进行心跳检测的最大延迟时间。如果在设置的时间内 followers 无法与 leader 进行通信, 那么 followers 将会被丢弃。

dataDir: ZooKeeper 用来存储内存数据库快照的目录, 并且除非指定其它目录, 否则数据库更新的事务日志也将会存储在该目录下。建议配置 dataLogDir 参数来指定 ZooKeeper 事务日志的存储目录。

clientPort: 服务器监听客户端连接的端口, 也即客户端尝试连接的端口, 默认值是 2181。

maxClientCnxns: 在 socket 级别限制单个客户端与单台服务器之前的并发连接数量, 可以通过 IP 地址来区分不同的客户端。它用来防止某种类型的 DoS 攻击, 包括文件描述符耗尽。默认值是 60。将其设置为 0 将完全移除并发连接数的限制。

autopurge.snapRetainCount: 配置 ZooKeeper 在自动清理的时候需要保留的数据文件快照的数量和对应的事务日志文件, 默认值是 3。

autopurge.purgeInterval: 和参数 autopurge.snapRetainCount 配套使用, 用于配置 ZooKeeper 自动清理文件的频率, 默认值是 1, 即默认开启自动清理功能, 设置为 0 则表示禁用自动清理功能。

2.3-7

在修改完配置文件之后,我们需要启动zookeeper,启动命令如下:

shell 复制代码
bin/zkServer.sh start

启动完成之后我们需要进行zookeeper的状态查询,状态查询命令如下:

shell 复制代码
bin/zkServer.sh status

2.3-8

Hadoop安装回顾

任务目的

回顾配置文件作用

回顾安装步骤

任务清单

任务1:配置文件说明

任务2:安装步骤

任务步骤

任务1:配置文件说明

hadoop-env.sh

2.4-1

core-site.xml

2.4-2

hdfs-site.xml

2.4-3

mapred-site.xml

2.4-4

yarn.site.xml

2.4-5

任务2:安装步骤

1、配置好Hadoop的环境变量以及ssh免密登陆,格式化namenode。

shell 复制代码
hadoop namenode --format

2、hadoop主目录下启动hdfs,启动yarn。

shell 复制代码
sbin/start-dfs.sh
sbin/start-yarn.sh
//一条命令全部启动
sbin/start-all.sh

//关闭命令
sbin/stop-dfs.sh
sbin/stop-yarn.sh
//一条命令全部启动
sbin/stop-all.sh

3、输入命令检查节点。

2.4-6

4、附加检测

2.4-7

相关推荐
秋意钟2 小时前
Java注解
数据库
东方巴黎~Sunsiny3 小时前
当kafka消费的数据滞后1000条时,打印告警信息
分布式·kafka·linq
看山还是山,看水还是。3 小时前
Oracle的字符串函数
运维·数据库·安全·oracle
东方巴黎~Sunsiny3 小时前
⚙️ 如何调整重试策略以适应不同的业务需求?
java·数据库·kafka
sj11637394033 小时前
Kafka新节点加入集群操作指南
分布式·kafka
东方巴黎~Sunsiny3 小时前
kafka消费数据太慢了,给优化下
分布式·kafka·linq
daopuyun3 小时前
全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程
网络·数据库·安全·安全测试
綦枫Maple4 小时前
Jmeter基础篇(23)TPS和QPS的异同
数据库·jmeter·oracle
川石课堂软件测试4 小时前
性能测试|JMeter接口与性能测试项目
javascript·数据库·python·jmeter·单元测试