1 Zookeeper

https://zookeeper.apache.org/

学习链接

1.1 Zookeeper 概述

Zookeeper 是一个分布式协调服务的开源框架。 主要用来解决分布式集群中应用系统的一致性问题。
例如怎样避免同时操作同一数据造成脏读的问题。

1.2 Zookeeper 架构

  1. Leader:
    Zookeeper 集群工作的核心事务请求(写操作) 的唯一调度和处理者,保证集群事务处理的顺序性;集群内部各个服务器的调度者。
    对于 create, setData, delete 等有写操作的请求,则需要统一转发给leader 处理, leader 需要决定编号、执行操作,这个过程称为一个事务。
  2. Follower:
    处理客户端非事务(读操作) 请求,转发事务请求给 Leader;
    参与集群 Leader 选举投票 2n-1台可以做集群投票。
    此外,针对访问量比较大的 zookeeper 集群, 还可新增观察者角色。
  3. Observer:

观察者角色,观察 Zookeeper 集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给 Leader 服务器进行处理。
不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。
题外话:说白了就是增加并发的读请求

1.3 zookeeper的特性

  1. 全局数据一致:每个server 保存一份相同的数据副本, client 无论连接到哪个 server,展示的数据都是一致的,这是最重要的特征;
  2. 可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。
  3. 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 Server 上消息 a 都将在消息b 前被发布;偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布, a 必将排在 b 前面。
  4. 数据更新原子性:一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态;
  5. 实时性: Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。

1.4 zookeeper 集群搭建

上传解压

cd /opt/softwares
tar -zxvf zookeeper-3.4.8.tar.gz -C ../servers/

修改配置文件

第一台机器修改

cd /opt/servers/zookeeper-3.4.8/conf/
mv zoo_sample.cfg zoo.cfg
mkdir -p /opt/servers/zookeeper-3.4.8/zkdatas/  #zkdatas 创建myid
vim  zoo.cfg
dataDir=/opt/servers/zookeeper-3.4.8/zkdatas

server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888

zookeeper配置了事务和快照日志分离未生效_服务器


zookeeper配置了事务和快照日志分离未生效_hadoop_02

分发到 02 03 节点

scp -r zookeeper-3.4.8/ hadoop02:$PWD
scp -r zookeeper-3.4.8/ hadoop03:$PWD

修改02,03节点的myid
02 节点

cd /opt/servers/zookeeper-3.4.8/zkdatas/
echo 2 > myid

03 节点

cd /opt/servers/zookeeper-3.4.8/zkdatas/
echo 3 > myid

启动zookeeper服务

/opt/servers/zookeeper-3.4.8/bin/zkServer.sh start
# 查看启动状态
/opt/servers/zookeeper-3.4.8/bin/zkServer.sh  status

zookeeper配置了事务和快照日志分离未生效_服务器_03

1.5 shell 操作

zkCli.sh 进入命令行

  1. -s顺序节点
  2. zookeeper配置了事务和快照日志分离未生效_服务器_04

  3. -e 临时节点
    退出重新连接就消失了
create -e /tmp "hello zk"
  1. 永久节点
create /test "aaa"
  1. 获取节点
    get /
  2. 更新节点
  3. zookeeper配置了事务和快照日志分离未生效_服务器_05

  4. 删除节点
    delete

rmr

  1. quit 退出

1.6 zoopper 的数据模型

2 HBase

学习链接

列存储 ,实时读写,nosql数据库(not only sql)
mysql 表级一行一行的存储

它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。

Hbase 中支持的数据类型:byte[ ]

特点
大:
面向列:
稀疏:

2.1 HBase与Hadoop的关系

HDFS

可修改

简要特征

  1. 海量存储
  2. 列式存储
  3. 极易拓展
  4. 高并发
  5. 稀疏

2.2 HBase的基础架构

HMaster

RegionServer

2.3 环境集群搭建

注意事项:HBase强依赖zookeeper和hadoop,安装HBase之前一定要保证zookeeper和hadoop启动成功,且服务正常运行

下载解压

cd /opt/softwares/

tar -xvzf hbase-2.2.4-bin.tar.gz -C ../servers/

修改配置文件

cd /opt/servers/hbase-2.2.4/conf
hbase-env.sh

修改两个位置
内容太多时可在非编辑模式下 / 搜索内容 来快速找到

export JAVA_HOME=/opt/servers/jdk1.8.0_65
export HBASE_MANAGES_ZK=false

echo $JAVA_HOME :查看jdk 安装路径

zookeeper配置了事务和快照日志分离未生效_zookeeper_06

hbase-site.xml
<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hadoop01:8020/hbase</value>  
        </property>

        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>

   <!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
        <property>
                <name>hbase.master.port</name>
                <value>16000</value>
        </property>

        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
        </property>

        <property>
                <name>hbase.zookeeper.property.dataDir</name>
         		<value>/opt/servers/zookeeper-3.4.8/zkdatas</value>
        </property>
</configuration>
regionservers

主要配置从节点

hadoop01
hadoop02
hadoop03
创建back-masters配置文件,实现HMaster的高可用
vim backup-masters
hadoop02
安装包分发到其他节点
cd /opt/servers/

scp -r hbase-2.2.4/ hadoop02:$PWD

scp -r hbase-2.2.4/ hadoop03:$PWD
添加HBASE_HOME的环境变量

可先在第一台机器添加,在分发到其他节点

vim /etc/profile
export HBASE_HOME=/opt/servers/hbase-2.2.4
export PATH=:$HBASE_HOME/bin:$PATH

zookeeper配置了事务和快照日志分离未生效_hadoop_07

环境生效

三个节点的配置立即生效

source /etc/profile

HBase 集群启动

在第一台机器执行如下命令启动

start-hbase.sh

我们也可以执行以下命令单节点进行启动

启动HMaster命令

bin/hbase-daemon.sh start master

启动HRegionServer命令

bin/hbase-daemon.sh start regionserver

zookeeper配置了事务和快照日志分离未生效_hadoop_08

可在浏览器查看

hadoop01:16010

hadoop02:16010

zookeeper配置了事务和快照日志分离未生效_hadoop_09


zookeeper配置了事务和快照日志分离未生效_zookeeper_10

zookeeper配置了事务和快照日志分离未生效_服务器_11