zoukankan      html  css  js  c++  java
  • hbase_1

    常见的RDBMS:(数据库排行)
        ** mysql      --开源[社区版] 、收费[企业版]
                    --市场占有率高、web领域被广泛使用
            ** 2008年被oracle收购
            ** mysql主从架构[集群的一种]
            ** 端口:3306
        ** oracle
            ** oracle集群性能比较强
            ** mysql集群性能相对比较差一下
            ** 端口:1521
        ** sqlserver 
            ** 微软公司[windows 200820122012R2]
            ** windows项目、微软平台下面的项目用得比较多
            ** 端口:1433
    
    
    数据量增加,RMDBS的应对:
    1 读写分离,主数据库用于写,其他用于读
    2 增加缓存
    3 垂直扩容和横向扩展
    4 采用逆范式化结构
    5 停用存储过程和放弃辅助索引
    
    
    非关系型数据库 NoSQL(Not Only SQL):
        ** HBase、mongoDB、redis
        ** 没有sql语句
        ** 性能和效率较高
        ** 尤其是当单表数据量过大,又必需进行全表扫描,且不能分库分表时,可以考虑使用非关系型数据库
        ** 注意:非关系型数据库并非万能的,需要根据业务来选择使用何种数据库
    
    ====HBase部署=================================
    
    1、安装Apache Hadoop,并启动
    
    2、启动zookeeper(未安装的需要安装)
        $ bin/zkServer.sh start
        ----------------依赖zookeeper的原因是存储元数据,通过他找到对应的regionserver
        
    3、解压HBase
    
    4、配置hbase-env.sh:
    export JAVA_HOME=/opt/modules/jdk1.7.0_67
    
    # 关闭掉HBase自带的zookeeper
    export HBASE_MANAGES_ZK=false        //不使用自带的zookeeper
    
    5、配置hbase-site.xml:
    <!--用来存放HBase数据-->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://blue01.mydomain:8020/hbase</value>
    </property>
    <!--启用集群模式,当前为伪分布式-->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>blue01.mydomain</value>
    </property>
    
    6、regionservers文件:(替换localhost)
    blue01.mydomain
    
    7、替换lib目录中低版本的hadoop和zookeeper的jar包
    $ rm -rf lib/hadoop-*
    $ rm -rf lib/zookeeper-3.4.6.jar
    拷贝对应的jar包到lib目录
    
    8、启动服务
    $ bin/hbase-daemon.sh start master
    $ bin/hbase-daemon.sh start regionserver
    ** $ bin/start-hbase.sh
    ** $ bin/stop-hbase.sh
    
    访问:http://192.168.122.128:60010/
    
    PS:
    HBase默认配置文件hbase-default.xml 在 hbase-common-0.98.6-hadoop2.jar
    
    =================================================================
    
    结构化与非结构化数据:
    
    结构化(表)
    name  cardid  age   sex   addr  job1  job2  job3   edu1  edu2
    张三    1     23    男    上海  谷歌  电信         北大     同济
    李四    2           女    北京                       清华
    
    非结构化
    rowkey:身份证cardid(相当于primary key)
    
    cardid: 1
    name:张三
    age: 23
    sex:男 
    addr: 上海
    job1:谷歌
    job2:电信
    edu1:同济    
    
    cardid: 2                    
    name:李四
    sex:女  
    addr: 北京
    
    使用"键值对"进行查询(key-value): rowkey + Column family + column + timestamp----> value 
    如:cardid(2)+CF+name: 李四
        cardid(2)+CF+sex : 女
    
    
    HBase数据类型
        ** HBase不区分数据类型
        ** 数据存储读取时:字节数组
    
    
    HBase中数据存储的重要术语
        ** rowkey:行键
            用来唯一标识每一行数据,类似RDBMS中的主键
        ** Column Family[CF] :  列族
            用来组织列, 一个列族里包含多个列
            在实际环境中,从性能上考虑,列族个数<=2,最好是一个
        ** Column : 列
            字段名,列名
        ** timestamp:
            数据插入到表中的时间
        ** Cell : 单元格 
            最小或最基本的存储单元,列的实际值存储
        ** 版本
            HBase中每个列的值可以有多个版本[副本]
            默认情况下,有3个版本,通常显示最新版本
        ** 基于Key-Value对形式存取数据
           rowkey + CF + Column + timestamp : value
    
    ======================================================================
    
    PS: hbase默认不支持退格键,解决方案:
    a) 使用Ctrl+Backspace
    b) Xshell:
        文件--属性--终端--键盘--两个都选择ASCII 127
    c) secureCRT:(百度)
        选项--会话选项--仿真--终端--选择Linux
        选项--会话选项--映射键--勾上:backspace发送delete和delete发送backspace
        
    ----shell命令-------------------
    
    $ bin/hbase shell
    hbase(main):001:0> 
    
    > help
    > list     --显示所有数据表
    > create 'emp','info'    --表名,列族
    > desc 'emp'      --查看表信息
    > describe 'emp'  --同上
    > create 't1',{NAME => 'f1'},{NAME => 'f2'},{NAME => 'f3'}    --多个列族
    
    > put 'emp','1001','info:name','zhangsan'    --插入
    > put 'emp','1001','info:name','aaa'         --更新
    > put 'emp','1001','info:age','25'
    ......
    > scan 'emp'
    
    --查看数据
    > get 'emp','1001'
    > get 'emp','1001','info'
    > get 'emp','1001','info:name'
    > get 'emp','1001', {COLUMN => ['info:name']}    --同上
    > get 'emp','1001','info:name','info:age'
    > get 'emp','1001', {COLUMN => ['info:name', 'info:age']}
    > get 'emp','1001', 'info:name', 'info:age', 'info:sex'        --有不存在的列
    > get 'emp','1001', {COLUMN => ['info:name', 'info:age', 'info:sex']} 
    
    --scan(范围)
    > put 'emp','1003','info:name','wangwu'
    > scan 'emp'
    > scan 'emp',{COLUMNS=>'info:name'}
    > scan 'emp',{COLUMNS=>['info:name','info:age']}    --多列,结果和列序无关
    > scan 'emp',{STARTROW => '1002'}
    > scan 'emp',{STOPROW => '1003'}
    > scan 'emp',{COLUMNS=>['info:name','info:age'],STARTROW => '1002',STOPROW => '1003'}    --[1002,1003)
    > scan 'emp',{LIMIT => 3}    --rowkey的上限,而非记录条数的上限
                        
    --删除数据
    > delete 'emp','1001','info:age'    --至少3个参数
    > deleteall 'emp','1001'            --至少2个参数,可以删除整行
    > deleteall 'emp','1001','info:age' --也可以用来删除列
    > truncate 'emp'    --清空表数据
    
    --删除表
    > disable 'emp'  --禁用
    > scan 'emp'
    > enable 'emp'   --启用
    > scan 'emp'
    > drop 'emp'     --需要先禁用
    
    统计一张表有多少行数据
    > count 'emp'     --rowkey数
    
    ===================================================
    
    HBase的几个角色:
    master:是HBase的主节点,用来调度管理客户端应用程序和RegionServer,
            管理分配region给regionserver服务器。---负责region的存储regionserver位置,保证负载均衡
    regionserver:
           是从节点,管理当前自己这台服务器上的region。region是HBase表
           的基础单元组件,它存储了分布式表。所以HBase表和HBase集群
           利用Master和RegionServer来协同工作。
    ZooKeeper:
           监控master和regionserver的状态--------管理元数据
           HBase有内置zookeeper,但实际环境中我们通常会使用其他ZK集群
           
    通常情况下:
    1、Master和Hadoop的NameNode进程运行在同一台主机上,与DataNode通信以读写HDFS的数据
    2、RegionServer跟Hadoop的DataNode运行在同一台主机上
    
    
    HBase特点:
        ** 存储数据和检索数据
        ** 非严格的列式存储数据库,但它利用了磁盘上的列存储格式
        ** 分布式、非关系型数据库
        ** HBase源自于bigtable
        ** HBase通常是和Hadoop结合使用-------------上层一来于hadoop,将数据存储在hadoop上面
        ** 适合于【非结构化数据】存储的数据库
        ** 非结构化的字段数量可以根据用户的需求而定
        ** 以key-value的形式来存储数据
        ** 高可靠性、高性能、面向列、可伸缩的分布式存储系统
        ** 利用HBase技术可以在商用机上搭建出大规模的数据库系统
    
    
    HBase数据存储目录
        ** /hbase/data/default
           存储默认命名空间表文件,如果创建表时不指定命令空间,就属于默认命名空间
        ** /hbase/data/hbase
           存储HBase元数据
            默认情况下,有这两个命名空间,命名空间可以理解为数据库
    ===================================================
    
    面试题:
    ***** 理解、记住 *****
    Hive和HBase的区别?
    Hive
        ** 是一个数据仓库,不是数据库
        ** 一般用来做业务分析,不会直接接入业务
        ** hive实际上是把hql语句转换成MapReduce运行在yarn平台上
    HBase
        ** 是一个分布式面向列的非关系型数据库
        ** 核心功能是用来存储和检索数据、可以直接接入业务系统
        ** 不依赖yarn和MapReduce
    
    ***** 理解、记住 *****
    RDBMS和HBase的区别:
        ** HBase是分布式架构,支持服务器节点在线添加和移除
        ** RDBMS可以使用sql语句,HBase通常使用API来访问
        ** RDBMS是基于行存储,HBase是基于列存储,能更好地支持存储和压缩
        ** RDBMS适合存储结构化的数据,HBase适合结构化和非结构化的数据存储
        ** RDBMS支持比较好的事务,HBase不支持事务
        ** RDBMS支持多表Join,HBase不支持Join
        ** 通常HBase表的应用场景比较简单,不适合业务逻辑很复杂的查询环境
        ** HBase索引简单,RDBMS的索引强大而且完善
        ** HBase通常应用于单表数据量巨大,用关系型数据库无法满足,不适合分库分表的场景
  • 相关阅读:
    java后端解决请求跨域
    在IDEA中找不到Mapper报错
    ES6拼接数组与小程序本地存储
    小程序云开发实现微信发说说
    SQLServer的操作以及一些概念
    数据依赖(决定),码,范式,规范化与反规范化
    Git的使用上传与下载github
    JS中Map和ForEach的区别
    进入React的世界
    Node的重要性
  • 原文地址:https://www.cnblogs.com/yin-fei/p/10778796.html
Copyright © 2011-2022 走看看