zoukankan      html  css  js  c++  java
  • hbase

    HBase是什么? 2004 谷歌发表的论文

      1 衍生:bigtable

    2 概念:数据库--》 底层hdfs ---> mysql ---》 存储量TB

    3 HBASE: 纯净:---》视图 事务 存储过程 语句  。。。。:

    4hbase: 读写速度快 --hdfs--》?

    5 hbase--> 存储格式: hbase byte[]----> 存储类型宽泛

    Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.

    Apache Hbase hadoop数据库一个分布式的,可扩展(hdfs)的大数据存储。(hbasehdfs的上层架构)

     Hbase 非关系型数据库: nosql:--->---》 面向列存储--

       Hbase ---> byte[] ----> 可以存储任意格式的数据---

       

    Use Apache HBase™ when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.

    当你需要对你的大量数据进行随机近实时读写时使用HbaseHBase的目标是在商用硬件集群上管理非常大的表,数十亿条目数(行)X数百万列,6稀疏表非关系型,结构化强()

    Hbase ---> 数据库---databases tables

    7

    Rowkey---> value --> n多个字段

    Mysql:

     Id()---> columns

      ---hbase -->

     Create table user,”info”,”address”

    Name  age ...

     Rowkey :默认是第一个列---> rowkey一般是有意义的而且是排序(字典顺序)

    列族: column family:

     列族下面不一定有列

      列族下面有列的话取决于rowkey对应的列有没有值

    hbase是面向列存储的:---》 弹性十足,空间使用率高

    HBasehive有什么区别? 

    Hive的定位是数据仓库,虽然也有增查,但其删改查对应的是整张表而不是单行数据,查询的延迟较高。其本质是更加方便的使用mr的威力来进行离线分析的一个数据分析工具。

    HBase的定位是hadoop的数据库,是一个典型的Nosql,所以HBase是用来在大量数据中进行低延迟的随机查询的。

    Hive:仓库---mr ---sql----->mr---》工具---hive--->处理结果----hbase

    Hbase存数据 ---hive--->处理结果----hbase  ----hdfs  ---> hive--hbase取数据:

    Hbase结构

    HBase下载

    HBase官网

    http://hbase.apache.org/

    HBase下载页面

    http://mirror.bit.edu.cn/apache/hbase/stable/

    我们的课程中使用Hbase最新稳定(stable)版,即hbase-1.1.2-bin.tar.gz

    HBase安装和基本使用

    安装前的规划

    集群中机器名:master、slave1、slave2

    单机方式安装

    注意单机方式安装时若安装所在的机器上有已经启动的zookeeper,要将其关闭因为HBase内部会启动一个单机版的zookeeper,一般两者都使用2181端口,可能会造成端口冲突。

    • 配置JAVA_HOME

    进入到Hbase的安装路径下的conf目录,在hbase-env.sh文件中配置JAVA_HOME信息(即打开JAVA_HOME那一行的注释并且根据本机真实的JAVA_HOME来进行配置可使用which java命令快速查询java所安装的位置

    export JAVA_HOME=/usr/jdk1.8.0_6

    export HADOOP_HOME=/root/Downloads/hadoop-2.6.5

    • 配置被hbase-site.xml文件

    进入到Hbase的安装路径下的conf目录,在hbase-site.xml文件中配置相关信息

    添加如下配置项:

    <property>

      <name>hbase.rootdir</name>

      <value>file:///home/bigdata/hbase/data</value>

    </property>

    <property>

      <name>hbase.zookeeper.property.dataDir</name>

      <value>/home/bigdata/zookeeper</value>

    </property>

    上述两个配置项中,hbase.rootdir指的是HBase用来存放数据的目录,这个目录不需要自己创建,HBase会帮助我们进行配置。如果你自己创建了这个目录,HBase会尝试将其做一个迁移,这可能不是你想要的结果。hbase.zookeeper.property.dataDir是用来存放HBase自己管理的zookeeper的属性数据信息的目录

    至此Hbase的单机安装配置就完毕了。

    Hbase shell基本使用

    启动HBase

    (单机方式为了演示方便,我们就不在/etc/profile中配置HBaseHome了)

    单机模式无需启动即可直接进入到HBaseshell,方式为:进入到Hbase的安装目录,执行如下命令:

    # ./bin/start-hbase.sh

    启动后可通过jps查看其进程如下图所示单机版启动后只有一个HMaster进程。

    连接HBase

    (单机方式为了演示方便,我们就不在/etc/profile配置HBaseHome了)

    进入到HBaseshell,方式为:进入到Hbase的安装目录,执行如下命令:

    # ./bin/hbase shell

    查看帮助信息

    HBase shell使用help命令

    hbase(main):001:0>help

    执行一些命令

    • 创建表(需要创建表名和列族)

    hbase(main):001:0> create 'test', 'cf'

    • 列出表信息

    hbase(main):001:0>list 'test'

    • 往表中添加数据

    hbase(main):001:0>put 'test', 'row1', 'cf:a', 'value1'

    hbase(main):002:0>put 'test', 'row2', 'cf:b', 'value2'

    hbase(main):003:0>put 'test', 'row3', 'cf:c', 'value3'

    • 扫描全表数据

    hbase(main):001:0> scan 'test'

    • 获取某行数据

    hbase(main):003:0>get 'test', 'row1'

    • 禁用表(在删除表之前要现将其禁用)

    hbase(main):001:0>disable 'test'

    • 启用表

    hbase(main):001:0>enable 'test'

    • 删除表

    hbase(main):001:0>drop 'test'

    退出HBase

    HBase shell中使用quit命令

    hbase(main):001:0>quit

    伪分布方式安装

    伪分布式方式安装时HBase的每个守护程序HMasterHRegionServer,和Zookeeper都将作为一个单独的进程运行在同一台机器上,并且会将数据的存储方式由Linux本地文件系统更换为HDFS分布式文件系统,这意味着需要有一个可用的hadoop集群。

    如果刚进行单机方式的安装我们需要将HBase关闭,伪分布式安装会指定一个新的目录来存放HBase中的数据,所以刚才创建的表等数据将会丢失。

    • 配置JAVA_HOME

    进入到Hbase的安装路径下的conf目录,在hbase-env.sh文件中配置JAVA_HOME信息(即打开JAVA_HOME那一行的注释并且根据本机真实的JAVA_HOME来进行配置可使用which java命令快速查询java所安装的位置

    export JAVA_HOME=/usr/jdk1.8.0_6

    • 配置被hbase-site.xml文件

    进入到Hbase的安装路径下的conf目录,在hbase-site.xml文件中配置相关信息

    添加如下信息,以保证使用伪分布方式:

    <!-- 配置HBase使用分布式方式-->

    <property>

        <name>hbase.cluster.distributed</name>

        <value>true</value>

    </property>

    将单机模式中存储数据的地址由Linux本地文件系统地址改为HDFS地址

    <!--hbase中的数据在HDFS上的位置-->

    <!

    注意,这里添加的是HDFSfs.defaultFS 配置项的值,这个值跟HDFS是否开启HA有关系

    -->

    <property>

      <name>hbase.rootdir</name>

      <value>hdfs://hadoop01:8020/hbase</value>

    </property>

    这个目录不需要自己创建,HBase会帮助我们进行配置。如果你自己创建了这个目录,HBase会尝试将其做一个迁移,这可能不是你想要的结果。

    保留存储zookeeper的配置

    <property>

      <name>hbase.zookeeper.property.dataDir</name>

      <value>/home/bigdata/zookeeper</value>

    </property>

    全分布式安装配置

    • 首先保证已有一个独立的zookeeper集群,并设置hbase不自己管理zookeeper(我们现在使用的版本中默认就是如此,可以不进行配置)
    • $HBASE_HOME/conf/hbase-env.sh中配置如下信息(若已有HBASE_MANAGES_ZK,将其改为false即可):

    export HBASE_MANAGES_ZK=false

    export JAVA_HOME=/usr/jdk1.8.0_60

    export HADOOP_HOME=/usr/hadoop

    • $HBASE_HOME/conf/regionservers中配置需要作为Hbase regin的机器名称hadoop配置文件中的slaves文件类似,本例中配置信息如下

    Hadoop01

    Hadoop02

    Hadoop03

    • $HBASE_HOME/conf/hbase-site.xml文件中配置如下信息

    <!-- 配置HBase使用分布式方式-->

    <property>

            <name>hbase.cluster.distributed</name>

            <value>true</value>

        </property>

    <!--hbase中的数据在HDFS上的位置(此处假设HDFS已经做了HA-->

    这个目录不需要自己创建,HBase会帮助我们进行配置。如果你自己创建了这个目录,HBase会尝试将其做一个迁移,这可能不是你想要的结果。

     

        <property>

            <name> hbase .rootdir</name>

            <value>hdfs://hadoop01:8020/hbase</value>

    </property>

    <!--hbase需要连接的zookeeper集群-->

        <property>

            <name>hbase.zookeeper.quorum</name>

            <value>hadoop01,hadoop02,hadoop03</value>

        </property>

    <!--hbase中保存zookeeper数据的地址-->

        <property>

            <name>hbase.zookeeper.property.data.dir</name>

            <value>/hbase/zk</value>

    </property>

    • hbase添加HADOOP_HOME信息

    由于HDFS做了高可用所以需要告知HBASE HADOOP_HOME

    就算在/etc/profile中已经配置了HADOOP_HOME,也还需要必须在hbase-env.sh 文件中添加HADOOP_HOME信息:

    export HADOOP_HOME=/home/bigdata/hadoop

    • 整体拷贝Hbase配置文件到regionservers中配置的其他机器上

    做好上述配置后hadoop类似需要将其拷贝到在reginservers中配置的其他机器上

     

    完全分布方式的启动和关闭

    全分布方式(集群方式)HBase因为依赖hadoopzookeeper,所以在启动HBase的时候,需要先保证这两者已经启动起来了再来启动HBase

    简便检测方法,使用jps命令检测各个组件的进程即可。

    启动HBase服务

    以下命令的执行前提是已经在系统中配置好了HBASE_HOME.

    master机器上执行如下命令(因为其上配置了从master到各个slavessh免密码登录):

    # sh start-hbase.sh

    启动后可通过jps命令查看HBase的进程信息

    • 普通的RegionServer
    • Hbasemaster

     

    HquorumPeer进程证明Hbase内部的Zookeeper已启动

    QuorumPeerMain进程证明外部的Zookeeper已启动

    一般都启动外部的、独立的Zookeeper

    进入HBase shell

    # hbase shell

    退出HBase shell

    hbase(main):001:0> quit

    关闭HBase服务

    # sh stop-hbase.sh

    Hbase webUI

    默认地址为http://master:16010/

    注意:0.9x极以前的版本中,webUI地址的默认端口为60010

    建议使用Chrome浏览器观看,IE有兼容问题。

    Hbase的经典使用场景

    HBase基本概念

    逻辑概念

    如下图所示是一个HBase的典型表HBase中通过多个条件(经常称之为坐标)来定位表中的数据:

    HBase表由多行组成。

    一行在HBase由行键和一个或多个列的值组成。如下图所示:

    行按字母顺序排序的行键存储,行健类似关系型数据库中的ID列。如下图所示:

    出于这个原因,行键的设计是非常重要的。目的是存储数据的方式接近彼此相关的行。常见的行键模式是一个网站域名。如果您的域名是行键,您应该将它们翻转后存储,(例如:org.apache.www, org.apache.mail, org.apache.jira)。这种方式,所有的Apache表中的域相互靠近,而不是基于子区域的第一个字母展开。

    列是表中的最基本元素,HBase的列包含一个列族和一个列限定符,列属于一个列族,列族属于一个行。列中的内容不需要指定类型,这也是与关系型数据不同的地方,也是HBase被称之为无类型的数据库的原因HBase的列与关系型数据库不同在于其含有版本的概念一个列的数据可以有多个历史版本,体现形式就是时间戳。

    列族

    在关系型数据库中没有列族的概念,在HBase中,列族是一行中一个或多个列的集合,就是一行数据的一部分。列族需要在表创建时就定义好,并且不能修改的太频繁,数量也不能太多,在以前的HBase实现中有少量已知的缺陷,导致列族的数量最多只能使用几十个。列族中的列的数量是没有限制的。

    列限定符

    如图所示列族中可以包含多个列,一个表中的某个列的定位方式就成为了meta:size 这种方式。我们就称之为列限定符,说白了,列限定符即指一个列族中的某个列。

    单元格

    一个单元格是行、列族和列限定符的结合,也就是说,通过这三个值(也称之为坐标)来唯一确定一个单元格。其中包含值和创建这个值的时间(即时间戳)。单元格中的值与关系型数据库不同的是,其如果没有值的话,就为空,什么也不写,也不占用底层物理存储。关系型数据中则需要存储null

    时间戳

    时间戳就是写入某个单元格中的数据时候的具体时间(从197011日开始到当前系统时间的一个毫秒值),用来表示一个单元格中的数据的新旧。

    数据模型

    逻辑模型:有序映射的映射集合

    存储模型列式存储

    物理模型:面向列族

      

    HBase增删改查内部流程

    HBase写流程和更新流程

    HBase读流程

    HBase删流程

    HBase shell

    详见HBaseShell常用命令.docx文档

    HBase java api

    使用eclipsh开发Hbase 程序

    先将Hbase 安装目录下的lib目录中的所有jar包导入到项目中

    只需创建普通的java应用程序即可需要在项目中创建conf目录并将hbase-site.Xml文件放进其中(此时hbase-site.xml文件中hbase.rootdir配置项的值应为hdfs://master:8020/hbase的形式,这种方式不影响使用HDFSHA,但是不能直接配置成HDFS中的HA的方式)。再通过Configure Build Pathconf目录添加为ClassFloder即可

    同时还需要在Windows中配置hosts文件,以方便访问Hbase服务器。

    具体语法

    详见代码和HBase JAVA API.docx文档

    HBaseHAbackupMaster

    HBaseHAHDFSHA类似,也是通过多Master程序来实现的,其中有一个Master为主提供服务的Master剩下的master对活跃的Master进行备份,习惯称之为backupMaster,也称之为slave类型的Master。主masterslave类型的master之间不需要通过其他额外的方式进行数据共享。当主Mater挂掉时会自动切换到slave类型的Master上(需要几秒钟时间)。(HBaseHA机制可以在HBasemaster已有数据时进行操作

    实现方式

    habseconf目录里添加backup-master文件其中填入需要作为Master的机器即可,在本例中,其内容如下(其中每个主机名占一行):

    master

    slave1

    注意实际操作发现在master机器上的conf目录下创建此文件即可无需在所有机器上都添加此文件同样的启动时需要在master机器上启动Hbase程序。

    如果不配置此文件,Hbase本身也是支持多Master的,只需要在多台机器上启动master即可。启动命令如下:

    # sh hbase-daemon.sh start master

    检测方式

    master机器上正常启动Hbase即可,启动后在slave1机器上通过jps命令可以看到slave1机器上也开启了master进程

    启动命令:

    # sh start-hbase.sh

    正常启动的web信息

    • Master机器上的web界面如下图所示:
    • Slave1机器上的web界面如下图所示

    杀死slave1上的master进程后的web信息

    使用如下两种方式皆可杀死slave1机器上的Hbase master进程

    1. 直接杀死进程

    Kill -9 master进程的端口号

    1. 使用hbase自带的命令关闭master进程

    sh hbase-deamon.sh stop master

    [0-2)  包前不包后

    64K

    Rk001

    ---

    Ke001

    ….

    Rk1000

    Rk001

    Rk1000

    Ke001

    Hbase能存储倾斜数据    

    Rowkey

    hbase最终目标: 数据稀疏、数据尽量倾斜

    不倾斜    

    尽量倾斜

    完全倾斜  

    关系型数据库

  • 相关阅读:
    作业
    Java总结
    十四周总结
    十二周课程总结
    十一周总结
    自我介绍
    第二次
    第十二周作业
    第九周作业
    第十三周课程总结
  • 原文地址:https://www.cnblogs.com/whywy/p/12321992.html
Copyright © 2011-2022 走看看