• Hbase教案


    HBase是什么?

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

    Apache Hbase hadoop数据库一个分布式的,可扩展的大数据存储。

    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 -- a top 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数百万列,

    稀疏表,表,HBase是一个模仿Gootable’s Bigtable开源的分布式的版本化的非关系型数据库

    Google’s Bigtable是一个由Chang等人创建的一个结构化的分布式存储系统正如Bigtable利用谷歌的分布式文件存储系统,Apache HBase HadoopHDFS上提供类似Bigtable的功能

    关系型数据库

    Mysql  oracle  sqlServer    web  事务  type  结构化

    Curd

    存储不了大数据  结构化不严谨的存储不了

    爬虫:爬取网页数据  java ---->http--->www.baidu.com----> <html></html>

    ---><div id=3>02 06 32 21 12 05</div> ---->保存在数据库中---->web

    页面形式  mp3  mp4  pic

    mongodb

    Mysql   innodb/myisam驱动

    Id  name age  sex ....

    1  zhangsan 12  null

    2   

    3              nan

    Document文档形式---->mongodb进行数据存储  ----->文档存储 ---->都会借助内存

    Hbase大数据专用数据库  没有格式int  varchar ....

    Byte[] 半结构化存储 文档形式存储

    1idzhangsan(name)  30(age)  sex(woman)

    1(id)  30(age)

    Sex(woman)

    Video(xxx.avi)

    Document   hbase ==   nosql ==not only sql === redis memcache mongodb

    非结构化的数据(爬虫)  网页数据

    Mysql

    Centent  varchar(2000)   

    Hbase   mongodb  redis   .....

    hbase纯数据库  curd  大量数据存储  查询速度特别快  高可靠(hdfs

    Hive区别

    Hbase存储数据的 hdfs

    Hive存储   hdfs  

    Hive数据处理(mr)  hive存储数据只能是存储,而且有模板的概念

    Hbase就是用来做数据存储的

    Curd  速度  存储量   数据结构是hbase本身的

    数据清洗的结果

    Hbase byte【】

    类似于文档,而且没有数据格式

    User  Userid(byte[])  username  password

    Select * from xx

    Mysql oracle sqlServer.... sql

    Nosql  redis memcache  mongodb

    hbasehive的关系?  hive是数据仓库,只是通过mr这个超级工具进行数据分析

    Hbase是真正的数据库 可以对每条数据进行curd  hbase不能进行数据处理

    Hbase的使用  存储比如格式化不严谨的数据   收集的数据会保存在hdfs

    Hdfs中的数据要进行清洗  ---  hbase中  ----  mr

    注:Hbase也是常见的Nosql之一。Rowkey

    随机实时 mysql 毫秒

    随机近实时 hbase 1秒

    离线读取 mr hive 20 分钟

    RDBMS:关系型数据库的特点存储结构化数据、文本存储存储小1G以下或左右

    一月1pb—   查询 数据类型 varchar 、int、行存储主键

    rowkey 1,sdf,sfasdfsdf   , 2  ,3

    低延时 存储容量多:Big Table   - C++、Google山寨:hadoophdfsmapreduce

    hbase特点:表结构(结构化)容量大(11tb    几十亿   上千万列)数据类型:

    二进制  列族:列名称

    rowkey   sdf,sfasdfsdf    ,   ,

    rowkey 1  sdf,sfasdfsdf   2,   2,2

    rowkey 1  sdf,sfasdfsdf   3,   2,2

    rowkey 1  sdf,sfasdfsdf   4,   2,2

    rowkey 1  sdf,sfasdfsdf   5,   2,2

    rowkey 1  sdf,sfasdfsdf   6,   2,2

    version  timestamp

    rowkey 1  sdf,sfasdfsdf   2,   2,2 1  sdf,sfasdfsdf   2,   2,2

    结构化数据

    分布式文件存储系统:HDFSS3 任何类型文件、块存储(128Mb分布式、有副本(个)对数据没有任何要求不适合实时查询  查询特点 高延时 离线、数据类型 字符串

    ,sdf,sfasdfsdf    ,   ,

    关键字:稀疏    

    什么是nosqlHbase not only sql

    Nosql的定义

    NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,具体来说就是跟关系型数据库有些类似(查询低延迟),

    但同时能够存储的数据类型却更加灵活,常见的有列式存储和文档存储等,为了跟关系型数据库加以区分,

    称之为非关系型的数据库。HbaseNosql的一个种类,其特点是列式存储。

    出现的原因

    随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的web2.0纯动态网站已经显得力不从心,

    暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

    互联网+

    普通+物联网

    --数据量产生巨大

    Nosql的作用

    Content varchar(2000)  text

    NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

    常见的nosql数据库类型及其代表

    非关系型数据库——列存储(HBase

    非关系型数据库——文档型存储(MongoDb)bson  

    {id:3,content:{pic:xxx,info:{work:xxx,educate:xxxx,marry:{1:xxx,2:xxxx}}}}

    非关系型数据库——内存式存储redisk-v 只能存储小数据 get name

    非关系型数据库——图形模型(GraphX)

    HBase能用来干什么?

    存储大量结果数据,并提供低延迟的随机查询。说的通俗一些,就是一个超级版的数据库,相比较与mysqlpostgresqloraclesqlserver等关系型数据库而言

    ,能够存储的数据量更大(比关系型数据库大很多很多),同时查询延迟相比较与其他hadoop产品(pighive)要低。

    HBasehive有什么区别?

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

    HBase的定位是hadoop的数据库,是一个典型的Nosql,所以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

    • 配置被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>/home/bigdata/hbase/var/zookeeper</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进程的端口号

     

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

    sh hbase-deamon.sh stop master

     

    [0-2)  包前不包后

    64K

     

    Rk001

    ---

    Ke001

    ….

    Rk1000

    Rk001

    Rk1000

    Ke001

    Hbase能存储倾斜数据    

    Rowkey

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

    不倾斜    

    尽量倾斜

    完全倾斜  

    关系型数据库

     

  • 相关阅读:
    DAO模式多表联查
    使用ADO.NET访问数据库
    连接查询和分组查询
    模糊查询和聚合函数
    poj 1220 NUMBER BASE CONVERSION
    poj 1964 City Game
    Odd number problem
    POJ 2983 M × N Puzzle
    L O V E
    【Mybatis】【3】处理大于号小于号及其他特殊字符
  • 原文地址:https://www.cnblogs.com/JBLi/p/10869874.html
Copyright © 2020-2023  润新知