欢迎投稿

今日深度:

hadoop17--HBASE,

hadoop17--HBASE,


文章目录

      • HBASE的基本概念
        • hive和HBASE区别
        • HBASE与HDFS的区别
        • HBASE与关系型数据库的区别
        • HBASE的来源
          • bigtable背景
          • 非关系型数据库
          • 关系型数据库
          • HBASE解决的问题与诞生背景
      • HBASE的特点
      • HBASE的存储
      • HBSE架构
      • HBASE的安装
        • HBASE完全分布式安装.
        • 启动HBASE
      • HBASE的基本使用(shell操作)
        • HBASE---DDL
          • namespace的操作
          • table的操作
        • HBASE---DML
          • 插入数据
          • 查询数据
          • 删除表

HBASE的基本概念

hive和HBASE区别

HBASE与HDFS的区别

HBASE与关系型数据库的区别

HBASE没有事务的支持, HBASE存储的数据都是非结构化或者半结构化的数据 , 而关系型数据库存储的都是结构化的数据

HBASE的来源

hadoop的诞生源自于谷歌的三大论文

谷歌论文 山寨框架
GFS HDFS
mapreduce mapreduce
bigtable HBASE(hadoop base)
bigtable背景

谷歌搜索引擎爬取的网页, 都是非结构化数据, 如何存储数据变成了一个难题. bigtable的设计思想为多行三列的一个大表

HBASE继承了bigtable的思想, 开发了 面向列的, 可扩展的, 非关系型的数据库

非关系型数据库
关系型数据库
HBASE解决的问题与诞生背景

HBASE的特点

HBASE的存储

HBSE架构


主要组件

HBASE的安装

由于HBASE是基于HDFS上的, 所以在安装HBASE是, 必须存在hadoop, 另外HBASE依赖于zookeeper, 所以在及集群中存在zookeeper

HBASE完全分布式安装.

在完全分布式的安装中, 由于HBASE对时间的要求

sudo tar -zvxf hbase-1.3.1-bin.tar.gz -C /opt/app/

  1. 修改权限为hadoop用户
sudo chown -R hadoop:hadoop hbase-1.3.1/

  1. 配置HBASE的环境 $HBASE/conf/hvase-env.sh
// 修改JAVA_HOME
export JAVA_HOME=/opt/app/jdk1.8.0_181

// 关闭自带的zookeeper, 不需要HBASE自带的zookeeper
export HBASE_MANAGES_ZK=false
  1. 配置HBASE-site.xml文件
// 配置HBASE临时目录
<property >
		<name>hbase.tmp.dir</name>
		<value>/opt/app/hbase-1.3.1/hbase</value>
  </property>

// 配置hbase 临时目录保存位置
 <property >
	    <name>hbase.rootdir</name>
	    <value>hdfs://ns1/hbase</value>
 </property>

//设置hbase的存储模式为分布式存储
 <property >
	    <name>hbase.cluster.distributed</name>
	    <value>true</value>
</property>

//设置hbase中zookeeper 的信息,地址为自己配置的主机名称
<property>
	    <name>hbase.zookeeper.quorum</name>
	    <value>hadoop01,hadoop02,hadoop03</value>
</property>
  1. 配置hbase在hdfs上的保存路径,如果配置了HA 则路径必须和HA提供的路径一直,并且还需要把hdfs-site.xml 和 core-site.xml 两个配置文件复制到hbase的conf目录下
cp core-site.xml /opt/app/hbase-1.3.1/conf/
cp hdfs-site.xml /opt/app/hbase-1.3.1/conf/
  1. 配置regionservers 该文件类似于 salves 文件,描述的是 regionserver的节点信息. 在配置过程中存在几个regionserver 就写几个主机名称
hadoop01
hadoop02
hadoop03
  1. 修改 hbase中hadoop的jar包,由于hbase要操作hdfs,所以hbase需要hadoop的jar包支持。所以在hbase中配置环境中hadoop的jar包
  2. 分发hbase到不同的节点上
sudo scp -r hbase-1.3.1/ hadoop02:/opt/app/
sudo scp -r hbase-1.3.1/ hadoop03:/opt/app/
  1. 修改分发后的文件权限

启动HBASE

bin/hbase-daemon.sh start master
  1. 启动 regionserver 服务 在3个节点上启动
bin/hbase-daemon.sh start regionserver
  1. 在web端查看, 端口号为16010

HBASE的基本使用(shell操作)

HBASE自带了shell操作, 而HBASE本身就是可以作为client

bin/base shell

在shell中删除时, 若出现不能删除时, 则可以使用Ctrl+delete进行删除, 在shell中可以通过help命令进行查看操作命令介绍

hbase(main):002:0> help
---------------------------------------------------
 Group name: ddl
  Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters

  Group name: namespace
  Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

  Group name: dml
  Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve

通过help命令可查看到很多操作信息,主要在shell操作中分为两类操作 ddl dml

HBASE—DDL

在hbase中没有数据库的概念,数据库的概念在hbase中称作namespace 可以理解为namespace就是关系型数据库中的数据库的概念,在namespace下面存在着数据表

namespace的操作
hbase(main):003:0>  list_namespace
NAMESPACE
default
hbase
student
3 row(s) in 0.0230 seconds
  1. 查看namespace下的所有表
hbase(main):004:0> create_namespace 'hbase'
0 row(s) in 1.4860 seconds
  1. 创建namespace
hbase(main):006:0> create_namespace 'nstest'
0 row(s) in 0.9010 seconds
  1. 查看namespace描述
hbase(main):007:0> describe_namespace 'nstest'
DESCRIPTION
{NAME => 'nstest'}
1 row(s) in 0.0630 seconds
  1. 删除namespace
hbase(main):008:0> drop_namespace 'nstest'
0 row(s) in 0.9190 seconds
table的操作

HBASE中提供的建表的实例

create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}
  • ns1 : 表示namespace的名字
  • t1 : 表名称
  • f1 : 列簇名称
  • => : 等于的意思
  • {} : 定义一个列簇,不同列簇可以在不同{}中表示, 一个{}只能定义一个列簇
  • {}中的变量名称必须为大写
  • 在创建表的时候,可以指定一个namespace,如果没有指定namespace则创建的表在默认的namespace下
hbase(main):009:0> create 'stu_info','f1'
0 row(s) in 4.4160 seconds

=> Hbase::Table - stu_info
  1. 创建表,并且指定一个namespace
hbase(main):038:0> create 'student:stu_info2','f1'
0 row(s) in 2.2320 seconds

=> Hbase::Table - student:stu_info2

Hbase是基于hdfs之上的,可以在HFDS上查看创建好的表

  1. 查看表的描述信息
hbase(main):039:0> desc 'stu_info'
Table stu_info is ENABLED
stu_info
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6553
6', REPLICATION_SCOPE => '0'}
1 row(s) in 0.0780 seconds
  1. 删除表. 删除表之前需要禁用该表, 然后再进行删除操作, 否则会抛异常
hbase(main):041:0>  disable 'stu_info' //禁用要删除的表, 禁用是disable, 启用是enable
0 row(s) in 2.3570 seconds

hbase(main):042:0> drop  'stu_info'  // 删除表
0 row(s) in 1.2420 seconds

HBASE—DML

插入数据

HBASE提供的实例:

help 'put'
hbase> put 'ns1:t1', 'r1', 'c1', 'value'

可以把put理解为mysql中的insert语句, 代表插入一条语句

ns1: 命名空间

t1: 表名称

r1: rowkey

c1: 要插入的值

value:

create 'hadoop' 'info','f1'
0 row(s) in 6.1850 seconds

=> Hbase::Table - hadoopinfo
  1. 插入数据
hbase(main):004:0> put 'hadoopinfo','1001','f1:name','zhangsan'
0 row(s) in 0.6470 seconds
hbase(main):004:0> put 'hadoopinfo','1001','f1:age','18'
0 row(s) in 0.2920 seconds
  1. 在插入数据的时候, rowkey都是以字符创的格式进行保存的, 它的最大长度可以保存64kb
查询数据

对于查询的数据可以使用get命令, get命令可以理解为快速查询, 不支持全表查询

hbase(main):007:0> get 'hadoopinfo', '1001'
COLUMN                CELL
 f1:age               timestamp=1542082626437, value=18
 f1:name              timestamp=1542082513237, value=zhangsan
1 row(s) in 0.2580 seconds
  1. 按照指定的列簇进行查询
hbase(main):008:0> get 'hadoopinfo','1001','f1'
COLUMN                CELL
 f1:age               timestamp=1542082626437, value=18
 f1:name              timestamp=1542082513237, value=zhangsan
1 row(s) in 0.0580 seconds
  1. 按照指定列簇下的列进行查询
hbase(main):009:0> get 'hadoopinfo','1001','f1:name'
COLUMN                CELL
 f1:name              timestamp=1542082513237, value=zhangsan
1 row(s) in 0.0170 seconds

hbase(main):010:0> get 'hadoopinfo','1001','f1:age'
COLUMN                CELL
 f1:age               timestamp=1542082626437, value=18
1 row(s) in 0.0110 seconds

get命令不支持全表查询, 如果要查询全表, 则可以使用scan命令, 类似于mysql中的select * from . 这种全表扫描的方式在企业开发中是不用的, 因为数据量特别大, 全表扫面所需要的时间特别长.

hbase(main):016:0> scan 'hadoopinfo'	//禁止使用
ROW                   COLUMN+CELL
 1001                 column=f1:age, timestamp=1542082626437, value=18
 1001                 column=f1:name, timestamp=1542082513237, value=zhangsan
1 row(s) in 0.0180 seconds

hbase(main):015:0>  scan 'hadoopinfo', {COLUMNS => 'f1:name'}//斟酌使用
ROW                   COLUMN+CELL
 1001                 column=f1:name, timestamp=1542082513237, value=zhangsan
1 row(s) in 0.0370 seconds
删除表

在删除表的时候, 可以使用delete, 可以按照指定的rowkey进行删除, 但是只删除一个列簇是删不掉的, 执行命令不报异常

hbase(main):017:0> delete 'hadoopinfo' ,'1001', 'f1'
0 row(s) in 0.1060 seconds
hbase(main):019:0> scan 'hadoopinfo'//查看删除后的数据
ROW                   COLUMN+CELL
 1001                 column=f1:age, timestamp=1542082626437, value=18
 1001                 column=f1:name, timestamp=1542082513237, value=zhangsan
1 row(s) in 0.0180 seconds

在删除时必须指定一个列

delete 'hadoopinfo' ,'1001', 'f1:name'

www.htsjk.Com true http://www.htsjk.com/hbase/24781.html NewsArticle hadoop17--HBASE, 文章目录 HBASE的基本概念 hive和HBASE区别 HBASE与HDFS的区别 HBASE与关系型数据库的区别 HBASE的来源 bigtable背景 非关系型数据库 关系型数据库 HBASE解决的问题与诞生背景 HBA...
相关文章
    暂无相关文章
评论暂时关闭