1、相关环境

centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4

本篇文章仅涉及hbase集群的搭建,关于hadoop与zookeeper的相关部署参见上篇文章http://www.cnblogs.com/learn21cn/p/6184490.html

目标如下:

master 192.1.68.1.215 HMaster
data1 192.168.1.218 HMaster备用 HRegionServer
data2 192.168.1.219 HRegionServer

2、关于时间同步的问题

安装hbase,需要服务器之间的时间同步,10秒之内是可接受的范围

1> 安装与配置NTP

每个节点都要安装,以master来作为时间服务器

# 安装NTP<br/>
yum install ntp -y<br/>
# 查看NTP状态<br/>
service ntpd status<br/>
# 配置文件<br/>
vim /etc/ntp.conf

以下是配置文件内容

#禁止所有机器来进行连接<br/>
restrict default ignore<br/>
#允许内网其他机器同步时间<br/>
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap<br/>
#配置时间服务器的地址为本机(注视掉server0~server3)<br/>
server  127.127.1.0

之后个节点与master进行同步,并设置NTP开机自动启动

# 终端执行命令同步时间<br/>
ntpdate 192.168.1.215<br/>
# 设置开机自动启动<br/>
systemctl restart ntpd.service<br/>
systemctl enable ntpd.service

以上为最初同步

2> 设置定时任务,使服务器定时同步时间

执行以下命令 :

crontab -e<br/># 在centos7中,可以直接vim /etc/crontab,效果是一样的,只不过需要指定用户 

配置文件写入以下内容:

        *    *    *    /usr/sbin/ntpdate    192.168.1.215    >> /data/ntpd.log

保存后执行以下命令查看定时任务,并重启服务

crontab -l<br/>
# 重启<br/>
systemctl restart  crond.service

3、设置linux系统最大进程数和最大文件打开数

使用root账号

root            soft    nproc<br/>
root            hard    nproc<br/>
root            soft    nofile<br/>
root            hard    nofile<br/>
hadoop          soft    nproc<br/>
hadoop          hard    nproc<br/>
hadoop          soft    nofile<br/>
hadoop          hard    nofile          

设置完重新登录shell,执行以下命令查看结果

ulimit -a 

hbase集群安装与部署

4、调整linux内核参数

打开文件 /etc/sysctl.conf,进行以下设置

net.ipv4.ip_forward=<br/>
net.ipv4.conf.default.rp_filter =<br/>
net.ipv4.conf.default.accept_source_route =<br/>
kernel.core_uses_pid =<br/>
net.ipv4.tcp_syncookies =<br/>
net.bridge.bridge-nf-call-ip6tables =<br/>
net.bridge.bridge-nf-call-iptables =<br/>
net.bridge.bridge-nf-call-arptables =<br/>
kernel.msgmnb =<br/>
kernel.msgmax =<br/>
kernel.shmmax =<br/>
kernel.shmall =<br/>
# 提高系统支持的最大SYN半连接数,表示SYN队列的长度,默认为1024,加大队列长度为,可以容纳最多等待连接的网络连接数<br/>
net.ipv4.tcp_max_syn_backlog =<br/>
net.core.netdev_max_backlog=<br/>
net.core.somaxconn =<br/>
fs.file-max =<br/>
net.core.wmem_default =<br/>
net.core.rmem_default =<br/>
net.core.rmem_max =<br/>
net.core.wmem_max =<br/>
net.ipv4.tcp_timestamps =<br/>
# 减少系统SYN连接重试次数(默认是5)<br/>
# 为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK,也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。<br/>
net.ipv4.tcp_synack_retries =<br/>
net.ipv4.tcp_syn_retries =<br/>
net.ipv4.tcp_mem =<br/>
net.ipv4.tcp_max_orphans =<br/>
# 以下两参数可解决生产场景中大量连接的Web(cache)服务器中TIME_WAIT过多问题<br/>
# 表示开启重用。允许将TIME-WAIT的sockets重新用于新的TCP连接,默认为0表示关闭<br/>
net.ipv4.tcp_tw_reuse =<br/>
# 打开TIME-WAIT套接字重用及回收功能,表示开启TCP连接中TIME-WAIT的sockets的快速收回功能,默认为0表示关闭。<br/>
net.ipv4.tcp_tw_recycle =<br/>
# 当keepalive起用的时候,TCP发送keepalive消息的频度,缺省是2小时,改为1200秒<br/>
net.ipv4.tcp_keepalive_time =<br/>
net.ipv4.tcp_syncookies=<br/>
# 减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接,缺省值是60秒<br/>
net.ipv4.tcp_fin_timeout =<br/>
net.ipv4.tcp_keepalive_intvl =<br/>
net.ipv4.tcp_keepalive_probes =<br/>
# 允许系统打开的端口范围,表示用于向外连接的端口范围<br/>
net.ipv4.ip_local_port_range =<br/>
# 网卡eno16777736<br/>
net.ipv4.conf.eno16777736.send_redirects =<br/>
net.ipv4.conf.lo.send_redirects =<br/>
net.ipv4.conf.default.send_redirects =<br/>
net.ipv4.conf.all.send_redirects =<br/>
net.ipv4.icmp_echo_ignore_broadcasts =<br/>
# 网卡eno16777736<br/>
net.ipv4.conf.eno16777736.accept_source_route =<br/>
net.ipv4.conf.lo.accept_source_route =<br/>
net.ipv4.conf.default.accept_source_route =<br/>
net.ipv4.conf.all.accept_source_route=<br/>
net.ipv4.icmp_ignore_bogus_error_responses =<br/>
kernel.core_pattern = /tmp/core<br/>
vm.overcommit_memory = 

之后,一定要执行以下命令进行检查,防止出现错误,例如“没有那个文件或目录”之类

# 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载<br/>
sysctl -p

5、配置文件

1> hbase-env.sh

# 配置JDK安装路径<br/>
export JAVA_HOME=/usr/java/jdk<br/>
# 配置Hadoop安装路径<br/>
export HADOOP_HOME=/usr/Apache/hadoop<br/>
# 设置HBase的日志目录<br/>
export HBASE_LOG_DIR=${HBASE_HOME}/logs<br/>
# 设置HBase的pid目录<br/>
export HBASE_PID_DIR=${HBASE_HOME}/pids<br/>
# 使用独立的ZooKeeper集群<br/>
export HBASE_MANAGES_ZK=false<br/>
# 设置HBase内存堆的大小<br/>
export HBASE_HEAPSIZE=<br/>
# 设置HMaster最大可用内存<br/>
export HBASE_MASTER_OPTS="-Xmx512m"<br/>
# 设置HRegionServer最大可用内存<br/>
export HBASE_REGIONSERVER_OPTS="-Xmx512m"

注意:
企业实际部署时,datanode一般设置16到20G左右,过小与过大都不合适;regionserver一般可以设置32到48,或者以上;hmaster一般4到8G足够了。此外实际部署当中,hmaster与regionserver一般不在同一机器中。

2> hbase-site.xml参数说明见注释

<configuration><br/>
    <!-- 开启分布式模式 --><br/>
    <property><br/>
        <name>hbase.cluster.distributed</name><br/>
        <value>true</value><br/>
    </property>

    <!-- 设置HRegionServers目录 --><br/>
    <property><br/>
        <name>hbase.rootdir</name><br/>
        <value>hdfs://nscluster/hbase</value><br/>
    </property>

    <!-- 设置HMaster的rpc端口 --><br/>
    <property><br/>
        <name>hbase.master.port</name><br/>
        <value>16000</value><br/>
    </property>

    <!-- 设置HMaster的http端口 --><br/>
    <property><br/>
        <name>hbase.master.info.port</name><br/>
        <value>16010</value><br/>
    </property>

    <!-- 指定缓存文件存储的路径 --><br/>
    <property><br/>
        <name>hbase.tmp.dir</name><br/>
        <value>/usr/Apache/hbase/data/tmp</value><br/>
    </property>  

    <!-- 指定ZooKeeper集群位置 --><br/>
    <property><br/>
        <name>hbase.zookeeper.quorum</name><br/>
        <value>master,data1,data2</value><br/>
    </property>

    <!-- 指定ZooKeeper集群端口 --><br/>
    <property><br/>
        <name>hbase.zookeeper.property.clientPort</name><br/>
        <value>2181</value><br/>
    </property>

    <!--指定Zookeeper数据目录,需要与ZooKeeper集群上配置相一致 --><br/>
    <property><br/>
        <name>hbase.zookeeper.property.dataDir</name><br/>
        <value>/usr/Apache/zookeeper/data</value><br/>
    </property>

    <!-- ZooKeeper客户端同时访问的并发连接数,需要与ZooKeeper集群上配置相一致,可设置为2000 --><br/>
    <property><br/>
        <name>hbase.zookeeper.property.maxClientCnxns</name><br/>
        <value>60</value><br/>
    </property>

    <!-- 优化配置项 --><br/>
    <!-- 关闭分布式日志拆分 --><br/>
    <property><br/>
        <name>hbase.master.distributed.log.splitting</name><br/>
        <value>false</value><br/>
    </property>

    <!-- hbase客户端rpc扫描一次获取的行数,增大参数可以提高扫描次数,但同时会增加内存的使用 --><br/>
    <property><br/>
        <name>hbase.client.scanner.caching</name><br/>
        <value>2000</value><br/>
    </property>

    <!-- HRegion分裂前最大的文件大小(以下数字标识了10G)当HStoreFile 大于这个文件时,就会split 成两个文件 --><br/>
    <property><br/>
        <name>hbase.hregion.max.filesize</name><br/>
        <value>10737418240</value><br/>
    </property>

    <!-- 一个HRegionServer中最大的region数量 --><br/>
    <property><br/>
        <name>hbase.regionserver.reginoSplitLimit</name><br/>
        <value>2000</value><br/>
    </property>

    <!-- 当某一个region的storefile个数达到该值则block写入,等待compact,或者说定义storefile数量达到多少时block住update操作  默认7 --><br/>
    <!-- 设置过小会使影响系统吞吐率,但也不应过大,经验值是15到20左右。太大的话会在系统压力很大时使storefile过多,compact一直无法完成,扫库或者数据读取的性能会受到影响。--><br/>
    <!--同时,可以适当提高一些hbase.hstore.compactionThreshold,增加compact的处理线程数,加快compact的处理速度而避免block--><br/>
    <property><br/>
        <name>hbase.hstore.blockingStoreFiles</name><br/>
        <value>14</value><br/>
    </property>

    <!-- StoreFile的个数超过这个数就开始合并 默认值为3--><br/>
    <property><br/>
        <name>hbase.hstore.compactionThreshold</name><br/>
        <value>6</value><br/>
    </property>

    <!-- 超过memstore大小的倍数达到该值则block所有写入请求,自我保护 --><br/>
    <property><br/>
        <name>hbase.hregion.memstore.block.multiplier</name><br/>
        <value>20</value><br/>
    </property>

    <!-- service工作的sleep间隔 默认10000--><br/>
    <property><br/>
        <name>hbase.server.thread.wakefrequency</name><br/>
        <value>500</value><br/>
    </property>

    <!-- 以下三项通常联合起来调整 --><br/>
    <!-- MemStore flush 顺序是按照大小降序执行的,直到刷新到MemStore使用内存略小于该百分比 --><br/>
    <property><br/>
        <name>hbase.regionserver.global.memstore.lowerLimit</name><br/>
        <value>0.3</value><br/>
    </property>

    <!-- hbase.regionserver.global.memstore.upperLimit与hbase.block.cache.size这两项合起来不能超过0.8,谁大谁小取决于业务偏向于读还是写,如果读多一些就把读缓存设置大一些 --><br/>
    <!-- 默认0.4 当MemStore使用内存总量达到该值(总量的百分比)时,block所有更新,将会有多个MemStores flush到文件中--><br/>
    <property><br/>
        <name>hbase.regionserver.global.memstore.upperLimit</name><br/>
        <value>0.39</value><br/>
    </property><br/>
    <!-- 读缓存占堆的百分比,默认0.25 --><br/>
    <property><br/>
        <name>hbase.block.cache.size</name><br/>
        <value>0.4</value><br/>
    </property>

    <!-- RegionServer处理rpc线程数,默认10 --><br/>
    <property><br/>
        <name>hbase.reginoserver.handler.count</name><br/>
        <value>300</value><br/>
    </property>

    <!-- 客户端最大重试次数,默认10 --><br/>
    <property><br/>
        <name>hbase.client.retries.number</name><br/>
        <value>5</value><br/>
    </property>

    <!-- 客户端重试的休眠时间 --><br/>
    <property><br/>
        <name>hbase.client.pause</name><br/>
        <value>100</value><br/>
    </property><br/>
</configuration>

3> 配置regionservers文件

目录:$HBASE_HOME/conf/,添加以下节点

data1<br/>
data2

4> 配置backup-masters文件

目录:$HBASE_HOME/conf/,添加以下节点

data1

表示data1是一个备用的HMaster节点

6、创建配置文件中出现的文件夹

cd /usr/Apache/hbase<br/>
# 创建hbase的缓存文件目录<br/>
mkdir data/tmp<br/>
# 创建hbase的日志文件目录<br/>
mkdir logs<br/>
# 创建hbase的pid文件目录<br/>
mkdir pids

将hbase以及相关软件分发到其他机器。

7、环境变量设置所有的节点都要配置,~/.bashrc 或 ~/.bash_profile

export HADOOP_HOME=/usr/Apache/hadoop<br/>
export ZOOKEEPER_HOME=/usr/Apache/zookeeper<br/>
export HBASE_HOME=/usr/Apache/hbase<br/>
export HADOOP_COMMON_HOME=$HADOOP_HOME<br/>
export HADOOP_HDFS_HOME=$HADOOP_HOME<br/>
export HADOOP_MAPRED_HOME=$HADOOP_HOME<br/>
export HADOOP_YARN_HOME=$HADOOP_HOME<br/>
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop<br/>
export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH<br/>
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin

8、启动与关闭

start-hbase.sh<br/>
stop-hbase.sh

master节点

访问:192.168.1.215:16010/

hbase集群安装与部署

data1节点会作为一个备用节点,如果master节点关闭,data1节点会成为主节点,这就是设置了backup-masters文件的作用,当然前提hbase使用了zookeeper集群。

访问:192.168.1.218:16010/

hbase集群安装与部署