Hbase学习笔记(安装和基础知识及操做)

参考书籍: Hadoop in action, 吴超沉思录html

1.Hbase简介

  1.面向列的分布式数据库java

  2. 以HDFS做为文件系统node

  3. 利用MapReduce处理Hbase中海量数据shell

  4. ZookKeeper做为协调工具数据库

  5. sqoop提供Hbase到关系型数据库中数据导入功能服务器

  6. Hive和pig提供高层语言支持如HSQLapp

 

  三种模式:单机模式,伪分布式模式,分布式模式负载均衡

      Hbase在单机模式下并不使用HDFS,直接将安装文件解压就能够运行(须要修改hbase-site.xml文件),默认状况下Hbase数据是存储在跟目录的tmp文件夹下, 使用start-hbase.sh和stop-hbase启动和关闭分布式

      伪分布式和分布式模式下须要使用HDFS文件系统工具

  

  关于服务器:

  HBase和Hadoop中有两种类型的机器:

  master: HDFS的NameNode,MapReduce的JobTracker,HBase的Master

  slave: HDFS的DataNode,MapReduce的TaskTracker,HBase的RegionServer

 

  关于region:

   HBase中扩展和负载均衡的基本单位称为region,region本质上是按行键排序的连续存储的区间,若是region太大,系统就会把它们动态划分;相反,就会把多个region合并,减小存储空间的数量

    一张表初始的时候只有一个region,用户开始向表中插入数据时,系统会检查这个region的大小,确保其不超过配置的最大值。若是超过了限制,系统会再中间键处将这个region拆分为两个大体相等的子region

   每个region只能由一台region服务器加载,每一台region服务器能够同时加载多个region

   region拆分和服务至关于其余系统提供的自动分区,当一个服务器出现故障后,该服务器上的region能够快速恢复,并得到细粒度的负载均衡。

 

2. 伪分布式安装

    分布式模式的运行须要依赖分布式文件系统,由于此时必须保证HDFS已运行

   准备: 安装Hadoop 详细见上一篇日志:hadoop分布式安装

   hbase版本:hbase-0.94.7-security.tar.gz

   安装目录 /usr/local

   步骤:

    1.  安装 tar -zxvf hbase-0.94.7-security.tar.gz 

    2. 重命名: mv hbase-0.94.7-security hbase

    3. 配置环境变量hbase_home  (vi /etc/profile)

    4. 修改配置文件

 

1. hbase_home/conf/hbase_env.sh

    修改java_home export 
    JAVA_HOME=/usr/local/jdk/

    修改zookeeper(最后一行)
    export HBASE_MANAGES_ZK=true(使用Hbase托管的ZooKeeper)


2. hbase_home/conf/hbase-site.xml文件
    
    configuration 中加入:

<property>  
  <name>hbase.rootdir</name>  
  <value>hdfs://hadoop0:9000/hbase</value>
</property>
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>
<property>
  <name>hbase.zookeeper.quorum</name>
  <value>hadoop0</value>
</property>
<property>
  <name>dfs.replication</name>   //指定Hlog和Hfile副本数,此参数值并不能大于HDFS节点数,若是datanode只有一台则此参数应该设置为1
  <value>1</value>
</property>

 

    5. 启动hbase

      先启动hdfs文件系统start-dfs.sh 或者hadoop(start-all.sh)

      启用hbase (start-hbase.sh)  关闭:stop-hbase.sh

      jps查看进程 (HMaster,HRegionServer, HQuorumPeer)

      http://hadoop0:60010能够查看管理界面,以下:

   

    6. 进程说明:

     HMaster: 管理Hbase table的DDL操做

          给region分配工做

     HResionServer: 原则上每一个slave对应一个HRegionServer

     HQuorumPeer: ZooKeeper的守护进程,此处咱们使用的是Hbase内置的ZooKeeper(在hbase-env.sh中有配置)

      

3. 分布式安装

   准备条件: hadoop分布式环境已安装,查看hadoop分布式安装

         hadoop0主机上hbase伪分布已安装完成

   安装:

   1. scp -rp /usr/local/hbase hadoop1:/usr/local

   2. 在hadoop0上更改hbase_home/conf/regionservers  将localhost更改成hadoop1

      regionservers文件中列出了全部运行HBase的机器,配置相似于Hadopp的slaves文件,Hbase启动的时候,会将次文件中列出的机器启动,一样关闭时会将他们关闭

      更改后在hadoop0和hadoop1两台机器中,Hbase Master及HDFS NameNode是运行在hadoop0上, RegionServer运行在Hadoop1上

   3. 

在hbase-site.xml 中

<property>
    <name>hbase.cluster.distributed</name> <value>true</value>
</property>
此处值设置为true即为分布式,如果false,则是伪分布式

<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop0,hadoop1</value>
</property>

全分布式模式的Hbase集群须要运行ZooKeeper实例,默认状况下HBase自身维护着一组默认的ZooKeeper实例,能够本身配置实例,这样Hbase会更加健壮

注意:使用默认的实例时,HBase将自动启动或中止ZooKeeper,当使用独立的ZooKeeper实例时,须要用户手动启动和中止ZooKeeper实例



 

   4. 启动hbase, 同伪分布式模式

      先启动hdfs文件系统start-dfs.sh 或者hadoop(start-all.sh)

      启用hbase (start-hbase.sh)  关闭:stop-hbase.sh

   5. jps查看,以下:

    hadoop0上进程:

     

   hadoop1上进程:

  

  同理可经过 hostname:60010访问hbase管理界面,同分布式安装部分

4. 数据模型

  1. Hbase数据库采用了和Bigtable很是相似的数据类型,表格是稀疏的;

  1. row key 行键,table的主键

  2. timestamp 时间戳,数据操做时对应的时间戳,能够当作数据的version number

  3. Column Family 列簇,每一个family能够由任意多个column组成,列名是<族名>:<标签>形式;一个表格的族名时固定的,除非使用管理员权限来改变表格的族名; 不过能够在任什么时候候添加新的标签;

    eg:course对于表来讲是一个有两个列的列族(该列族由两个列组成math和art);

 

rowkey

name

TimeStamp

course

math

art

wish

wish

t1

t2

t3

97

93

97

98

76

99

rain

rain

t4

100

90

 

     4.两张特殊的表  -ROOT- 和 .META.

  做用以下:(即-ROOT-记录.META.的region信息,.META.记录用户表的region信息)

  

 

  关系以下:

    

 

 

 

基本操做

  (注意操做后不要加分号)

  (常量不须要用引号引发来,在shell中输入Object.constants命令能够查看常量) 

  (表名和列名都须要加引号,不区分单双引号) 

  Hbase shell,是Hbase的命令行工具,命令行中执行hbase shell便可进入hbase shell命令行 

  1) list  查看hbase中全部表

  2) 建立表: 

    create '表名','列簇1','列簇2'....

create 'student', 'name','grade','course'

  在管理界面中查看student

 

  3)describe 查看表结构

    describe '表名'

 

   eg: describe 'student'

hbase(main):003:0> describe "student"
DESCRIPTION                                          ENABLED
 'student', {NAME => 'course', DATA_BLOCK_ENCODING = true
 > 'NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE
 => '0', VERSIONS => '3', COMPRESSION => 'NONE', MIN
 _VERSIONS => '0', TTL => '2147483647', KEEP_DELETED
 _CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY
 => 'false', ENCODE_ON_DISK => 'true', BLOCKCACHE =>
  'true'}, {NAME => 'grade', DATA_BLOCK_ENCODING =>
 'NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE =>
  '0', VERSIONS => '3', COMPRESSION => 'NONE', MIN_V
 ERSIONS => '0', TTL => '2147483647', KEEP_DELETED_C
 ELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY =>
  'false', ENCODE_ON_DISK => 'true', BLOCKCACHE => '
 true'}, {NAME => 'name', DATA_BLOCK_ENCODING => 'NO
 NE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0
 ', VERSIONS => '3', COMPRESSION => 'NONE', MIN_VERS
 IONS => '0', TTL => '2147483647', KEEP_DELETED_CELL
 S => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'f
 alse', ENCODE_ON_DISK => 'true', BLOCKCACHE => 'tru
 e'}

  

 

    4)插入数据和查看数据

   put '表名','行键名','列名','value','列名2','value2','family:列名1','value3'.......

put 'student','wish','name:','wish'

    查询数据:

   get '表名','行名'

get 'student','wish'

 

 

  插入更多数据

hbase(main):004:0> put 'student','wish','course:English','100'


hbase(main):005:0> put 'student','wish','course:Chinese','60'


hbase(main):006:0> put 'student','rain','course:Chinese','100'


hbase(main):007:0> put 'student','rain','course:English','200'

 

  查看表中数据: scan 'student'

 

  其余get例子:

get 'student','wish','course'

get 'student','wish',['course']

get 'student','wish',['course','name']

 

 

  5)删除数据 

delete 'student','wish','course:Math'

 

  6)删除表

    需中止表的可用性,再删除表   

disable 'student'drop 'student'

 

  7) 统计行数

  

count 'student'

 

   8)经常使用Hbase shell命令截图

 

注意事项


 

 

1.关于Hadoop

  1.  目前的HBase只能依赖特定的Hadoop版本,HBae和Hadoop之间的RPC是版本话的,须要调用方与被调用方相互匹配,细微的差别可能致使通讯失败

  2. 因为Hadoop依赖于Hadoop,它要求Hadoop的JAR必须部署在HBase的lib目录下。HBase使用的Hadoop版本必须与底层Hadoop集群上使用的Hadoop版本一直,于是使用Hadoop集群上运行的JAR替换HBase的lib目录中依赖的Hadoop的JAR能够

      避免版本不匹配的问题

  3. 集群中全部的节点都要更新为同样的JAR,不然版本不匹配问题可能形成集群没法启动或者假死现象

 

2.关于HBase Shell

  1.若是使用的分布式模式,那么在关闭Hadoop以前必定要确认HBase已经被正常关闭了

  2. 使用stop-hbase.sh关闭HBase时,控制台会打印关于中止的信息,会周期性的打印 ".",关闭脚本须要几分钟完成,若是集群中机器数量不少,那么执行时间会更长

相关文章
相关标签/搜索