HBASE 系列-入门

作者: 不务正业的coder | 来源:发表于2017-08-22 10:18 被阅读91次

    HBase最新稳定版本是2017年7月份的1.2.6版本。很多用户还是0.92.x 。
    尽管版本不同,原理确是相似的。若觉得长,可挑重点看。
    下载地址:hbase-1.2.6-bin.tar.gz

    说明

    本文主要讲在本地测试环境的HBASE的安装配置,可以安装VMWare虚拟机,
    CDH版本会在另外文章发表。
    

    1.简介

    以下简单理解,有个感性认识,面试时可忽悠

    1. 一种类似KV的NoSql数据库。
    2. 一种“强一致性”读写,而非“最终一致性”的数据存储,很适合快速实时聚合统计的计算任务。
    3. 随着你的数据增长,Hbase会自动分片sharding,重新分布数据。
    4. RegionServer 可以自动fallover检测。
    5. 可以用HDFS作为文件存储系统
    6. 支持作为大规模MR并行计算的数据源和存储地。
    7. 可以用Java Client API 操作HBASE
    8. 可以用Thrift和Restful 非JAVA语言操作
    9. 海量数据查询时,可以用Block Cache和Bloom Filter作为优化

    2.使用场景

    首先,你要有足够的数据,有亿级别和数十亿级别时候比较适合,百万,千万级别的用传统的RDBMS数据库是更好的选择。

    其次,你可以容忍没有RDBMS那种字段类型,二级索引,事务,高级查询语法等功能.

    第三,你要确保有足够的硬件资源,HDFS的datanode最有有5个(副本因子为3,NameNode,SecondNameNode 2个)。

    有HDFS了,为何还需要HBase?

    HDFS只是非常适合存储大规模files而已,并没有提供record的快速检索和更新功能,而HBASE则提供。

    3. 安装

    重点注意事项

    3.1 JAVA_HOME 配置

    JAVA_HOME=/usr/jdk (注,必须在JDK7以上)

    在HBASE集群中的每个节点 hbase-env.sh里配置

    HBASE&JDK版本的支持

    Base Version JDK7 JDK 8
    2.0 Not Supported yes
    1.3 yes yes
    1.2 yes yes
    1.1 yes Running with JDK 8 will work but is not well tested.

    3.2 NTP设置

    保证cluster集群里各个节点的时间一致。(自己去度娘)

    3.3 设置ulimit (要学会估算)

    Hbase 可能要求一次打开大量的文件,而系统个默认可能1024.最好是1024的整数备,如102400.

    ulimit -n

    估算示例:

    1.一个RegionServer含100个region
    2.一个region有3个ColumnFamily列簇
    3.一个ColumnFamily平均3个StoreFiles
    
    那么,JVM会open 100*3*3=900个 file descriptors
    

    3.1单机 Standalone HABE

    $ tar xzvf hbase-3.0.0-SNAPSHOT-bin.tar.gz
    $ cd hbase-3.0.0-SNAPSHOT/

    若果你在本地电脑安装,那么一个Instance就包行了所有的守护线程如Master, RegionServers, and ZooKeeper。他们运行在一个JVM虚拟机上。

    如果你的Hbase是 0.94.x之前版本,需要配置
    vi /ets/host127.0.0.1 localhost 
    否则可能会报错。
    

    不需要自己手动配置hbase data目录,在base-site.xml配置可自动生成

      <configuration>
     <property>
       <name>hbase.rootdir</name>
       <value>file:///home/testuser/hbase</value>
     </property>
     <property>
       <name>hbase.zookeeper.property.dataDir</name>
       <value>/home/testuser/zookeeper</value>
     </property>
    </configuration>
    

    启动HBASE

    bin/start-hbase.sh

    Hbase WEB UI访问

    http://localhost:16010

    Hbase 启动和停止

    ./bin/hbase shell

    $ ./bin/stop-hbase.sh

    3.2 伪分布式

    vi hbase-site.xml
    增加,如下

    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    

    同时,修改hbase.root ,在HDFS里也也不需要手动创建目录

    <property>
      <name>hbase.rootdir</name>
      <value>hdfs://localhost:8020/hbase</value>
    </property>
    

    重启hbase服务后,可用hadoop命令看到结果

    $ ./bin/hadoop fs -ls /hbase
    Found 7 items
    drwxr-xr-x   - hbase users          0 2014-06-25 18:58 /hbase/.tmp
    drwxr-xr-x   - hbase users          0 2014-06-25 21:49 /hbase/WALs
    drwxr-xr-x   - hbase users          0 2014-06-25 18:48 /hbase/corrupt
    drwxr-xr-x   - hbase users          0 2014-06-25 18:58 /hbase/data
    -rw-r--r--   3 hbase users         42 2014-06-25 18:41 /hbase/hbase.id
    -rw-r--r--   3 hbase users          7 2014-06-25 18:41 /hbase/hbase.version
    drwxr-xr-x   - hbase users          0 2014-06-25 21:49 /hbase/oldWALs
    

    3.3 Full 分布式 HBASE

    三个节点:node-a ,node-b,node-c

    1. 保证各个节点可以相互访问,关闭防火墙(否则,可能会出现 no route to host)
    2. node-a 必须可以登录 node-b 和 node-c (包括自身) ,如此以来,可以启动各个节点的守护进程。

    在 node-a 上 生成SSH access

    $ ssh-keygen -t rsa
    $ cat id_rsa.pub >> ~/.ssh/authorized_keys

    使用下面命令,将公钥拷贝到其它节点上

    ssh-copy-id -i ~/.ssh/id_rsa.pub node-a
    ssh-copy-id -i ~/.ssh/id_rsa.pub node-b
    ssh-copy-id -i ~/.ssh/id_rsa.pub node-c

    chmod 600 authorized_keys

    3.若backup角色的master启动了,也需要按2操作来一遍,让node-b可以访问其它节点。 注意,别覆盖了,使用>> 而不是>

    Node Name Master ZooKeeper RegionServer
    node-a.example.com yes yes no
    node-b.example.com backup yes yes
    node-c.example.com yes yes yes

    vi hbase-site.xml

    增加zk配置

    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>node-a.example.com,node-b.example.com,node-c.example.com</value>
    </property>
    <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/usr/local/zookeeper</value>
    </property>
    

    当Node-a的hbase配置好后,打包scp到node-b和node-c节点。
    在node-a节点启动

    start-hbase.sh

    启动的顺序一般是:

    1.ZooKeeper starts first,
    2.followed by the master,
    3.then the RegionServers,

    1. finally the backup masters.

    接下来验证下是否启动成功,使用Jps命令
    node-a:

    $ jps
    20355 Jps
    20071 HQuorumPeer (zk)
    20137 HMaster

    node-b:

    $ jps
    15930 HRegionServer
    16194 Jps
    15838 HQuorumPeer (zk)
    16010 HMaster (backup)

    node-c :

    $ jps
    13901 Jps
    13639 HQuorumPeer (zk)
    13737 HRegionServer

    HQuorumPeer是由HBase控制和启动的,这里的zookeeper是HBASE自带的,一般适用于测试环境,生成环境建议用外部独立的ZK集群。
    自带和外部独立的zk进程区别:

    HQuorumPeer :自带
    QuorumPeer :独立

    HBase WEI UI 访问

    http://node-a.example.com:16010/ 主master
    http://node-b.example.com:16010/ 备master

    3个节点的hbase集群,其实并不是非常有弹性,你可以试试kill掉master进程或RegionServer进程 观察日志看看。

    相关文章

      网友评论

        本文标题:HBASE 系列-入门

        本文链接:https://www.haomeiwen.com/subject/cpocdxtx.html