大数据学习日志(四)————HBase

Sqoop

概述
  1. sqoop是Apache提供的工具,用于HDFS和关系型数据库之间数据的导入与导出
  2. 可以从HDFS导出数据到关系型数据库,

HBase

  • HBase是Doug根据Google的Big Table来实现的,HBase与Big Table的原理一模一样,只是实现的语言不通
  • HBase和Hadoop版本的对应关系比较复杂
  • HBase借鉴列存储的思想,但是底层依然依靠键值对对存储
  • HBase作为非关系型数据库,不支持SQL,提供了一套全新的命令
  • HBase中没有表关联(外键、join)的说法
  • 在HBase中,强调列族但是不强调列
  • HBase的数据类型要么是数字要么是字符串
  • HBase适合存储稀疏数据(某一些数据并不完整)——结构化(数据本身有固定结构,可以利用数据库中的一张或几张表来进行固定存储)和半结构化(数据本身有固定结构,但是无法利用固定的一张或几张表来进行存储)数据
  • 如果表被禁用,则禁止任何操作(增删改查)
  • 不同列族下边允许有相同列
  • 行键:RowKey
    • 在HBase中没有主键的概念,取而代之的是行键
    • 在定义表时不需要定义行键,行键是在向表中添加数据时手动指定的
  • 列族/列簇:Colume Family
    • 一个列族就类似于mysql中的某一张表,对应于mysql中的表结构,把经常需要查询的某几列放到一个列族中。例如MySQL一张学生表,有姓名、学号、科目、排名、总成绩等很多列,我们可能只需要查看排名和总成绩这两列,二其他几列不查询,因此就可以把排名和总成绩放到一个列族,把其他列放到另一个列族。
    • HBase中一张表至少包含一个列族,理论上不限制列族的数量。
    • 一个列族可以包含零到多个列,列的数量不做限制,列可以动态增删
  • Cell
    • 在HBase中,通过行键+列族+列+版本号可以锁定唯一一条数据,这个结构称之为一个Cell
    • 每一个Cell中只包含一条数据
  • NameSpace
    • 类似于关系型数据库中的database,可以用于区分不同的表
    • HBase搭建完成之后,默认有2个名称空间:default和hbase
      • hbase存放的是HBase本身的额一些配置信息
      • 如果没有指定,那么表默认是存放在default中
  • 增(put)删(delete、deleteall)改(put)查(get,scan)
  • HBase作为数据库,提供了完整的增删改查的功能,HBase是基于HDFS来进行存储的,HDFS的特点是允许一次写入多次读取,不允许修改但是允许追加,此时HBase如何实现“改”的功能?HBase并没只有修改已经写入的数据,而是在尾部追加数据,并且给每一条数据添加时间戳,在获取数据的时候,只需要获取时间戳最大的数据,就是最新的数据,这个时间戳在HBase中称为版本(VERSION)
  • 在HBase中,在获取数据的时候,默认获取的是最新版本的1条数据
  • 在HBase中,一个表在建立的时候如果没有指定,那么最多只允许对外获取一个版本的数据,如果想要对外获取多个版本的数据,在建表的时候需要指定
HBase完全分布式搭建
  • 环境:3个Zookeeper+3个HBase+1个Hadoop伪分布式

  • 在第一台服务器上开启hadoop伪分布式

  • 在三台服务器上开启Zookeeper并检查状态,一个leader两个follower

  • 在第一台服务器上上传并解压HBase安装包

  • 进入HBase安装目录的conf目录

  • 编辑hbase-env.sh文件:

    • JAVA_HOME: export JAVA_HOME=/home/software/jdk1.8
    • export HBASE_MANAGES_ZK=false
    • 保存退出,使文件重新生效
  • 编辑hbase-site.xml

    <configuration>
            <property>
                    <!--hbase的数据本质上还是存储在hdfs上-->
                    <name>hbase.rootdir</name>
                    <value>hdfs://hadoop01:9000/hbase</value>
            </property>
    
            <property>
                    <!--配置分布式-->
                    <name>hbase.cluster.distributed</name>
                    <value>true</value>
            </property>
    
            <property>
                    <!--配置Zookeeper的连接地址与端口号-->
                    <name>hbase.zookeeper.quorum</name>
                    <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
            </property>
    </configuration>
    
  • 编辑regionservers:配置三台主机的主机名称

    hadoop01
    hadoop02
    hadoop03
    
  • 回到software目录下,将hbase安装目录远程拷贝到另外两台主机上:scp -r hbase-1.3.1 root@hadoop02:/home/software/

  • 进入hbase安装目录的bin下,启动hbase服务(先启动第一台)sh start-hbase.sh,启动后jps查看进程

    • 第一台主机的进程有:

      2480 DataNode
      2912 NodeManager
      7030 HMaster
      7158 HRegionServer
      2808 ResourceManager
      6666 QuorumPeerMain
      2349 NameNode
      2654 SecondaryNameNode
      7566 Jps
      
    • 第二台主机的进程有:

      2738 HRegionServer
      3220 Jps
      2492 QuorumPeerMain
      
    • 第三台主机的进程有:

      2728 HRegionServer
      3210 Jps
      2493 QuorumPeerMain
      
常用命令
命令解释
status查看HBase的状态
version查看HBase的版本信息
whoami查看当前用户
create ‘person’,{NAME=>‘basic’},{NAME=>‘info’},{NAME=>‘expand’}
create ‘person’,‘p1’,‘basic’,‘info’,‘expand’(简写形式)
创建person表,其中包含basic、info、expand三个列族
create ‘person’,‘p1’,‘basic:name’,‘Tom’向person表中列族name列添加数据。行键为p1
get ‘person’,‘p1’,{COLUMN=>‘basic’}
get ‘person’,‘p1’,{COLUMN=>[‘basic’,‘info’]}
get ‘person’,‘p1’,‘info’,‘basic’
scan ‘person’,{COLUMN=>[‘basic’,[info]]}
scan 'person,{COLUMN=>‘basic’}'
该命令不允许简写
scan ‘person’,{COLUMN=>‘basic:name’}查询指定列的数据
scan ‘person’,{COLUMN=>‘basic’}查询指定列族的数据
delete ‘person’,‘d3’,‘info:height’删除行键为d3的info列族的height列的数据
deleteall ‘person’,‘d3’删除一行数据
disable ‘person’禁用表
is_disabled ‘person’查询表的禁用状态
is_enabled ‘person’表是否启用
enable ‘person’启用表
drop ‘person’删除表(必须被禁用)
list列出所有表
exist ‘**’查询表是否存在
create ‘person’,{NAME=>‘basic’,VERSIONS=>3},{NAME=>‘info’,VERSIONS=>5}创建表并设置可查询最大版本数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜色如墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值