1. 集群搭建
1. 前置要求:
- HBASE 是用 Java 语言编写的, 所以在安装 HBASE 时, 必须安装 jdk
- 安装 HBASE 是必须有 hadoop 平台
- HBASE 和 jdk 的版本存在兼容性, 一定注意
jdk:
hadoop:
2. 集群规划:
3. 具体搭建:
1 上传安装包(hbase-1.2.6-bin.tar.gz)
2解压: tar zxvf hbase-1.2.6-bin.tar.gz -C /application/
3配置环境变量:
- export HBASE_HOME=/application/hbase-1.2.6
- export PATH=$PATH:$ZOOKEEPER_HOME/bin:$SQOOP_HOME/bin:$HBASE_HOME/bin
- source /etc/profie #刷新配置文件
- hbase version #查看是否配置成功
4修改 hbase 的配置文件
- cd /application/hbase-1.2.6/conf
- hbase-env.sh:
- export JAVA_HOME=/application/jdk1.8 #配置 jdk
- export HBASE_MANAGES_ZK=false #配置使用自己的 zookeeper
- #psHBASE 中必须依赖 zookeeper,zookeeper 作用是存储 HBASE 的寻址入口 HBASE 自带的是单机版的, 所有需要开启使用自己的
- hbase-site.xml:
- <configuration>
- <property>
- <!-- 指定 hbase 在 HDFS 上存储的路径 -->
- <name>hbase.rootdir</name>
- <value>hdfs://zzy/hbase</value>
- </property>
- <property>
- <!-- 指定 hbase 是分布式的 -->
- <name>hbase.cluster.distributed</name>
- <value>true</value>
- </property>
- <property>
- <!-- 指定 zk 的地址, 多个用 "," 分割 -->
- <name>hbase.zookeeper.quorum</name>
- <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
- </property>
- </configuration>
- regionservers:
- hadoop01
- hadoop02
- hadoop03
- backup-masters(自行创建):
- # 配置备份主节点的节点
- hadoop02
5要把 hadoop 的 hdfs-site.xml 和 core-site.xml 放到 hbase-1.2.6/conf 下
因为 hadoop 集群是 HA 模式, 所以需要配置:
- cp /application/hadoop-2.7.6/etc/hadoop/core-site.xml .
- cp /application/hadoop-2.7.6/etc/hadoop/hdfs-site.xml .
6分发安装到各节点
- cd /application/
- scp -r hbase-1.2.6 hadoop02:$PWD
- scp -r hbase-1.2.6 hadoop03:$PWD
7时间同步:
HBase 集群对于时间的同步要求的比 HDFS 严格, 所以, 集群启动之前千万记住要进行时间同步, 要求相差不要超过 30s. 在定时任务中配置定时更新时间.
4. 启动集群:
1 先在每一个节点 zookeeper 集群: zkServer.sh start
2启动 hdfs 集群: start-dfs.sh
3启动 hbase:start-hbase.sh(启动) / stop-hbase.sh(关闭) 最好在主节点启动, 在哪个节点启动哪个节点就是 hmaster.
4 检测是否正常启动: jps
web 界面访问: http://HBASE 主节点: 16010 http://xn--hbase-oq1hk47rxz3a:16010/
注意: 如果有节点相应的进程没有启动, 那么可以手动启动:
- hbase-daemon.sh start master
- hbase-daemon.sh start regionserver
2. 集群架构
在 HBASE 集群中: 有多个主(hmaster), 多个从(RegionServer), 每一个从节点中存储的是多个 Region, 每一个 Region, 是 HBASE 一张表中分出来的(默认的 Region 大小为 10G).
集群角色介绍:
1. region:
是 HBASE 将一个表中的所有数据按照 RowKey 的不同范围进行切割的逻辑单元, 每一个 region 负责一定范围数据的读写访问. Region 由 RegionServer 负责管理. HBASE 中的 region 的概念就和 hdfs 中的数据块的概念差不多. Region 是 HBase 表切分出来的一个分片. Region 的大小在 1.x 版本的时候是 1G, 在 2.X 版本的时候是 10G.
Region 的工作机制:
当客户端发送命令 (delete/put) 的时候, region 接收到请求的时候, 首先会将数据更新到内存中, 同时将操作记录到日志(追加), 不论做的是什么操作, 就会记录到操作日志中, 为了进行数据恢复, 因为 region 接收请求的时候, 只是将数据同步到内存, 如果节点一宕机则数据丢失, 所以通过日志的方式进行数据恢复(或者说是持久化). 当然这个日志记录到一定大小的时候会进行切分, 切分出来的叫 Hfile, 最后到有很多 Hfile 的时候, 会进行日志合并, 会将这些 Hfile 合并一个 storeFile, 在进行合并的时候, 会将日志中的 delete 和 put 进行抵消删除(即一个 put 操作, 如果有一个对应有一个 delete 操作, 则这两条记录抵消, 在合并的时候不会记录), 最终合并出来的 storefile 中就会只有 put 操作而没有 delete 操作.
2. hmaster:
HBASE 的主节点, 负责整个集群的状态感知, 负载分配, 负责用户表的元数据 (schema)管理(可以配置多个用来实现 HA), 只有 hmaster 才有权利去修改元数据.
HBase 的 HMaster 其实就算是宕机一段时间也可以正常对外提供服务的, 因为在 HMaster 在宕机的时候, 集群仍然可以进行查询但是不能进行读写.
HMaster 的负载: 当第一次建立表的时候, 只有一个 Region, 然后当 region 的值超过 1G 的时候, 此时 HBASE 的 HMaster 会将 region 进行拆分(如果是 2G, 一份为二, 每一个是 1G), 拆分后的 region 可能不存在一个节点上. 由于 HBASE 是搭建在 hadoop 之上的, 所以 region 的副本会在 hdfs 操作.
hmaster 的节点的上下线感知: 当如果有一台 Reginaservers 宕机了, hmaster 会自动将这个宕机节点中存储的 region 通过其他的副本在另外的节点上复制出来(基于 hdfs 的副本), 当宕机的节点重新恢复的时候, hmaster 又会进行负载, 保证每一个 Reginaservers 中的 region 的个数大致相同,(只能保证集群的 region 的个数进行负载, 如果 region 的大小不同, 不能根据数据的大小进行负载).
3.RegionServer:
HBase 中真正负责管理 Region 的服务器, 也就是负责为客户端进行表数据读 写的服务器. 每一台 RegionServer 会管理很多的 Region, 一个 RegionServer 上面管理的所有 的 region 不属于同一张表. 负责 Region 的拆分, 负责和底层的 HDFS 的存储交互, 负责 StoreFile 的合并.
4. ZooKeeper
整个 HBase 中的主从节点协调, 元数据的入口, 主节点之间的选举, 集群节点 之间的上下线感知...... 都是通过 ZooKeeper 来实现
5. Client
Client 包含了访问 HBase 的接口, 另外 Client 还维护了对应的 Cache 来加速 HBase 的 访问, 比如 Cache 的. META. 元数据的信息.(缓存上一个查询的 rowkey 的具体位置, 方便快速一次查询).
来源: http://www.bubuko.com/infodetail-2921507.html