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 多个版本的数据——带有时间戳的数据
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'