`

搭建企业级高可用HBase

 
阅读更多

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

 

[html] view plain copy
 
  1. <configuration>  
  2.   <!-- 设置HRegionServers共享目录 -->  
  3.   <property>  
  4.     <name>hbase.rootdir</name>  
  5.     <value>hdfs://mycluster/hbase</value>  
  6.   </property>  
  7.     
  8.   <!-- 设置HMaster的rpc端口 -->  
  9.   <property>  
  10.     <name>hbase.master.port</name>  
  11.     <value>16000</value>  
  12.   </property>  
  13.     
  14.   <!-- 设置HMaster的http端口 -->  
  15.   <property>  
  16.     <name>hbase.master.info.port</name>  
  17.     <value>16010</value>  
  18.   </property>  
  19.     
  20.   <!-- 指定缓存文件存储的路径 -->  
  21.   <property>  
  22.     <name>hbase.tmp.dir</name>  
  23.     <value>/home/hadoop/app/cdh/hbase-1.2.0-cdh5.7.1/tmp</value>  
  24.   </property>  
  25.   
  26.   <!-- 开启分布式模式 -->  
  27.   <property>  
  28.     <name>hbase.cluster.distributed</name>  
  29.     <value>true</value>  
  30.   </property>  
  31.     
  32.   <!-- 指定ZooKeeper集群位置 -->  
  33.   <property>  
  34.     <name>hbase.zookeeper.quorum</name>  
  35.     <value>hadoop-slave1,hadoop-slave2,hadoop-slave3</value>  
  36.   </property>  
  37.     
  38.   <!-- 指定ZooKeeper集群端口 -->  
  39.   <property>  
  40.     <name>hbase.zookeeper.property.clientPort</name>  
  41.     <value>2181</value>  
  42.   </property>  
  43.     
  44.   <!--指定Zookeeper数据目录,需要与ZooKeeper集群上配置相一致 -->  
  45.   <property>  
  46.     <name>hbase.zookeeper.property.dataDir</name>  
  47.     <value>/home/hadoop/app/cdh/zookeeper-3.4.5-cdh5.7.1/data</value>  
  48.   </property>  
  49.     
  50.   <!-- \\\\\\\\\\以下为优化配置项\\\\\\\\\\ -->  
  51.   <!-- 关闭分布式日志拆分 -->  
  52.   <property>  
  53.     <name>hbase.master.distributed.log.splitting</name>  
  54.     <value>false</value>  
  55.   </property>  
  56.     
  57.   <!-- hbase客户端rpc扫描一次获取的行数 -->  
  58.   <property>  
  59.     <name>hbase.client.scanner.caching</name>  
  60.     <value>2000</value>  
  61.   </property>  
  62.     
  63.   <!-- HRegion分裂前最大的文件大小(10G) -->  
  64.   <property>  
  65.     <name>hbase.hregion.max.filesize</name>  
  66.     <value>10737418240</value>  
  67.   </property>  
  68.     
  69.   <!-- HRegionServer中最大的region数量 -->  
  70.   <property>  
  71.     <name>hbase.regionserver.reginoSplitLimit</name>  
  72.     <value>2000</value>  
  73.   </property>  
  74.     
  75.   <!-- StoreFile的个数超过这个数就开始合并 -->  
  76.   <property>  
  77.     <name>hbase.hstore.compactionThreshold</name>  
  78.     <value>6</value>  
  79.   </property>  
  80.     
  81.   <!-- 当某一个region的storefile个数达到该值则block写入,等待compact -->  
  82.   <property>  
  83.     <name>hbase.hstore.blockingStoreFiles</name>  
  84.     <value>14</value>  
  85.   </property>  
  86.     
  87.   <!-- 超过memstore大小的倍数达到该值则block所有写入请求,自我保护 -->  
  88.   <property>  
  89.     <name>hbase.hregion.memstore.block.multiplier</name>  
  90.     <value>20</value>  
  91.   </property>  
  92.     
  93.   <!-- service工作的sleep间隔 -->  
  94.   <property>  
  95.     <name>hbase.server.thread.wakefrequency</name>  
  96.     <value>500</value>  
  97.   </property>  
  98.     
  99.   <!-- ZooKeeper客户端同时访问的并发连接数 -->  
  100.   <property>  
  101.     <name>hbase.zookeeper.property.maxClientCnxns</name>  
  102.     <value>2000</value>  
  103.   </property>  
  104.     
  105.   <!-- 根据业务情况进行配置 -->  
  106.   <property>  
  107.     <name>hbase.regionserver.global.memstore.lowerLimit</name>  
  108.     <value>0.3</value>  
  109.   </property>  
  110.   <property>  
  111.     <name>hbase.regionserver.global.memstore.upperLimit</name>  
  112.     <value>0.39</value>  
  113.   </property>  
  114.   <property>  
  115.     <name>hbase.block.cache.size</name>  
  116.     <value>0.4</value>  
  117.   </property>  
  118.     
  119.   <!-- RegionServer的请求处理IO线程数 -->  
  120.   <property>  
  121.     <name>hbase.reginoserver.handler.count</name>  
  122.     <value>300</value>  
  123.   </property>  
  124.     
  125.   <!-- 客户端最大重试次数 -->  
  126.   <property>  
  127.     <name>hbase.client.retries.number</name>  
  128.     <value>5</value>  
  129.   </property>  
  130.     
  131.   <!-- 客户端重试的休眠时间 -->  
  132.   <property>  
  133.     <name>hbase.client.pause</name>  
  134.     <value>100</value>  
  135.   </property>  
  136. </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-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中添加需要删除的节点主机名

(三)通过命令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中移除删除节点的主机名

 

分享到:
评论

相关推荐

    HBase海量数据存储实战视频教程

    7. HBase高可用 8. HBase架构 第二章 陌陌海量存储案例 1. 案例介绍 2. 打招呼消息数据集介绍 3. 准备工作 4. 陌陌消息HBase表结构设计 5. 性能问题 6. Apache Phoenix 7. 基于Phoenix消息数据查询 第三章 HBase高级...

    Hbase个人总结

    - **高可靠性**:HBase通过数据副本和自动故障恢复机制确保数据的高可用性和持久性。 - **高性能**:通过内存缓存、索引优化以及并行处理技术,HBase能够在海量数据集上提供快速的数据访问速度。 - **面向列存储**:...

    (完整版)中国移动企业级大数据中心建设指导意见V1.1(终版)资料.docx

    其次,搭建的平台需要满足"五统一"原则,即统一采集、存储、管理、运营和服务,实现数据的逻辑集中和物理分散,确保数据安全和高可用性。最后,大数据中心需要提供灵活、按需的服务,服务于集团内部各部门、专业公司...

    基于SpringMVC+Spring+HBase+Maven搭建的Hadoop分布式云盘系统.zip

    其次,Spring框架作为一个全面的Java企业级应用开发框架,提供了依赖注入(DI)、面向切面编程(AOP)等功能,简化了服务的管理,使得组件间的耦合度降低,提高了系统的可测试性和可扩展性。在本项目中,Spring不仅...

    玩转热门框架 用企业级思维 开发通用够硬的大数据平台

    这一章将探讨如何设计高可用、可扩展的大数据平台架构,包括数据层、计算层、服务层和监控层的设计原则,以及如何优化性能和降低成本。 第9章:案例研究 通过真实的企业案例,分析如何利用以上技术解决具体问题,如...

    大数据集群搭建安装包

    Kylin是开源的、企业级的OLAP(在线分析处理)系统,专为大数据环境设计,提供亚秒级的查询速度。它使用预计算技术(Cube)来加速复杂的多维查询,常用于业务报表和数据分析。 在压缩包"TKttt大数据安装资源包1"中...

    集群搭建手册_CDH5.13.1版.docx

    在构建企业级的大数据处理平台时,CDH (Cloudera Distribution Including Apache Hadoop) 是一个备受推崇的选择,特别是CDH5.13.1版本。这个版本包含了Hadoop生态系统中的多个组件,如HDFS、MapReduce、YARN、HBase...

    CCTC 2016 小米常冰琳:使用Kudu搭建OLAP服务

    Kudu的设计目标在于支持快速的离线分析与实时分析,旨在满足企业级客户对实时数据处理和分析的需求。以下是根据演讲内容整理出的知识点。 一、Kudu的设计目标 Kudu旨在解决传统的大数据存储方案HDFS和HBase的不足之...

    Hadoop云计算平台搭建方案2.1.docx

    在这个特定的搭建方案中,选择了Hadoop 2.2.0版本,它提供了高可用性和容错性,以支持企业级的大数据处理需求。 首先,平台的总体思路是利用Hadoop处理电网企业在营销服务领域的海量数据,通过深度分析挖掘潜在模式...

    聊一聊分布式对象存储解决方案.docx

    Ceph不仅能够满足企业级对象存储需求,还能帮助企业搭建自己的云平台,具有广泛的应用前景,尤其是在云计算环境中表现突出。 ##### 3.3 Minio Minio是一款高性能、轻量级的开源对象存储系统,兼容Amazon S3接口。该...

    基于hadoop生态搭建大数据平台.zip

    HDFS 是一个分布式文件系统,它将大型数据集分割成块并分布在多台服务器上,确保高可用性和容错性。MapReduce 则是用于处理这些数据的计算模型,通过“映射”和“化简”阶段进行并行处理,加速了大数据的分析。 ...

    企业大数据平台建设方案.docx

    - 随着互联网、物联网等技术的发展,企业产生的数据量呈指数级增长,传统数据处理方式已经无法满足现代企业的需要。 - 企业面临着从海量数据中提取有价值的信息以支持决策制定、业务优化和创新发展的挑战。 2. **...

    Hadoop平台搭建与应用_PPT课件.rar

    HDFS提供了一个高容错性的文件系统,而MapReduce则是一种编程模型,用于大规模数据集的并行计算。 二、Hadoop HDFS HDFS是一个分布式文件系统,允许数据在整个集群中的多台机器上进行存储和复制,确保了数据的可靠...

    CDH安装手册.rar_cdH_hadoop_hadoop安装手册_大数据_安装部署

    CDH,全称Cloudera Distribution Including Apache Hadoop,是由Cloudera公司提供的一个开源大数据平台,它包含了多个Apache项目,如Hadoop、HBase、Spark等,为企业级用户提供了统一的数据管理与分析解决方案。...

    搭建基于云计算的海量数据挖掘平台-研究实现.doc

    Cloudera是提供Hadoop相关产品和服务的公司,其Cloudera Distribution Including Apache Hadoop(CDH)是企业级Hadoop发行版,包含了Hadoop生态系统中的多个组件,如HBase、Hive、Spark等。Cloudera Desktop则提供了...

Global site tag (gtag.js) - Google Analytics