温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HBase学习小节v1.2

发布时间:2020-06-16 23:52:55 来源:网络 阅读:970 作者:退而结网ZP 栏目:关系型数据库

1. HBase

    一个构建在HDFS上的高可靠、高性能、面向列、可伸缩、分布式列存储开源数据库,主要用于存储海量数据,同时使用mapreduce处理HBase中的数据,利用zookeeper作为协同服务。读写相对简单,不支持条件查询

2. HBase与HDFS对比

    都具有良好的容错性和扩展性

    HDFS适合批处理场景,但是不支持数据随即查找,不适合增量数据处理,不支持数据更新

3. HBase的特点:

    海量数据:可支持上百万列,分成多个region

    无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列

    面向列存储:面向列的存储和权限控制,列独立检索

    记录稀疏:列为空(NULL),并不占用存储空间

    数据多版本:每个单元的数据可以有多个版本,通过timestamp区分

    数据类型单一:所有数据都是字符串

4. HBase结构组成

    Row key:

        Byte array

        表中每条记录的“主键”

        方便快速查找

    Timestamp:

        每次数据操作对应的时间戳,看作数据的version number

    Column Family:

        拥有一个名称(string)

        包含一个或者多个相关列(Column)

    Column:

    value:

5. 支持的操作

    所有操作基于rowkey的

    支持CRUD(create、read、update、delete)以及put、get、multiput、scan

    没有内置join操作,可使用MapReduce实现

6. HBase为每个值维护了多级索引,即<key,column family,column name,timestamp>

    Table中的所有行都按照row key的字典序排列,在行的方向上分割为多个region,region是HBase中分布式存储与负载均衡的最小单元,不同的Region分布到不同RegionServer上;

    region增大到一个阀值的时候,region就会分为两个新的region,之后会有越来越多的region

    region由一个或多个store组成,每个store保存一个columns family

    每个store又由一个memStore和0至多个StoreFile组成;

    memStore存储在内存中,StoreFile存储在HDFS上

7. HBase的基本组件

    Client:通过RPC与HMaster及HRegionServer进行通信,并维护cache加快对HBase的访问

    Zookeeper:

        保证集群中总是存在一个HMaster

        存储所有Region的寻址入口

        实时监控Region server的上线和下线信息,并实时通知给Master

        存储HBase的schema和table元数据

    HMaster:

        为Region server分配region

        复杂Region server的负载均衡

        发现失效的Region server并重新分配其上的region

        管理用户对table的增删改查操作

    HRegionServer:

        维护region,处理对region的I/O请求

        负责切分在运行过程中变得过大的region

8.HBase容错机制

    HMaster:zookeeper重新选择一个新的Master

        无Master过程中,数据读取仍照常进行

        无Master过程中,region切分、负载均衡等无法进行

    HRegionServer容错:定时向Zookeeper汇报心跳,如果一定时间内未出现心跳

    HMaster将该HRegionServer上的Region重新分配到其他RegionServer上

    失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer上

9. HBase访问方式

    Native Java API:常规高效

        创建一个Configuration对象(包含各种配置信息hbase-default.xml,hbase-site.xml)

            Configuration conf=HbaseConfiguration.create()

        构建一个HTable句柄(提供Configuration对象,提供待访问Table的名称)

            HTable table=new HTable(conf,tableName)

            仅提供行级事务,严格的行一致性,并发读,顺序写

        执行操作(支持put,get,delete,scan等的批处理)

            table.getTableName();

        关闭HTable句柄(内存数据刷新到磁盘上,释放资源)

            table.close()

    HBase Shell:用于管理

    Thrift Gateway:序列化,支持C++,Python等语言

        启动thrift server:hbase-daemon.sh start thtift

        生成Hbase thrift client接口文件

        thrift --gen xxx Hbase.thrift

        编写客户端代码

    eg:1. thrift --gen py hbase.thrift

      2. ${HBASE_HOME}/src/examples/thrift/DemoClient.py

      3. python DemoClient.py

    Rest Gateway:Rest风格的Http API

    Mapreduce:使用Mapreduce作业处理Hbase数据

        提供TableMapper、TableReducer、TableInputFormat、TableOutputFormat等api

10.HBase Shell的主要用法

    进入控制台:bin/hbase shell

    创建表:create TABLE_NAME,COLUMN_Family1, COLUMN_Family2,...COLUMN_FamilyN

    添加记录:put TABLE_NAME,ROW_NAME,COLUMN_Family:COLUMN_NAME,VALUE

    查看记录:get  TABLE_NAME,ROW_NAME  #默认返回最近的值

    统计记录数:count TABLE_NAME

    删除表:

        disable TABLE_NAME

        drop TABLE_NAME

    删除记录:

        delete  TABLE_NAME,ROW_NAME,COLUMN_Family:COLUMN_NAME  #删除一条

        delete  TABLE_NAME,ROW_NAME  #删除所有

    删除一个列簇

        disable TABLE_NAME      

         alter TABLE_NAME, {NAME=>'tab1_add', METHOD=>'delete'} 

         enable TABLE_NAME

    全表扫描:

        scan TABLE_NAME

    指定列中的所有数据:scan TABLE_NAME,COLUMN_Family

    查看所有表:list

    查看服务器状态:status

    查看hbase版本:version

    查看表结构:descirbe TABLE_NAME

    判断表是否存在:exists TABLE_NAME

    判断表是否为enable is_enabled TABLE_NAME

    清空表:truncate TABLE_NAME


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI