• hadoop学习第七天-HBase的原理、安装、shell命令


    一、 hbase的原理知识

    1. hbase介绍

    hbase是hadoop的一个重要成员,主要用于存储结构化数据,构建在hdfs之上的分布式存储系统,它主要通过横向扩展,通用不断增加廉价服务器增加计算和存储能力。

    2. hbase的特点

    1. 大:一个表可以有数十亿行,上百万列;

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

    3. 面向列:面向列(族)的存储和权限控制,列(族)独立检索;

    4. 稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;

    5. 数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;

    6. 数据类型单一:Hbase中的数据都是字符串,没有类型。

    3. hbase的结构

    1. 在 HBase 中首先会有 Column Family 的概念,简称为 CF。CF 一般用于将相关的列(Column)组合起来。在物理上 HBase 其实是按 CF 存储的,只是按照 Row-key 将相关 CF 中的列关联起来。

    2. Row-key 加上 CF 加上 Qulifier 再加上一个时间戳才可以定位到一个单元格数据(Hbase 中每个单元格默认有 3 个时间戳的版本数据)

    3. 逻辑结构图与物理结构的映射如下:

    二、hbase的安装(Linux )(伪分布式)

    还是用之前的伪分布式集群。

    1. 将hbase-1.0.1.1-bin.tar.gz上传到集群,并解压

    tar -zxvf hbase-1.0.1.1-bin.tar.gz
    

    默认会解压到当前路径,并创建一个hbase-1.0.1.1-bin文件夹

    2. 设置环境变量(root用户,修改/etc/profile,在最后添加)

    HBASE_HOME=/home/qjx/hbase-1.0.1.1
    export PATH=$PATH:$HBASE_HOME/bin
    

     使之立刻生效

    source /etc/profile
    

    3. 修改 /home/qjx/hbase-1.0.1.1/bin/hbase-env.sh

    3.hbase-env.sh中的如下属性:

    export JAVA_HOME=/usr/java/jdk1.8.0_121
    export HBASE_MANAGES_ZK=true
    

     将上面连个取消注释使之生效,

    HBASE_MANAGES_ZK=true是使zookeeper生效

    4. 修改 /home/qjx/hbase-1.0.1.1/bin/hbase-site.xml配置文件,添加配置(配置之前需要在hdfs中添加hbase文件夹)

    hadoop fs -mkdir /hbase
    

    (同时需要创建/home/qjx/hadoop/zookeeper文件夹)

    mkdir /home/qjx/hadoop/zookeeper
    

     修改 /home/qjx/hbase-1.0.1.1/bin/hbase-site.xml配置文件

    <configuration>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
      </property>
      <property>
        <name>hbase.rootdir</name>
        <value>hdfs://qjx:9000/hbase</value>
      </property>
      <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/qjx/hadoop/zookeeper</value>
      </property>
    </configuration>

    5. 启动 

    bin/start-hbase.sh

    6. 关闭

    bin/stop-hbase.sh

    7. 检查配置是否正确

    jps比之前多现实三个

    三、 hbase的shell命令

    1. 创建表

    create 'table1','info','address'

    这个后面的参数 'table1','info','address' 是列族

    2. 查看表

    list

     

    3. 查看表的描述

    3.1 查看

    describe 'table1'
    

    3.2 修改version为存储多个版本

    alter 'table1',{NAME=>'address',VERSIONS=>3}
    

    再次查看,发现VERSIONS变为了3,即可以存储3个版本的数据

    4. 删除表

    disable 'table1'
    drop 'table1'

    5. 添加记录

    put 'table1','qujinxu','info:age','22'
    put 'table1','qujinxu','address:city','shuangyashan'
    put 'table1','xukang','info:age','23'
    put 'table1','xukang','info:birthday','1994'
    put 'table1','xukang','address:province','hebei'
    put 'table1','xukang','address:city','handan'

    6. 查询记录

    6.1 查询一个row-key的记录

    get 'table1','qujinxu'
    get 'table1','xukang'

    6.2 查询一个row-key的某一列的记录

    get 'table1','qujinxu','info'
    get 'table1','qujinxu','address' get 'table1','xukang','info' get 'table1','xukang','address'

    6.3 查看某几个版本的数据

    如果有多个版本,可以显示多条,如果没有,可以自己设置,见3.2操作

    注意:VERSOIONS 而不是VERSION

    put 'table1','qujinxu','address:city','qinhuangdao'
    get 'table1','qujinxu',{COLUMN=>'address:city',VERSION=>5}

    7. 更新记录

    更新记录还是讲数据put上去进行覆盖,不过会产生新的迭代版本,见上一步操作的第一步

    8. 全部扫描

    scan 'table1'
    

    9. 删除记录

    9.1 删除具体的row-key的某个列

    delete 'table1','qujinxu','info:city'

    9.2 删除row-key的某个列族

    delete 'table1','qujinxu','info
  • 相关阅读:
    面试官:请介绍搜索引擎背后的经典数据结构和算法
    C++是如何从代码到游戏的?
    后浪程序猿 996 摸鱼求生指南
    我收集了39节从0入门《人工智能+Python》视频课,价值1999,免费下载 等会就删!...
    LeetCode 例题精讲 | 01 反转链表:如何轻松重构链表
    LeetCode 例题精讲 | 15 最长公共子序列:二维动态规划的解法
    统统卸载!再见了,流氓顽固软件!
    26 页高清大数据开发代码速查表,提升效率必备!【可下载】
    LeetCode 例题精讲 | 04 用双指针解 Two Sum:缩减搜索空间
    吆,这接口设计的可以!可以!可以!
  • 原文地址:https://www.cnblogs.com/qjx-2016/p/7286276.html
Copyright © 2020-2023  润新知