• 分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建


    一、hbase简介

    HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。因此,它可以容错地存储海量稀疏的数据。
    HBase在列上实现了BigTable论文提到的压缩算法、内存操作和布隆过滤器。HBase的表能够作为MapReduce任务的输入和输出,可以通过Java API来存取数据,也可以通过REST、Avro或者Thrift的API来访问。 — 维基百科

    参考文档
    Apache HBase ™ Reference Guide
    HBase 官方文档中文版
    列式存储hbase系统架构学习

    (slideshare PPT 分享服务在大陆是被墙的,不能科学上网?查看使用shadowsocks服务享受自由网络学习方法)

    二、整体环境说明

    hbase的存储为 HDFS,所以运行hbase是需要hadoop环境的,hadoop 集群搭建过程参考之前文章http://ixirong.com/2015/05/22/how-to-install-hadoop-cluster/

    操作系统: cenos 6.4 ,三台192.168.9.92、192.168.9.93、192.168.9.94
    jdk版本: 1.7.0_75
    hadoop版本: 2.5.2 (目的与hbase兼容)

    hbase 集群3个节点,一主两从,如下:

    角色ip运行进程
    master 192.168.9.92 JobHistoryServer,ResourceManager,NameNode,NodeManager,DataNode,Main,HMaster
    slave1 192.168.9.93 NodeManager,DataNode,HRegionServer
    slave2 192.168.9.94 NodeManager,DataNode,HRegionServer

    hbase 的部署完全支持单机和伪分布式,如果没有机器可以按照这两种方式来部署,详情参考:http://blog.csdn.net/andie_guo/article/details/44086389

    三、分布式集群搭建

    hbase 集群的搭建如同hadoop一样,并不困难,解压完文件、修改环境变量、修改启动时候的配置文件,启动测试就ok了,下面一步步来说明,最后提供一键安装部署脚本。
    hbase 版本的下载参考官网 http://mirrors.cnnic.cn/apache/hbase/ ,本文使用的版本为1.1.0.1/ 22-May-2015 02:20 -

    3.1 安装 hbase

    将下载下来的文件hbase-1.0.1-bin.tar.gz,解压到 /home/hadoop/目录下面 ,命令如下:

    1
    2
    tar -zxvf hbase-1.0.1-bin.tar.gz -C /home/hadoop
    mv hbase-1.0.1 hbase # 重命名

    3.2 配置环境变量

    第一步操作后会存在/home/hadoop/hbase这个目录,下面需要修改环境变量vim /etc/profile,添加如下:

    1
    2
    3
    4
    export  PATH=$PATH:/home/hadoop/hbase/bin

    # 使本次修改生效
    source /etc/profile

    3.3 hbase配置文件修改

    hbase 相关的配置主要包括hbase-env.shhbase-site.xmlregionservers三个文件,都在 /home/haoop/hbase/conf目录下面:

    3.3.1 修改 hbase-env.sh

    主要是 JAVA_HOME、HADOOP_HOME、日志等的位置:

    1
    2
    3
    4
    5
    6
    7
    8
    export JAVA_HOME=/opt/jdk1.7.0_75
    export HBASE_CLASSPATH=/home/hadoop/hbase/conf
    # 此配置信息,设置由hbase自己管理zookeeper,不需要单独的zookeeper。
    export HBASE_MANAGES_ZK=true
    export HBASE_HOME=/home/hadoop/hbase
    export HADOOP_HOME=/home/hadoop/hadoop-2.5.2
    #Hbase日志目录
    export HBASE_LOG_DIR=/home/hadoop/hbase/logs

    3.3.2 修改 hbase-site.xml

    xml 包含了几个关键的属性

    属性说明
    hbase.rootdir hbase数据存储目录,/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。注意:需要和hadoop的core-site.xml中的文件保持一致
    hbase.cluster.distributed 是否分布式,单击和伪分布式需要设置为 false
    hbase.master 指定master机器
    hbase.zookeeper.quorum zk集群机器,多个英文逗号隔开,注意:必须是基数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <configuration>
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
    </property>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <property>
    <name>hbase.master</name>
    <value>master:60000</value>
    </property>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,slave1,slave2</value>
    </property>
    </configuration>

    3.3.3 修改regionservers

    添加HRegionServer的机器,目前为slave1和slave2两台,如下 vim /home/hadoop/hbase/conf/regionservers

    1
    2
    slave1
    slave2

    上面这几步,需要在每台机器上面都执行下,执行完毕后,hbase集群就算搭建完了,因为机器一多,执行这些命令很是烦人,所以提供一键安装部署脚本,hbase_tar.zip文件请访问百度网盘,密码为2a4g,脚本如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #!/bin/bash

    # author: xirong
    # date : 2015-05-11

    #####
    # hbase 的数据存储在hdfs中,所以依赖hadoop的环境,安装配置hbase环境需要搭建好的hadoop环境
    #
    ####

    # 解压文件
    # unzip hbase.zip -d /home/hadoop/
    # 赋予权限
    sudo chown -R hadoop:hadoop /home/hadoop/hbase

    sudo sed -i '$ a # hbase configuration' /etc/profile
    sudo sed -i '$ a export PATH=$PATH:/home/hadoop/hbase/bin' /etc/profile

    source /etc/profile
    hbase version
    echo 'congratilations ,hbase has been installed on your machine!'

    echo 'start change hbase-env.sh configuration ……'
    echo '# 添加环境变量' >> /home/hadoop/hbase/conf/hbase-env.sh
    echo 'export JAVA_HOME=/opt/jdk1.7.0_75' >> /home/hadoop/hbase/conf/hbase-env.sh
    echo 'export HBASE_CLASSPATH=/home/hadoop/hbase/conf' >> /home/hadoop/hbase/conf/hbase-env.sh
    echo 'export HBASE_MANAGES_ZK=true' >> /home/hadoop/hbase/conf/hbase-env.sh
    echo 'export HBASE_HOME=/home/hadoop/hbase' >> /home/hadoop/hbase/conf/hbase-env.sh
    echo 'export HADOOP_HOME=/home/hadoop/hadoop-2.5.2' >> /home/hadoop/hbase/conf/hbase-env.sh
    echo 'export HBASE_LOG_DIR=/home/hadoop/hbase/logs' >> /home/hadoop/hbase/conf/hbase-env.sh


    echo 'finish hbase-env.sh and start change hbase-site.xml configuration ……'
    cp -f /home/hadoop/hbase/conf/hbase-site.xml /home/hadoop/hbase/conf/hbase-site.xml.bak

    sed -i '/</configuration>/d' /home/hadoop/hbase/conf/hbase-site.xml

    sed -i '$ a <property>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a <name>hbase.rootdir</name>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a <value>hdfs://master:9000/hbase</value>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a </property>' /home/hadoop/hbase/conf/hbase-site.xml

    sed -i '$ a <property>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a <name>hbase.cluster.distributed</name>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a <value>true</value>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a </property>' /home/hadoop/hbase/conf/hbase-site.xml

    sed -i '$ a <property>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a <name>hbase.master</name>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a <value>master:60000</value>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a </property>' /home/hadoop/hbase/conf/hbase-site.xml

    sed -i '$ a <property>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a <name>hbase.zookeeper.quorum</name>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a <value>master,slave1,slave2</value>' /home/hadoop/hbase/conf/hbase-site.xml
    sed -i '$ a </property>' /home/hadoop/hbase/conf/hbase-site.xml

    sed -i '$ a </configuration>' /home/hadoop/hbase/conf/hbase-site.xml

    echo 'finish hbase-site.xml configuration and start change regionservers ……'
    cp -f /home/hadoop/hbase/conf/regionservers /home/hadoop/hbase/conf/regionservers.bak
    echo 'slave1' >> /home/hadoop/hbase/conf/regionservers
    echo 'slave2' >> /home/hadoop/hbase/conf/regionservers

    echo 'congratilations ,all conf has been changed ! enjoy hbase !'

    四、hbase集群测试

    集群中所有节点完成上述HBase部署之后,即可启动HBase集群。启动顺序:hadoop-> hbase,如果使用自己安装的zookeeper启动顺序是:hadoop-> zookeeper-> hbase
    停止顺序:hbase-> zookeeper-> hadoop。
    hadoop 启动方法:$HADOOP_HOME/bin/start_all.sh ,jps 命令后看到hadoop的几个进程说明就是ok的,详情参考
    zk 启动方法: sh $ZOOKEEPER_HOME/bin/zkServer.sh start, 启动后可以查看 zk的状态 sh $ZOOKEEPER_HOME/bin/zkServer.sh status ,发现 leader或者Fowler,就说明是ok的,详情参考

    hbase启动方法如下,执行jpsJava进程查看命令后,出现下面的情况就证明是ok的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    # master上启动,注意:只需要在master机器上面执行 start-hbase.sh就行,会自动启动slave1和slave2
    [hadoop@master bin]$ start-hbase.sh
    slave1: starting zookeeper, logging to /home/hadoop/hbase/logs/hbase-hadoop-zookeeper-slave1.out
    slave2: starting zookeeper, logging to /home/hadoop/hbase/logs/hbase-hadoop-zookeeper-slave2.out
    master: starting zookeeper, logging to /home/hadoop/hbase/logs/hbase-hadoop-zookeeper-master.out
    starting master, logging to /home/hadoop/hbase/logs/hbase-hadoop-master-master.out
    slave2: starting regionserver, logging to /home/hadoop/hbase/logs/hbase-hadoop-regionserver-slave2.out
    slave1: starting regionserver, logging to /home/hadoop/hbase/logs/hbase-hadoop-regionserver-slave1.out
    localhost: starting regionserver, logging to /home/hadoop/hbase/logs/hbase-hadoop-regionserver-master.out
    [hadoop@master bin]$ jps
    23598 HQuorumPeer
    19655 JobHistoryServer
    10397 ResourceManager
    17688 DataNode
    23651 HMaster
    23814 Jps
    18141 NodeManager
    17597 NameNode

    # slave1 验证
    [hadoop@slave1 ~]$ jps
    680 Jps
    538 HRegionServer
    14727 DataNode
    14856 NodeManager

    # slave2 验证
    [hadoop@slave2 ~]$ jps
    375 Jps
    14555 NodeManager
    32664 HRegionServer
    14424 DataNode

    五、hbase shell 操作

    hbase提供的shell脚本就如果MySQL的一样,简单、强大,如下面例子中的几个:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [hadoop@master bin]$ hbase shell
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/home/hadoop/hbase/lib/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-2.5.2/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
    2015-05-25 15:53:06,988 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    HBase Shell; enter 'help<RETURN>' for list of supported commands.
    Type "exit<RETURN>" to leave the HBase Shell
    Version 1.0.1, r66a93c09df3b12ff7b86c39bc8475c60e15af82d, Fri Apr 17 22:14:06 PDT 2015

    hbase(main):002:0> status
    2 servers, 0 dead, 1.0000 average load

    hbase(main):005:0> list
    TABLE
    0 row(s) in 0.3430 seconds

    这部分操作请参考如下文章,个人认为写的通俗易懂,还很全面,适合入门体验
    【HBase基础教程】3、HBase Shell DDL操作
    【HBase基础教程】4、HBase Shell DML操作
    HBase shell的基本用法

    六、hbase 实践优化

  • 相关阅读:
    通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise
    计量经济学 第四版 课后答案 李子奈 潘文卿 版 课后 练习题答案 高等教育出版社 课后习题答案
    统计学 第四版 课后题答案 袁卫 庞皓 贾俊平 杨灿 版 思考与练习题 课后答案 案例分析 答案与解析
    golang逃逸分析
    通过实例理解Java网络IO模型
    带你逆袭kafka之路
    解决2020-3-27 github无法访问
    图床
    Python彩蛋--zen of python
    python3内置函数大全
  • 原文地址:https://www.cnblogs.com/yudar/p/4883220.html
Copyright © 2020-2023  润新知