Hbase数据库的配置_总结

Hbase数据库的配置_总结

1.HBase是一个NoSQL的数据库产品,用于解决海量数据的毫秒级简单查询的问题。

2.HBase的特点

2.1 表(table)——用于存储数据的逻辑单位,数据也是存放在表中的。

2.2 行(row)——嵌套的说法,存储数据的一行记录。

2.3 行键(row key)——类似于主键,也是用于区分每一行的,数据存储时是按照行键顺序存储的。

2.4 列簇(column family)——列的集合,是一类列的集合。列簇在物理上是单独形成数据文件的。

  列,类似于RDBMS中的字段。

2.5 列(column)——相当于RDBMS中的字段

2.6 单元格(cell)——存储数据的地方。存储的是多份,这多份数据是通过时间戳区分的。默认取最新的数值。

2.7 多个版本的数据——带有时间戳的数据

扫描二维码关注公众号,回复: 9566436 查看本文章

hbase中的数据都是字节数组存储的,所以比较时按照一个个字节比较。

hbase中的记录是按照rowkey排序存储的。

hbase中的列簇根据大小划分为很多的region,不同的region可以存储在不同的region服务器中。那么,海量数据的查询就可以转换为并行查询了。

预分区操作指的是在建表的时候,预先划分成指定数量的region,插入数据时均匀的分散到不同的region中。

在hbase中,有一张表叫做.META.,里面存储的是用户表的regionserver与rowkey的映射关系。

在hbase中,有一张表叫做-ROOT-,里面存储的是.META.的rowkey与regionserver的映射关系。

表示hbase某张表中的一行记录,看rowkey确定一行记录。

行中有很多列。这些列分到很多列簇中存储。

每一个列簇是一个独立的存储文件。

====================================版权:小青蛙=====================================

Hbase的特点:

    row 行  row key  行键  column 列

1:用行和列定位一个单元格(类似于坐标的概念),单元格可以存储多个类型的数据(可以对数据进行拆分存储因他是分布式数据库)

2:Hbase中的记录是按照rowkey默认排序的,一个rowkey映射多个列簇,同一个列簇的数据物理上独立存储,

   列簇{chu(column family)}根据大小可以划分为很多的region,不同的region存储在不同的region服务器上,

   这样海量的数据就可以实现多服务器上的并行查询。

3:在Hbase中有一张内部索引表:表起名叫.META,里面存储的是regionserver和rowkey的隐射关系;

  索引表: -ROOT-表存的是.META的rowkey和regionserver的隐射关系。

4: 建立索引的时候key是regionsever,不是rowkey,因为数据量大的时候,rowkey的映射数据量太大,

  分析:regionsever是存储工具  rowkey是数据

5:  region是一系列数据的集合,存放在regionserver数据库中.

##################

 数据库是为了解决特定问题出现的。hbase是为了解决海量数据的毫秒级简单查询。

  1.mapreduce在执行job时,会把job代码复制到各个tasktracker上面,然后在上面启动新的java进程来运行。

  2.RDBMS实质上是单进程的应用。在数据存储时是按照行存储的,按照数据插入先后顺序排序的。数据在查询时是按照行查询的。

  3.hbase本质上是个k-v数据库。支持的查询方式非常简单,功能非常弱。

======================================================

1.HBase 存储方式:

1.1 是hadoop领域的数据库,用于解决海量数据秒级响应的简单查询(key值对应的查询)。

1.2 数据模型

        (1)表

 (2)行键(row key),功能类似于RDBMS中的主键,表示记录的唯一性。但是,行键不需要单独在表定义时创建。

 (3)列族(column family),是列的集合。

   数据存储时是安装列族存储的,按行键排序的。

存储方式:

rowkey1-->[{column1}-->[{t4:xx},{t3:xxx},{t1:xxxx},column2],{column3,column4}]

    

eg:工作单位 (t3:itcast t2:baidu t1:hao123) 意思是:t3是最新记录 t1是最旧记录

 解析:t4,t3,t1 都是时间戳chuo,利用时间来分别不同时间下的记录 

    

---------------

创建表的时候可以预先分区,命令是:

create 't1', 'f1', {NUMREGIONS=>15,SPLITALGO=>'

----------------

HexStringSplit'}

******************************************************************************

******************************************************************************

Hbase与相关软件安装:

需要软件:hadoop.1.1.2

hbase-0.94.2-security.tar.gz 

JDK

前提条件:本机或集群环境下hadoop.1.1.2已经安装成功

#cd /usr/local下操作:

把hbase-0.94.2-security.tar.gz复制到/usr/local

解压: tar -zxvf hbase-0.94.2-security.tar.gz

重命名: mv hbase-0.94.7-security hbase

确定集群结构,以hadoop0作为主节点,hadoop1和hadoop2作为从节点

1.在hadoop0、hadoop1、hadoop2上分别启动hadoop ZooKeeper,

  命令是:

start-all.sh

        zkServer.sh start   

  

-------------------

2修改/etc/profile文件 命令

#: vim /etc/profile

增加 

export HBASE_HOME=/usr/local/hbase

修改 

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin

保存退出 

#source /etc/profile

3.

修改$HBASE_HOME/conf/hbase-env.sh文件(打开两个文件)

export JAVA_HOME=/usr/local/jdk  (位置:最上边)  (注意:jdk路径根据自己的配置而定)

export HBASE_MANAGES_ZK=true改成false    (位置:最下面)

保存后退出

4.修改$HBASE_HOME/conf/hbase-site.xml

<configuration>

  <!-- 指定hbase在HDFS上存储的路径 -->

<property>

    <name>hbase.rootdir</name>

    <value>hdfs://hadoop100:9000/hbase</value>

</property>

 <!-- 指定hbase是分布式的 -->

<property>

    <name>hbase.cluster.distributed</name>

    <value>true</value>

</property>

 <!-- 指定zk的地址,多个用“,”分割 -->

<property>

    <name>hbase.zookeeper.quorum</name>

    <value>hadoop100,hadoop101,hadoop102</value>

</property>

<property>

  

    <name>dfs.replication</name>

    <value>1</value>

</property>

</configuration>

    注意:$HBASE_HOME/conf/hbase-site.xml的hbase.rootdir的主机和端口号 

    和 $HADOOP_HOME/conf/core-site.xml的fs.default.name的主机和端口号一致

5.在$HBASE_HOME/conf/regionservers文件增加vim regionservers (每个一行)

hadoop0

hadoop1

hadoop2

保存退出 [a :wq ]

6.把hadoop0上的shbase文件夹复制到hadoop1、hadoop2的对应目录下,执行命令

   scp -r /usr/local/hbase/ hadoop1:/usr/local/

   scp -r /usr/local/hbase/ hadoop2:/usr/local/

7.把hadoop0上的/etc/profile复制到其他节点,

   scp -r hadoop0:/etc/profile hadoop1:/etc/profile

   scp -r hadoop0:/etc/profile hadoop2:/etc/profile

  复制完后,在其他各节点执行: source /etc/profile

----------------------------

8.启动所有的hbase  { #cd $HBASE_HOME/bin(或 cd /usr/local/hbase/bin) }

 各节点分别启动hbase集群

start-dfs.sh

 各节点分别启动zk

 ./zkServer.sh start

 启动hbase,在主节点上运行:

start-hbase.sh    (./stop-hbase.sh)

**********注意:(1)hadoop必先启动,并且可以写入文件 命令:  start-all.sh

       (2)zookeeper必须在各个节点启动成功 命令:   zkServer.sh start

                  不需要使用hbase自身带的zk了,使用外部的zk(单独启动)

               (3)首先关闭伪分布,执行命令: stop-hbase.sh

9.通过浏览器访问hbase管理页面

http://hadoop100:60010/master-status

   验证:jps 你会发现在根目录下多了一个hbase的目录 : HRegionServer

10.为保证集群的可靠性,要启动多个HMaster

hbase-daemon.sh start master

11.验证hbase是否成功:: #$HBASE_HOME/bin/hbase shell

出现:  hbase(main):001:0>    即成功!

***********************************************************************

***********************************************************************

创建表:

hbase(main):001:0>create 'wlan_log','cf'

到数据 到 Exlpues写代码执行   代码在ppt上26个上的

----------------------------

#$HBASE_HOME/bin/hbase shell

…… (在此,可以创建表什么的啦

)

 /usr/local/hbase/bin操作:()

[root@hadoop100 bin]# hbase  显示帮助文档

退出是:quit 

shell下 退出,命令是: c:

如:

hbase(main):013:0* 

hbase(main):014:0* c

hbase(main):015:0>

[root@hadoop100 bin]# hbase shell

查询是否有表: hbase(main):001:0> list

创建表

hbase(main):001:0>create 'person','user_id','address','info'

列出全部表

hbase(main):001:1

>list

查看表的结构:

hbase(main):001:0>describe 'person'

启用表

hbase(main):001:3>enable 'user'

删除表(两条命令都执行,才能启到删除功能)

hbase(main):001:0>disable 'users_tmp'      

hbase(main):001:0>drop 'users_tmp'

清空user表中的数据

truncate 'user'

hbase(main):014:0* c

退出 : c

#################################################################

显示hbase中的表

list

创建user表,包含info、data两个列族

create 'user', 'info', 'data'

向user表中插入信息,row key为rk0001,列族info中添加name列标示符,值为zhangsan

put 'user', 'rk0001', 'info:name', 'zhangsan'

向user表中插入信息,row key为rk0001,列族info中添加gender列标示符,值为female

put 'user', 'rk0001', 'info:gender', 'female'

向user表中插入信息,row key为rk0001,列族info中添加age列标示符,值为20

put 'user', 'rk0001', 'info:age', 20

向user表中插入信息,row key为rk0001,列族data中添加pic列标示符,值为picture

put 'user', 'rk0001', 'data:pic', 'picture'

获取user表中row key为rk0001的所有信息

get 'user', 'rk0001'

获取user表中row key为rk0001,info列族的所有信息

get 'user', 'rk0001', 'info'

获取user表中row key为rk0001,info列族的name、age列标示符的信息

get 'user', 'rk0001', 'info:name', 'info:age'

获取user表中row key为rk0001,info、data列族的信息

get 'user', 'rk0001', 'info', 'data'

获取user表中row key为rk0001,列族为info,版本号最新5个的信息(区分大小写)

get 'user', 'rk0001', {COLUMN => 'info', VERSIONS => 5}

get 'user', 'rk0001', {COLUMN => 'info:name', VERSIONS => 5}

get 'user', 'rk0001', {COLUMN => 'info:name', VERSIONS => 5, TIMERANGE => [1393480651855, 1393480409088]}

获取user表中row key为rk0001,cell的值为zhangsan的信息

get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}

获取user表中row key为rk0001,列标示符中含有a的信息

get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

put 'user', 'rk0002', 'info:name', 'fanbingbing'

put 'user', 'rk0002', 'info:gender', 'female'

put 'user', 'rk0002', 'info:nationality', '中国'

get 'user', 'rk0002', {FILTER => "ValueFilter(=, 'binary:中国')"}

查询user表中的所有信息

scan 'user'

查询user表中列族为info的信息

scan 'user', {COLUMNS => 'info'}

查询user表中列族为info和data的信息

scan 'user', {COLUMNS => ['info', 'data']}

查询user表中列族为info、列标示符为name的信息

scan 'user', {COLUMNS => 'info:name'}

查询user表中列族为info、列标示符为name的信息,并且版本最新的5个

scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

查询user表中列族为info和data且列标示符中含有a字符的信息

scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}

查询user表中列族为info,rk范围是[rk0001, rk0003)的数据

scan 'user', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

查询user表中row key以rk字符开头的

scan 'user',{FILTER=>"PrefixFilter('rk')"}

查询user表中指定 数字范围的数据

scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}

删除数据

删除user表row key为rk0001,列标示符为info:name的数据

delete 'user', 'rk0001', 'info:name'

删除user表row key为rk0001,列标示符为info:name,timestamp为1392383705316的数据

delete 'user', 'rk0001', 'info:name', 1392383705316

清空user表中的数据

truncate 'user'

修改表结构

首先停用user表

disable 'user'

添加两个列族f1和f2

alter 'user', NAME => 'f1'

alter 'user', NAME => 'f2'

启用表

enable 'user'

disable 'user'

删除一个列族:

alter 'user', NAME => 'f1', METHOD => 'delete' 或 alter 'user', 'delete' => 'f1'

添加列族f1同时删除列族f2

alter 'user', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

将user表的f1列族版本号改为5

alter 'user', NAME => 'f1', VERSIONS => 5

启用表

enable 'user'

删除表

disable 'user'

drop 'user'

发布了15 篇原创文章 · 获赞 0 · 访问量 247

猜你喜欢

转载自blog.csdn.net/u011521584/article/details/104632861
今日推荐