1 HBase介绍
HBase是一个分布式的、面向列的开源数据库,就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。它是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBase的常见使用场景如下:

1、大数据量(100s TB级数据)且有快速随机访问的需求。例如淘宝的交易历史记录,数据量巨大无容置疑,面向普通用户的请求必然要即时响应。

2、容量的优雅扩展。大数据驱使下的动态扩展系统容量是必须的。

3、业务场景简单,不需要关系数据库中很多特性(例如交叉列、交叉表,事务,连接等等)。

4、合理设计rowkey。因为hbase的查询用rowkey是最高效的,也几乎是生产环境下唯一可行的方式。

2 集群规划
在搭建HBase高可用集群时,将HBase的RegionServer部署在HDFS的3个DataNode节点上,HBase的HMaster服务部署在HDFS的2个NameNode(Active和Standby)节点上,部署2个HMaster保证集群的高可用性,防止单点问题。这里使用了独立的ZooKeeper集群,未使用HBase自带的ZooKeeper。下面给出HBase的集群搭建架构图:

搭建HBase HA集群需要首先搭建Hadoop HA集群,其方法可参考我的上一篇文章《Hadoop2.0 HA高可用集群配置详解》。在其基础上加入HBaseHA,规划整个集群由5台主机组成,具体情况如下表所示:

主机名

IP地址

安装的软件

JPS

hadoop-master1

172.16.20.81

Jdk/hadoop/hbase

Namenode/ZKFC/ResourceManager/

JobHistoryServer/HMaster

hadoop-master2

172.16.20.82

Jdk/hadoop/hbase

Namenode/ZKFC/ResourceManager/

WebProxyServer/HMaster

hadoop-slave1

172.16.20.83

Jkd/hadoop/hbase/zookeepe

Datanode/JournalNode/NodeManager/

quorumPeerMain/HRegionServer

hadoop-slave2

172.16.20.84

Jkd/hadoop/hbase/zookeeper

Datanode/JournalNode/NodeManager/

quorumPeerMain/HRegionServer

hadoop-slave3

172.16.20.85

Jkd/hadoop/hbase/zookeeper

Datanode/JournalNode/NodeManager/

quorumPeerMain/HRegionServer

3 企业级系统参数配置
// 查看linux系统最大进程数和最大文件打开数

$ ulimit-a

// 设置linux系统最大进程数和最大文件打开数(设置完重新登录shell)

$ suroot

# vim/etc/security/limits.conf

root    soft   nproc   50000

root    hard   nproc   50000

root    soft   nofile  25535

root    hard   nofile  25535

hadoop    soft   nproc   50000

hadoop    hard   nproc   50000

hadoop    soft   nofile  25535

hadoop    hard   nofile  25535

// 调整linux内核参数

# vim/etc/sysctl.conf

net.ipv4.ip_forward= 0

net.ipv4.conf.default.rp_filter= 1

net.ipv4.conf.default.accept_source_route= 0

kernel.core_users_pid= 1

net.ipv4.tcp_syncookies= 1

net.bridge.bridge-nf-call-ip6tables= 0

net.bridge.bridge-nf-call-iptables= 0

net.bridge.bridge-nf-call-arptables= 0

kernel.mggmnb= 65536

kernel.mggmax= 65536

kernel.shmmax= 68719476736

kernel.shmall= 268435456

net.ipv4.tcp_max_syn_backlog= 65000

net.core.netdev_max_backlog= 32768

net.core.somaxconn= 32768

fs.file-max= 65000

net.core.wmem_default= 8388608

net.core.rmem_default= 8388608

net.core.rmem_max= 16777216

net.core.wmem_max= 16777216

net.ipv4.tcp_timestamps= 1

net.ipv4.tcp_synack_retries= 2

net.ipv4.tcp_syn_retries= 2

net.ipv4.tcp_mem= 94500000 915000000 927000000

net.ipv4.tcp_max_orphans= 3276800

net.ipv4.tcp_tw_reuse= 1

net.ipv4.tcp_tw_recycle= 1

net.ipv4.tcp_keepalive_time= 1200

net.ipv4.tcp_syncookies= 1

net.ipv4.tcp_fin_timeout= 10

net.ipv4.tcp_keepalive_intvl= 15

net.ipv4.tcp_keepalive_probes= 3

net.ipv4.ip_local_port_range= 1024 65535

net.ipv4.conf.eml.send_redirects= 0

net.ipv4.conf.lo.send_redirects= 0

net.ipv4.conf.default.send_redirects= 0

net.ipv4.conf.all.send_redirects= 0

net.ipv4.icmp_echo_ignore_broadcasts= 1

net.ipv4.conf.eml.accept_source_route= 0

net.ipv4.conf.lo.accept_source_route= 0

net.ipv4.conf.default.accept_source_route= 0

net.ipv4.conf.all.accept_source_route= 0

net.ipv4.icmp_ignore_bogus_error_responses= 1

kernel.core_pattern= /tmp/core

vm.overcommit_memory= 1

#sysctl -p

4 HBase HA配置
// 在hadoop-master1节点解压hadoop安装包

$ tar-xvf hbase-1.2.0-cdh5.7.1.tar.gz -C /home/hadoop/app/cdh/

// 删除安装包

$ rmhbase-1.2.0-cdh5.7.1.tar.gz

// 进入hbase的conf目录

$ cd/home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/conf/

// 修改hbase-env.sh

$ vimhbase-env.sh

# 配置JDK安装路径

exportJAVA_HOME=/home/hadoop/app/jdk1.7.0_79

# 配置Hadoop安装路径

exportHADOOP_HOME=/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1

# 设置HBase的日志目录

exportHBASE_LOG_DIR=${HBASE_HOME}/logs

# 设置HBase的pid目录

exportHBASE_PID_DIR=${HBASE_HOME}/pids

# 使用独立的ZooKeeper集群

exportHBASE_MANAGES_ZK=false

# 优化配置项

# 设置HBase内存堆的大小

exportHBASE_HEAPSIZE=1024

# 设置HMaster最大可用内存

exportHBASE_MASTER_OPTS="-Xmx512m"

# 设置HRegionServer最大可用内存

exportHBASE_REGIONSERVER_OPTS="-Xmx1024m"

// 配置hbase-site.xml

$ vim hbase-site.xml
<configuration>
<!-- 设置HRegionServers共享目录 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycluster/hbase</value>
</property>

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

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

<!-- 指定缓存文件存储的路径 -->
<property>
<name>hbase.tmp.dir</name>
<value>/home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/tmp</value>
</property>

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

<!-- 指定ZooKeeper集群位置 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop-slave1,hadoop-slave2,hadoop-slave3</value>
</property>

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

<!--指定Zookeeper数据目录,需要与ZooKeeper集群上配置相一致 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/app/cdh/zookeeper-3.4.5-cdh5.7.1/data</value>
</property>

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

<!-- hbase客户端rpc扫描一次获取的行数 -->
<property>
<name>hbase.client.scanner.caching</name>
<value>2000</value>
</property>

<!-- HRegion分裂前最大的文件大小(10G) -->
<property>
<name>hbase.hregion.max.filesize</name>
<value>10737418240</value>
</property>

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

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

<!-- 当某一个region的storefile个数达到该值则block写入,等待compact -->
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>14</value>
</property>

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

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

<!-- ZooKeeper客户端同时访问的并发连接数 -->
<property>
<name>hbase.zookeeper.property.maxClientCnxns</name>
<value>2000</value>
</property>

<!-- 根据业务情况进行配置 -->
<property>
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.3</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.upperLimit</name>
<value>0.39</value>
</property>
<property>
<name>hbase.block.cache.size</name>
<value>0.4</value>
</property>

<!-- RegionServer的请求处理IO线程数 -->
<property>
<name>hbase.reginoserver.handler.count</name>
<value>300</value>
</property>

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

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

$ vimregionservers

hadoop-slave1

hadoop-slave2

hadoop-slave3

// 新建backup-masters文件并配置

$ vimbackup-masters

hadoop-master2

// 创建hbase的缓存文件目录

$ cd/home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/

$ mkdirtmp

// 创建hbase的日志文件目录

$ mkdirlogs

// 创建hbase的pid文件目录

$ mkdirpids

// 将hbase工作目录同步到集群其它节点

$ scp-r /home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/hadoop-master2:/home/hadoop/app/cdh/

$ scp-r /home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/ hadoop-slave1:/home/hadoop/app/cdh/

$ scp-r /home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/ hadoop-slave2:/home/hadoop/app/cdh/

$ scp-r /home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/ hadoop-slave3:/home/hadoop/app/cdh/

// 在集群各节点上修改用户环境变量

$ vim .bash_profile

export HBASE_HOME=/home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1

export PATH=$PATH:$HBASE_HOME/bin

$ source.bash_profile

// 删除hbase的slf4j-log4j12-1.7.5.jar,解决hbase和hadoop的LSF4J包冲突

$ cd /home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/lib

$ mvslf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bk

5 集群启动
// 启动zookeeper集群(分别在slave1、slave2和slave3上执行)

$ zkServer.shstart

备注:此命令分别在slave1/slave2/slave3节点启动了QuorumPeerMain。

// 启动HDFS(在master1执行)

$ start-dfs.sh

备注:此命令分别在master1/master2节点启动了NameNode和ZKFC,分别在slave1/slave2/slave3节点启动了DataNode和JournalNode。

// 启动YARN(在master2执行)

$ start-yarn.sh

备注:此命令在master2节点启动了ResourceManager,分别在slave1/slave2/slave3节点启动了NodeManager。

// 启动YARN的另一个ResourceManager(在master1执行,用于容灾)

$ yarn-daemon.sh start resourcemanager

备注:此命令在master1节点启动了ResourceManager。

// 启动HBase(在master1执行)

$ start-hbase.sh

备注:此命令分别在master1/master2节点启动了HMaster,分别在slave1/slave2/slave3节点启动了HRegionServer。

6 功能测试
6.1 Web UI
下图为http://hadoop-master1:16010,可看到主Master状态:

下图为http://hadoop-master2:50070,可看到备份Master状态:

6.2 Shell操作
// 连接hbase客户端

$ hbase shell

// 创建表,表名为employee,列族为info

> create 'employee','info'

// 显示hbase已创建的表,验证表employee是否创建成功

> list

// 在表employee中插入测试数据

> put'employee','rowkey01','info:id','1001'

> put'employee','rowkey01','info:name','Henry'

> put 'employee','rowkey01','info:address','Bangalore'

> put'employee','rowkey02','info:id','1002'

> put'employee','rowkey02','info:name','Messi'

// 检索表employee中的所有记录

> scan 'employee'

// 检索表employee中行键为rowkey01的记录

> get 'employee','rowkey01'

// 禁用表employee并删除

> disable 'employee'

> drop 'employee'

7 动态替换节点
7.1 Hadoop动态添加节点
(一)设置新节点与集群NameNode的SSH无密码登录

(二)在hosts文件中添加主机名和IP地址,并将该文件同步到集群其它节点

(三)修改hadoop配置文件slaves,加入新节点的主机名,将hadoop安装文件夹拷贝到新机器上

(四)在新节点通过命令hadoop-daemon.shstart datanode和yarn-daemon.sh start nodemanager启动datanode和nodemanager进程

(五)在新节点中通过命令start-balancer.sh均衡当前的HDFS块,在执行前可通过命令Hdfs dfsadmin -setBalancerBandwidth字节数 设置带宽

7.2 Hadoop动态删除节点
(一)在hadoop配置文件hdfs-site.xml中配置如下:

<property>

<name>dfs.hosts.exclude</name>

<value>/home/hadoop/app/cdh/hadoop-2.6.0-cdh5.7.1/etc/hadoop/exclude</value>

</property>

(二)在配置文件exclude中添加需要删除的节点主机名(如果执行下一步报错refreshNodes: hostname can't be null,改成IP地址)

(三)通过命令hdfsafsadmin -refreshNodes执行节点刷新操作

(四)通过命令hdfsafsadmin -report可查看该节点状况

7.3 HBase动态添加节点
(一)在HBase的配置文件regionserver中添加新节点的主机名

(二)在新节点通过命令hbase-daemon.shstart regionserver启动HRegionServer

(三)进入hbaseshell,通过命令balance_switch true进行region平衡

7.4 HBase动态删除节点
(一)通过命令graceful_stop.sh主机名 停止需要删除的节点

(二)在HBase的配置文件regionserver中移除删除节点的主机名
---------------------
作者:阳光奶爸
来源:CSDN
原文:https://blog.csdn.net/carl810224/article/details/52174412
版权声明:本文为博主原创文章,转载请附上博文链接!

企业级hbase HA配置的更多相关文章

  1. 基于HBase0.98.13搭建HBase HA分布式集群

    在hadoop2.6.0分布式集群上搭建hbase ha分布式集群.搭建hadoop2.6.0分布式集群,请参考“基于hadoop2.6.0搭建5个节点的分布式集群”.下面我们开始啦 1.规划 1.主 ...

  2. HBase HA的分布式集群部署(适合3、5节点)

    本博文的主要内容有: .HBase的分布模式(3.5节点)安装    .HBase的分布模式(3.5节点)的启动 .HBase HA的分布式集群的安装 .HBase HA的分布式集群的启动    .H ...

  3. 第九章 搭建Hadoop 2.2.0版本HDFS的HA配置

    Hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在hadoop1时代,只有一个NameNode.如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了.这是 ...

  4. HBase HA分布式集群搭建

    HBase HA分布式集群搭建部署———集群架构 搭建之前建议先学习好HBase基本构架原理:https://www.cnblogs.com/lyywj170403/p/9203012.html 集群 ...

  5. Hbase的配置和安装

    Hbase的配置和安装 1. 解压hbase.配置HBASE_HOME tar -zxvf hbase-1.2.4.tar.gz 2. 修改$HBASE_HOME/conf/hbase-env.sh文 ...

  6. Hbase安装配置(靠谱亲测)

    Hbase是Hadoop生态系统中的NoSql列式数据库.通过Hbase,可以进行数据读写,比较适合Top n场景.Hbase搭建的系统,瓶颈在于硬盘的传输速度.RDBMS一般的瓶颈在于寻道速度. 实 ...

  7. HBase + Kerberos 配置示例(二)

    接上篇<HBase + Kerberos配置示例(一)>,我们继续剩下的配置工作. 环境准备 Hadoop配置 Zookeeper配置 HBase配置 Java测试程序 环境准备 安装ha ...

  8. hbase安装配置(整合到hadoop)

    hbase安装配置(整合到hadoop) 如果想详细了解hbase的安装:http://abloz.com/hbase/book.html 和官网http://hbase.apache.org/ 1. ...

  9. Spark进阶之路-Spark HA配置

    Spark进阶之路-Spark HA配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 集群部署完了,但是有一个很大的问题,那就是Master节点存在单点故障,要解决此问题,就要借 ...

随机推荐

  1. android最新版 极光推送

    极光推送对于移动开发的程序员都不陌生,用起来也挺方便的,今天在这里给大家介绍下最先版的极光推送的用法,超级简单. 1.在build.gradle里面添加两个方法并引用一个库文件 1.1在default ...

  2. 【BZOJ1217】[HNOI2003]消防局的设立 树形DP

    [BZOJ1217][HNOI2003]消防局的设立 Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地, ...

  3. LeetCode 笔记系列16.1 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]

    题目: Given a string S and a string T, find the minimum window in S which will contain all the charact ...

  4. 浏览器中使用 ES6 import

    html 中的 head 标签引入: <script src="test.js" type="module"></script> tes ...

  5. Spring Cloud Feign 使用OAuth2

    Spring Cloud 微服务架构下,服务间的调用采用的是Feign组件,为了增加服务安全性,server之间互相调用采用OAuth2的client模式.Feign使用http进行服务间的通信,同时 ...

  6. python and 我爱自然语言处理

    曾经因为NLTK的 缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/C++,但平时的很多文本数据处理任务都交给了Python.离 开腾讯创业后,第一个作品课程图谱也 ...

  7. Buy a home in AU

    澳洲留学生买房的几点注意事项: 1. 新房.楼花.或者买地建房,完全不受限制,国民待遇,是政府鼓励的. 2. 留学生签证剩余超12个月,可以购买二手房,但是只能自住不能出租. 3. 银行可以提供50% ...

  8. Linux命令(1)——xargs命令

    1.功能: xargs能够将stdin中以空格或换行符进行分隔的数据.形成以空格分隔的參数(arguments),传递给其它命令.由于以空格作为分隔符,所以有一些文件名称或者其它意义的名词内含有空格的 ...

  9. git mv与直接mv的区别

    git mv 行为: 1.创建一个和之前文件内容一样的文件,文件名为新的文件名 2.将原来的文件删除 3.将删除的文件添加到暂存区 4.将新建的文件添加到暂存区 $ git mv a a1 $ git ...

  10. 005-hive概述,计算原理及模型

    计算原理及模型 优化的根本思想: 尽早尽量过滤数据,减少每个阶段的数据量 减少job数 解决数据倾斜问题 Hive概述 名称       hive系统架构 metastore derbymysql   ...