浅谈Hbase以及部署使用

一、Hbase简介
1.1
Apache Hbase 是Hadoop数据库,一个分布式、可伸缩的大数据存储。
1.2 Hbase的特点
大:一个表可以有数十亿行,上百万列。
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列;
面向列:面向列(族)的 存储和权限控制,列(族)独立检索;
稀疏:对于空的列,并不占用存储空间,表可以设计的非常稀疏;
数据多版本:每个单元的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
数据类型单一: Hbase 中的数据都是字符串,没有类型。
二、Hbase 的角色
2.1 Hmaster 功能:

  1. 监控RegionServer
    2.处理RegionServer 的故障转移
    3.处理数据的变更
    4.处理region的分配或转移
    5.在空闲时间进行数据的负载均衡
    6.通过Zookeeper发布自己的位置给客户端
    2.2 RegionServer
    功能:
    1.负责存储Hbase的实际数据
    2.处理分配给他的Region
    3.刷新缓存到HDFS
    4.维护Hlog
    5.执行压缩
    6.负责处理Region分片
    组件:
    1.Write-Ahead logs
    Hbase 的修改记录,当时Hbase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间。但把数据保存在内存中可能有更高的概率引起熟路丢失,为了解决该问题,数据会先写到一个 Write-Ahead logs的文件中,然后再写入内存中。所以系统出现故障的时候,数据可以通过这个日志文件重建。
    2.Hfile
    这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。
    3.Store
    Hflie存储在Store中,一个Store对应HBase表中的一个列族。
    4.MemStore
    是指内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer 会在内存中存储键值对。
    5.Region
    Hbase表的分片,Hbase表会根据RewKey 值被切分成不同的region存储在RegionServer中,在一个RegionServer 中可以有多个不同的region。
    2.3 架构图
    在这里插入图片描述
    读数据流程:
    1)HRegionServer 保存着 meta 表以及表数据,要访问表数据,首先 Client 先去访问 zookeeper ,从 zookeeper 里面获取 meta 表所在的位置信息,即找到这个 meta 表在哪个 HRegionServer 上保存着。
    2)接着Client 通过刚才获取到的HRegionServer 的 IP 来访问meta 表所在的 HRegionServer, 从而读取到 Meta,进而获取到 Meta 表中存放的元数据。
    3)Client 通过元数据中存储的信息,访问对应的 HRegionServer,然后扫描所在 HRegionServer 的 Memstore 和 Storefile 来查询数据。
    最后 HRegionServer 把查询的数据响应给 Client
    写数据流程:
    1)Client 也是先访问 zookeeper,找到 Meta 表,并获取Meta 表信息。
    2)确定当前将要写入的数据所对应的 RegionServer 服务器和 Region。
    3)Client 向该 RegionServer 服务器发起写入数据请求,然后 RegionServer 收到请求并响应。
    4)Client 先把数据写入到 Hlog ,防止数据丢失。
    5)然后将数据写入到 Memstore.
    6)如果 Hlog 和 Memstore 均写入成功,则这条数据写入成功。在此过程中,如果 Memstore 到达阈值,会把 Memstore 中的数据 flush 到 StoreFile 中。
    7)当 StoreFile 越来越多,会触发 Compact 合并操作,把过多的Storefile 合并成一个大的StoreFile 。当StoreFile 越来越大,Region 也会越来越大,达到阈值后,会触发 Split 操作,将 Region 一分为二。
    三、Hbase 部署与使用
    3.1部署
    1.Zookeeper正常部署
    首先保证Zookeeper集群的正常部署,并且启动:
    #:/usr/local/zookeeper-3.1.0/bin/zkServer.sh start
    2.Hadoop正常部署
    Hadoop集群的正常部署并且启动:
    #:/usr/local/hadoop-2.7.2/bin/start-dfs.sh
    #:/usr/local/hadoop-2.7.2/bin/start-yarn.sh
    3.Hbase的解压
    #:tar -zxvf hbase-1.3.1-bin.tar.gz -C /usr/local
    4.Hbase的配置文件
    hbase-env.sh 修改内容:
export JAVA_HOME=/usr/local/jdk1.8.0_121
export HBASE_MANAGES_ZK=false

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>/usr/local/zookeeper-3.1.0/zkData</value>
</property>
</configuration>

regionservers:

hadoop01
hadoop02
hadoop03

3.2 Hbase 需要依赖的jar包
由于Habse需要依赖于Hadoop,所以替换Hbase的lib 的目录下的 jar 包,以解决兼容问题:
1.删除原有的jar包

rm -rf  /usr/lcoal/hbase-1.3.1/lib/hadoop-*
rm -rf /usr/local/hbase-1.3.1/lib/zookeeper-3.4.6.jar

2.拷贝新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
hadoop-yarn-server-tests-2.7.2.jar
hadoop-yarn-server-web-proxy-2.7.2.jar
zookeeper-3.4.5.jar

特别提示:这些 jar 包的对应版本应替换成你目前使用的 hadoop 版本,具体情况具体分析。
3.3 Hbase软连接Hadoop配置

 ln -s  /usr/local/hadoop-2.7.2/etc/hadoop/core-site.xml
/usr/lcoal/hbase-1.3.1/conf/core-site.xml

 ln -s /usr/local/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
/usr/local/hbase-1.3.1/conf/hdfs-site.xml

猜你喜欢

转载自blog.csdn.net/weixin_43646034/article/details/84426067