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


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

    1.Hbase简介

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

      2. 以HDFS作为文件系统

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

      4. ZookKeeper作为协调工具

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

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

      三种模式:单机模式,伪分布式模式,分布式模式

          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时,控制台会打印关于停止的信息,会周期性的打印 ".",关闭脚本需要几分钟完成,如果集群中机器数量很多,那么执行时间会更长

  • 相关阅读:
    [LeetCode]题解(python):089-Gray Code
    [LeetCode]题解(python):088-Merge Sorted Array
    [LeetCode]题解(python):086-Partition List
    [LeetCode]题解(python):083-Remove Duplicates from Sorted List
    [LeetCode]题解(python):082-Remove Duplicates from Sorted List II
    [LeetCode]题解(python):081-Search in Rotated Sorted Array II
    [LeetCode]题解(python):080-Remove Duplicates from Sorted Array II
    [LeetCode]题解(python):079-Word Search
    [LeetCode]题解(python):078-Subsets
    软件开发冲刺5
  • 原文地址:https://www.cnblogs.com/wishyouhappy/p/3707904.html
Copyright © 2020-2023  润新知