HBase伪分布式环境搭建及命令行使用

时间:2022-11-09 12:55:29

HBase伪分布式环境搭建及命令行使用

  1. HBase简介
    Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用ZooKeeper作为协调工具。
  2. HBase的数据模型
    • 2.1 表(table),是存储管理数据的。
    • 2.2 行键(row key),类似于MySQL中的主键。
      行键是HBase表天然自带的,Table中的记录按照Row Key排序。
    • 2.3 列簇(column family),列的集合。
      HBase中列簇是需要在定义表时指定的,列是在插入记录时动态增加的。
      HBase表中的数据,每个列簇单独一个文件。
    • 2.4 时间戳(timestamp),列(也称作标签、修饰符)的一个属性。
      行键和列确定的单元格,可以存储多个数据,每个数据含有时间戳属性,数据具有版本特性。
      如果不指定时间戳或者版本,默认取最新的数据。
    • 2.5 存储的数据都是字节数组。
    • 2.6 表中的数据是按照行键的顺序物理存储的。
  3. HBase的物理模型
    • 3.1 HBase是适合海量数据(如20PB)的秒级简单查询的数据库。
    • 3.2 HBase表中的记录,按照行键进行拆分, 拆分成一个个的region。
      许多个region存储在region server(单独的物理机器)中的,这样,对表的操作转化为对多台region server的并行查询。
  4. HBase的架构体系

    • 4.1 Client
      包含访问HBase的接口,Client维护着一些cache 来加快对HBase的访问,比如region的位置信息
    • 4.2 ZooKeeper
      ①保证任何时候,集群中只有一个running master
      ②存贮所有Region的寻址入口
      ③实时监控Region Server的状态,将Region Server的上线和下线信息,实时通知给Master
      ④存储Hbase 的schema,包括有哪些table,每个table 有哪些column family
    • 4.3 Master
      ①可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
      ②为Region Server分配region
      ③负责Region Server 的负载均衡
      ④发现失效的Region Server并重新分配其上的region
    • 4.4 Region Server
      ①维护Master分配给它的region,处理对这些region的IO请求
      ②负责切分在运行过程中变得过大的region

    可以看出,Client访问HBase上数据的过程并不需要Master参与,寻址访问ZooKeeper和Region Server,数据读写访问Region Server。HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。

  5. HBase的基础知识
    HBase中有两张特殊的Table,-ROOT-.META.
    .META.:记录了用户表的Region信息,.META.可以有多个regoin
    -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
    ZooKeeper中记录了-ROOT-表的location
    Client访问用户数据之前需要首先访问ZooKeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问。
  6. HBase伪分布式环境安装
    HBase是依赖Hadoop的数据存储系统,所以安装HBase前Hadoop环境要安装成功,可参见hadoop2.6.4伪分布式环境搭建
    由于HBase自带ZooKeeper,所以ZooKeeper可以不用安装。HBase内置的ZooKeeper效果一般不好,一般都选择外置独立的ZooKeeper。下面会有说到如何使用独立的,如何使用默认自带的,想学习HBase可以不安装外置独立的ZooKeeper。

    • 6.1 下载HBase
      下载HBase,选择当前稳定版stable。将下载的hbase-1.2.4-bin.tar.gz拷贝到Linux系统/root/Downloads目录下,解压到/usr/local/目录下tar -zxvf hbase-1.2.4-bin.tar.gz -C /usr/local/
    • 6.2 配置系统环境变量
      vi /etc/profile,文件末尾配置内容:

      export JAVA_HOME=/usr/local/java/jdk1.8.0_101
      export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0
      export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.9-1
      export HBASE_HOME=/usr/local/hbase-1.2.4
      export PATH=.:$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin

      source /etc/profile使配置立即生效。

    • 6.3 验证环境变量是否配置成功
      hbase version
      HBase伪分布式环境搭建及命令行使用
    • 6.4 修改hbase-env.sh文件
      修改${HBASE_HOME}/conf/hbase-env.sh文件
      ①修改设置JAVA_HOMEexport JAVA_HOME=/usr/local/jdk
      ②修改设置HBASE_MANAGES_ZK,export HBASE_MANAGES_ZK=true为true表示使用HBase自带的ZooKeeper,为false表示使用独立的ZooKeeper,需要安装ZooKeeper
    • 6.5 修改hbase-site.xml文件
      修改${HBASE_HOME}/conf/hbase-site.xml文件,配置内容如下:

      <property>
      <name>hbase.rootdir</name>
      <value>hdfs://cyyun:9000/hbase</value>
      </property>
      <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
      </property>
      <property>
      <name>hbase.zookeeper.quorum</name>
      <value>cyyun</value>
      </property>
      <property>
      <name>dfs.replication</name>
      <value>1</value>
      </property>

      注:hbase.rootdir的值一定要与Hadoop的配置文件core-site.xml中fs.default.name的值相同,hbase.zookeeper.quorum的值一定是启动HBase所在的机器主机名

    • 6.6 修改regionservers文件
      修改文件的内容为主机名cyyun
    • 6.7 启动HBase
      首先确保Hadoop集群已经启动。
      执行命令start-hbase.sh,启动HBase
      HBase伪分布式环境搭建及命令行使用
      使用jps查看进程
      HBase伪分布式环境搭建及命令行使用
      可以看到新增了3个Java进程HMaster、HRegionServer、HQuorumPeer。
      可以在浏览器上查看地址http://cyyun:16010,可以看到HBase的管理界面。
      注:hbase1.0以前的版本端口号是60010,需要自己手动配置,在文件hbase-site.xml中添加如下配置,就可以使用http://cyyun:60010访问了。

      <property>
      <name>hbase.master.info.port</name>
      <value>60010</value>
      </property>

      查看HDFS目录,会发现根目录下多了一个hbase的目录hadoop fs -ls /
      停止命令是stop-hbase.sh

    此时HBase使用自带的ZooKeeper伪分布式环境安装成功。

    • 6.8 使用独立的ZooKeeper搭建HBase
      ①修改设置HBASE_MANAGES_ZK,export HBASE_MANAGES_ZK=false
      ②分别启动ZooKeeper
      ③启动Hadoop
      ④启动HBase
      查看进程jps,除了HMaster、HRegionServer,多出3个zk进程QuorumPeerMain。
      HBase伪分布式环境搭建及命令行使用
      此时进入到ZooKeeper的命令行Shell,ls /查看到ZooKeeper多出来一个节点hbase
      HBase伪分布式环境搭建及命令行使用
      此时HBase使用独立的ZooKeeper伪分布式环境安装成功。
  7. HBase的Shell操作
    HBase启动成功后,输入命令hbase shell进入到HBase提供的一个Shell的终端进行交互
    HBase伪分布式环境搭建及命令行使用

    名称 命令表达式
    创建表 create '表名称','列簇名称1','列簇名称2','列簇名称N'
    列出全部表 list
    得到表的描述 describe '表名称'
    检查表是否存在 exists '表名称'
    表是否可用/禁用 is_enabled '表名称';is_disabled '表名称'
    添加记录 put '表名称','行名称','列簇名称:列名称','值'
    获取一个行键记录 get '表名称','行名称'
    获取一个行键,一个列簇的所有数据 get '表名称','行名称','列簇名'
    获取一个行键,一个列簇中的一个列的所有数据 get '表名称','行名称','列簇名:列名称'
    查看表中记录总数 count '表名称'
    查看所有记录 scan '表名称'
    查看一个表一个列中所有数据 get '表名称',{COLUMNS=>'列簇名称:列名称'}
    更新/修改记录 并不是修改,就是重写一遍进行覆盖
    获取版本数据 get '表名称',{COLUMNS=>'列簇名称:列名称',VERSIONS=>1}
    根据时间戳获取版本数据 get '表名称','行名称',{COLUMN=>'列簇名称:列名称',TIMESTAMP=>时间戳}
    删除一列记录 delete '表名称','行名称','列簇名称:列名称'
    删除一条记录(一个行键记录) deleteall '表名称','行名称'
    清空表 truncate '表名称'
    删除一张表 先要禁用该表,才能对该表进行删除,第一步disable '表名称',第二步drop '表名称'
    • 7.1 创建表create 'student','stu_id','address','info'
      HBase伪分布式环境搭建及命令行使用
      表student,有三个列簇stu_id,address,info
    • 7.2 列出全部表list
      HBase伪分布式环境搭建及命令行使用
    • 7.3 表的描述describe 'student'
      HBase伪分布式环境搭建及命令行使用
    • 7.4 表是否存在exists 'student'
      HBase伪分布式环境搭建及命令行使用
    • 7.5 表是否可用/禁用is_enabled 'student'is_disabled 'student'
      HBase伪分布式环境搭建及命令行使用
      返回true/false
    • 7.6 添加记录put

      put 'student','zhangsan','info:age','24';
      put 'student','zhangsan','info:birthday','1987-06-17';
      put 'student','zhangsan','info:company','alibaba';
      put 'student','zhangsan','address:contry','china';
      put 'student','zhangsan','address:province','zhejiang';
      put 'student','zhangsan','address:city','hangzhou';
      put 'student','lisi','info:birthday','1987-4-17';
      put 'student','lisi','info:favorite','movie';
      put 'student','lisi','info:company','alibaba';
      put 'student','lisi','address:contry','china';
      put 'student','lisi','address:province','guangdong';
      put 'student','lisi','address:city','jieyang';
      put 'student','lisi','address:town','xianqiao'
    • 7.7 查看记录
      ①获取一个行键的所有数据get 'student','zhangsan'
      HBase伪分布式环境搭建及命令行使用
      ②获取一个行键,一个列簇的所有数据get 'student','zhangsan','address'
      HBase伪分布式环境搭建及命令行使用
      ③获取一个行键,一个列簇中的一个列的所有数据get 'student','zhangsan','info:age'
      HBase伪分布式环境搭建及命令行使用
    • 7.8 查看表中记录总数count 'student'
      HBase伪分布式环境搭建及命令行使用
      两个行键,所以是两条数据。
    • 7.9 查看所有记录scan 'student'
      HBase伪分布式环境搭建及命令行使用
    • 7.10 获取表某个列中的版本数据
      get 'student','zhangsan',{COLUMN=>'info:age',VERSIONS=>1}
      HBase伪分布式环境搭建及命令行使用
    • 7.11 更新/修改操作

      put 'student','zhangsan','info:age','29'
      get 'student','zhangsan','info:age'
      put 'student','zhangsan','info:age','30'
      get 'student','zhangsan','info:age'

      可以看出age的覆盖,HBase获取的是最新的数据,以前的数据也是存在的,可通过版本获取。
      HBase伪分布式环境搭建及命令行使用

    • 7.12 获取版本数据

      get 'student','zhangsan',{COLUMN=>'info:age',VERSIONS=>2}
      get 'student','zhangsan',{COLUMN=>'info:age',VERSIONS=>3}

      HBase伪分布式环境搭建及命令行使用
      根据时间戳获取版本数据
      get 'student','zhangsan',{COLUMN=>'info:age',TIMESTAMP=>1480951906539}
      HBase伪分布式环境搭建及命令行使用

    • 7.13 删除一列数据delete 'student','zhangsan','info:age'
      HBase伪分布式环境搭建及命令行使用
    • 7.14 删除一行数据deleteall 'student','zhangsan'
      HBase伪分布式环境搭建及命令行使用
    • 7.15 清空表truncate 'student'
      HBase伪分布式环境搭建及命令行使用
      HBase伪分布式环境搭建及命令行使用
    • 7.16 删除表

      disable 'student'
      drop 'student'

      HBase伪分布式环境搭建及命令行使用

    • 7.17 退出quit
      HBase伪分布式环境搭建及命令行使用
  8. 停止HBase
    stop-hbase.sh
    HBase伪分布式环境搭建及命令行使用