HBase的安装和使用

本文详细介绍了HBase的起源、角色以及架构,包括HMaster和RegionServer的功能。随后,逐步讲解了HBase的部署步骤,如Zookeeper、Hadoop的部署,以及配置、启动、监控等。此外,还涵盖了HBase的简单使用、读写流程、Java API操作、MapReduce集成和Hive的对比。最后,介绍了常用Shell操作、数据备份恢复、节点管理以及版本确界等内容,为HBase的实践应用提供了全面指导。
摘要由CSDN通过智能技术生成

HBaes介绍

1.1、HBase的起源

HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储。
官方网站:http://hbase.apache.org
– 2006年Google发表BigTable白皮书。
– 2006年开始开发HBase。
– 2008年北京成功开奥运会,程序员默默地将HBase弄成了Hadoop的子项目。
– 2010年HBase成为Apache顶级项目。
– 现在很多公司二次开发出了很多发行版本,你也开始使用了。

1.2、HBase的角色

1.2.1、HMaster

功能:

  1. 监控RegionServer
  2. 处理RegionServer故障转移
  3. 处理元数据的变更
  4. 处理region的分配或移除
  5. 在空闲时间进行数据的负载均衡
  6. 通过Zookeeper发布自己的位置给客户端

1.2.2、RegionServer

功能:

  1. 负责存储HBase的实际数据
  2. 处理分配给它的Region
  3. 刷新缓存到HDFS
  4. 维护HLog
  5. 执行压缩
  6. 负责处理Region分片

组件:

  1. Write-Ahead logs
    HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
  2. HFile
    这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。
  3. Store
    HFile存储在Store中,一个Store对应HBase表中的一个列族。
  4. MemStore
    顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。
  5. Region
    Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。

1.3、HBase的架构

HBase一种是作为存储的分布式文件系统,另一种是作为数据处理模型的MR框架。因为日常开发人员比较熟练的是结构化的数据进行处理,但是在HDFS直接存储的文件往往不具有结构化,所以催生出了HBase在HDFS上的操作。如果需要查询数据,只需要通过键值便可以成功访问。
架构图如下图所示:
在这里插入图片描述
HBase内置有Zookeeper,但一般我们会有其他的Zookeeper集群来监管master和regionserver,Zookeeper通过选举,保证任何时候,集群中只有一个活跃的HMaster,HMaster与HRegionServer 启动时会向ZooKeeper注册,存储所有HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认情况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。
一个RegionServer可以包含多个HRegion,每个RegionServer维护一个HLog,和多个HFiles以及其对应的MemStore。RegionServer运行于DataNode上,数量可以与DatNode数量一致,请参考如下架构图:
在这里插入图片描述

HBase部署与使用

2.1、部署

2.1.1、Zookeeper正常部署

首先保证Zookeeper集群的正常部署,并启动之:

$ ~/modules/zookeeper-3.4.5/bin/zkServer.sh start

2.1.2、Hadoop正常部署

Hadoop集群的正常部署并启动:

$ ~/modules/hadoop-2.7.2/sbin/start-dfs.sh
$ ~/modules/hadoop-2.7.2/sbin/start-yarn.sh

2.1.3、HBase的解压

解压HBase到指定目录:

$ tar -zxf ~/softwares/installations/hbase-1.3.1-bin.tar.gz -C ~/modules/

2.1.4、HBase的配置文件

需要修改HBase对应的配置文件。
hbase-env.sh修改内容:

export JAVA_HOME=/home/admin/modules/jdk1.8.0_121
export HBASE_MANAGES_ZK=false

hbase-site.xml修改内容:

<configuration>
	<property>     
		<name>hbase.rootdir</name>     
		<value>hdfs://linux01: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>linux01:2181,linux02:2181,linux03:2181</value>
	</property>

	<property>   
		<name>hbase.zookeeper.property.dataDir</name>
	 <value>/home/admin/modules/zookeeper-3.4.5/zkData</value>
	</property>
</configuration>

regionservers:

linux01
linux02
linux03

2.1.5、HBase需要依赖的Jar包

由于HBase需要依赖Hadoop,所以替换HBase的lib目录下的jar包,以解决兼容问题:

  1. 删除原有的jar:
$ rm -rf /home/admin/modules/hbase-1.3.1/lib/hadoop-*
$ rm -rf /home/admin/modules/hbase-1.3.1/lib/zookeeper-3.4.6.jar
  1. 拷贝新jar,涉及的jar有:
hadoop-annotations-2.7.2.jar
hadoop-auth-2.7.2.jar
hadoop-client-2.7.2.jar
hadoop-common-2.7.2.jar
hadoop-hdfs-2.7.2.jar
hadoop-mapreduce-client-app-2.7.2.jar
hadoop-mapreduce-client-common-2.7.2.jar
hadoop-mapreduce-client-core-2.7.2.jar
hadoop-mapreduce-client-hs-2.7.2.jar
hadoop-mapreduce-client-hs-plugins-2.7.2.jar
hadoop-mapreduce-client-jobclient-2.7.2.jar
hadoop-mapreduce-client-jobclient-2.7.2-tests.jar
hadoop-mapreduce-client-shuffle-2.7.2.jar
hadoop-yarn-api-2.7.2.jar
hadoop-yarn-applications-distributedshell-2.7.2.jar
hadoop-yarn-applications-unmanaged-am-launcher-2.7.2.jar
hadoop-yarn-client-2.7.2.jar
hadoop-yarn-common-2.7.2.jar
hadoop-yarn-server-applicationhistoryservice-2.7.2.jar
hadoop-yarn-server-common-2.7.2.jar
hadoop-yarn-server-nodemanager-2.7.2.jar
hadoop-yarn-server-resourcemanager-2.7.2.jar
hadoop-yarn-server-tests-2.7.2.jar
hadoop-yarn-server-web-proxy-2.7.2.jar
zookeeper-3.4.5.jar

尖叫提示:这些jar包的对应版本应替换成你目前使用的hadoop版本,具体情况具体分析。
查找jar包举例:

$ find /home/admin/modules/hadoop-2.7.2/ -name hadoop-annotations*

然后将找到的jar包复制到HBase的lib目录下即可。

2.1.6、HBase软连接Hadoop配置

$ ln -s ~/modules/hadoop-2.7.2/etc/hadoop/core-site.xml ~/modules/hbase-1.3.1/conf/core-site.xml
$ ln -s ~/modules/hadoop-2.7.2/etc/hadoop/hdfs-site.xml ~/modules/hbase-1.3.1/conf/hdfs-site.xml

2.1.7、HBase远程scp到其他集群

$ scp -r /home/admin/modules/hbase-1.3.1/ linux02:/home/admin/modules/
$ scp -r /home/admin/modules/hbase-1.3.1/ linux03:/home/admin/modules/

2.1.8、HBase服务的启动

启动方式1:

$ bin/hbase-daemon.sh start master
$ bin/hbase-daemon.sh start regionserver

尖叫提示:如果集群之间的节点时间不同步,会导致regionserver无法启动,抛出ClockOutOfSyncException异常。
修复提示:
a、同步时间服务
b、属性:hbase.master.maxclockskew设置更大的值

<property>
        <name>hbase.master.maxclockskew</name>
        <value>180000</value>
        <description>Time difference of regionserver from master</description>
 </property>

启动方式2:

$ bin/start-hbase.sh

对应的停止服务:

$ bin/stop-hbase.sh

尖叫提示:如果使用的是JDK8以上版本,则应在hbase-evn.sh中移除“HBASE_MASTER_OPTS”和“HBASE_REGIONSERVER_OPTS”配置。

2.1.9、查看Hbse页面

启动成功后,可以通过“host:port”的方式来访问HBase管理页面,例如:

http://linux01:16010 

2.2、简单使用

2.2.1、基本操作

  1. 进入HBase客户端命令行
$ bin/hbase shell
  1. 查看帮助命令
hbase(main)> help
  1. 查看当前数据库中有哪些表
hbase(main)> list

2.2.2、表的操作

  1. 创建表
hbase(main)> create 'student','info'
  1. 插入数据到表
hbase(main) > put 'student','1001','info:name','Thomas'
hbase(main) > put 'student','1001','info:sex','male'
hbase(main) > put 'student','1001','info:age','18'
hbase(main) > put 'student','1002','info:name','Janna'
hbase(main) > put 'student','1002','info:sex','female'
hbase(main) > put 'student','1002','info:age','20'
  1. 扫描查看表数据
hbase(main) > scan 'student'
hbase(main) > scan 'student',{
   STARTROW => '1001', STOPROW  => '1001'}
hbase(main) > scan 'student',{
   STARTROW => '1001'}
  1. 查看表结构
hbase(main):012:0> describe ‘student’
  1. 更新指定字段的数据
hbase(main) > put 'student','1001','info:name','Nick'
hbase(main) > put 'student','1001','info:age','100'
  1. 查看“指定行”或“指定列族:列”的数据
hbase(main) > get 'student','1001'
hbase(main) > get 'student','1001','info:name'
  1. 删除数据
    删除某rowkey的全部数据:
hbase(main) > deleteall 'student','1001'

删除某rowkey的某一列数据:

hbase(main) > delete 'student','1002','info:sex'
  1. 清空表数据
hbase(main) > truncate 'student'

尖叫提示:清空表的操作顺序为先disable,然后再truncating。

  1. 删除表
    首先需要先让该表为disable状态:
hbase(main) > disable 'student'
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值