hbase

物理数据模型其实就是将逻辑模型中的一个Row分割成为根据Column family存储的物理模型。
对于BigTable的数据模型操作的时候,会锁定Row,并保证Row的原子操作。
Hbase由行和列组成行按照((列族)) 划分
每个列族在硬盘上都自己的HFile(二进制文件,不能直接读取)
HFile:一个列族可以有多个HFile,但是一个HFile不能储存多个列族(Column),每个列族都有一个MemStore
一行中的一个列族数据不一定存放在同一个HFile里,一行中的列族数据需要物理的存放在一起
HBase表是横向划分为很多region的

region是存放在不同的region server上的。

一个region里能存放一个列族或多个列族,一个列族(如果大的话)可以存放在多个region中


hbase的rowkey是按顺序存储的



HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:

管理用户对Table的增、删、改、查操作
管理HRegionServer的负载均衡,调整Region分布
在Region Split后,负责新Region的分配
在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移

一个时间点只有一个HMaster在运行

HMaster是总的管理者,但一个HRegionServer挂了后,HMaster会把该HRegionServer下的Region挂在到其它HRegionServer下。

当一个Region不断的变大,该Region会分裂成多个Region,HMaster根据负载情况,将Region挂在到相应的HRegionServer下


安装hbase

1.去官网下载hbase

hbase.apache.org

2解压,将HBASE_HOME/bin设置到环境变量中

3修改HBASE_HOME/conf/hbase-env.sh


export JAVA_HOME=/home/hadoop/app/jdk1.7.0_65

hbase自己管理zookeeper,如果你另外搭建了zookeeper集群,请把这个选项设置为false

 export HBASE_MANAGES_ZK=true


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

在<configuration></configuration>中增加

<configuration>
<property>
  <name>hbase.rootdir</name>
  <value>hdfs://wuke01:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
      <value>true</value>
      </property>
      <property>
        <name>hbase.zookeeper.quorum</name>
          <value>wuke01</value>
          </property>


</configuration>

注意:$HBASE_HOME/conf/hbase-site.xml的hbase.rootdir的主机和端口号与$HADOOP_HOME/conf/core-site.xml的fs.default.name的主机和端口号一致


如果hadop不认识hbase

修改增加:hadoop-env.sh
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/hbase-0.98.8/lib/*


启动hbase

start-hbase.sh


启动hbase控制台

hbase shell


输入list查看所有表


搭建hbase集群模式


wuke01:namenode datanode HMaster HRegionServer

wuke02:datanode HRegionServer

wuke05:zookeeper 

wuke06:zookeeper 

wuke07:zookeeper 


1.去官网下载hbase

hbase.apache.org

2解压,将HBASE_HOME/bin设置到环境变量中

3修改HBASE_HOME/conf/hbase-env.sh


export JAVA_HOME=/home/hadoop/app/jdk1.7.0_65



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

在<configuration></configuration>中增加

<property>
        <name>hbase.tmp.dir</name>
        <value> /usr/local/hbase-0.98.8/tmp</value>
    </property>
    <property >
        <name>hbase.rootdir</name>
     <value>hdfs://wuke01:9000/hbase</value>
</property>
<property >
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>wuke05,wuke06,wuke07</value>
    </property>





修改regionservers

wuke01

wuke02



如果是hbase1.3

修改hbase-site.xml

<configuration>
<property>
        <name>hbase.tmp.dir</name>
                <value>/app/hbase-1.3.0/tmp</value>
                    </property>
                        <property >
                                <name>hbase.rootdir</name>
                                     <value>hdfs://cluster1/hbase</value>
                                     </property>
                           <property >
                             <name>hbase.cluster.distributed</name>
                             <value>true</value>
                           </property>


                                                             <property>
                                                                     <name>hbase.zookeeper.quorum</name>
                                                                             <value>bdpp01,bdpp02,bdpp03</value>
                                                                                 </property>


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

<property>
 <name>hbase.client.scanner.timeout.period</name>
 <value>600000</value>
 <description>in case of timeout when scan data is large</description>
 </property>
 <property>
 <name>hbase.rpc.timeout</name>
 <value>600000</value>
 </property>

问题:hbase 不认识hadoop集群的nameservice

解决:将hadoop的core-site.xml  hdfs-site.xml拷贝到hbase的conf目录下


5.修改增加:hadoop-env.sh
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/hbase-0.98.8/lib/*



Master
http://192.168.1.176:60010/master-status
RegionServer
http://192.168.1.176:60030/


hbase1.3启动验证

http://bdpp03:60010/procedures.jsp

常见错误

Hbase hbck 检查
zookeeper连接错误:
启动zkServer.sh
zookeeper会话过期:
修改zoo.cfg
maxSessionTimeout=12000
重启zookeeper
or
分配更大的守护内存,修改hbase-env.sh
export HBASE_HEAPSEIZE=4000


XceiverCount 错误
修改hdfs-site.xml
dfs.datanamenode.max.xcievers=4096
重启hadoop


hbase shell



查看所有表

list

查看表的结构

# 语法:describe <table>
# 例如:查看表t1的结构
describe ‘t1’
注意:记得要加单引号



hbase客户端命令

名称
命令表达式
创建表
create '表名称', '列族名称1','列族名称2','列族名称N'
添加记录     
put '表名称', '行名称', ''列族名称:列名称', '值'
查看记录
get '表名称', '行名称'
查看表中的记录总数
count  '表名称'
删除记录
delete  '表名' ,'行名称' , '列名称'
删除一张表
先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步  drop '表名称'
查看所有记录
scan "表名称" 
查看某个表某个列中所有数据
scan "表名称" , {COLUMNS=>'列族名称:列名称'}
更新记录
就是重写一遍进行覆盖

create "stu","cf1","cf2"

put "stu","rowkey1",,"cf1:name","zhangsan"


get "stu","rowkey1"



下面给出的语法来改变列家族单元的最大数目。

alter 'stu' ,NAME=>'cf1',VERSIONS=>5


put 'stu','xiaoming','cf1:age','23'

put 'stu','xiaoming','cf1:age','24'

put 'stu','xiaoming','cf1:age','25'

put 'stu','xiaoming','cf1:age','26'

查询

get 'stu','xiaoming','cf1:age'

只会出现最后一次插入的数据cf1:age =26

如果想要看到全部的版本(5个版本)

get 'stu','xiaoming',{COLUMN=>'cf1:age',VERSIONS=>5}

想查看某一个时间戳的信息

get 'stu','xiaoming',{COLUMN=>'cf1:age',TIMESTAMP=>XXX}

scan 'stu',{LIMIT=>10}

删除xiaoming值的'info:age'字段
>delete 'users','xiaoming','info:age'
>get 'users','xiaoming'
§删除整行
>deleteall 'users','xiaoming'
§统计表的行数
>count 'users'
§清空表
>truncate 'users'

Hbase shell是JRuby写的,JRuby运行在JVM虚拟机中,所以HBase shell 中可以执行java方法
scan 'stu'
import java.util.Date
Date.new(1429496444488).toString
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.filter.PrefixFilter
scan "stu",{FILTER =>PrefixFilter.new(Bytes.toBytes('r')),COLUMN => 'cf'}
API参考:http://hbase.apache.org/apidocs/index.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值