企业级HBase搭建

本文详细介绍了企业级HBase的搭建过程,包括参数配置、集群启动、动态替换节点等步骤。从修改系统参数、配置HBase环境,到创建缓存、日志目录,再到启动集群和动态管理节点,提供了全面的实践指南。
摘要由CSDN通过智能技术生成

企业级HBase搭建

HBase介绍

这部分请参考我的博文:Hadoop数据存储

企业级HBase参数配置

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

使用root用户设置,完成需要重新登录。

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生效

修改hbase-env.sh

配置JDK安装路径

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

配置Hadoop安装路径

exportHADOOP_HOME=/home/hadoop/hadoop2.7.2

设置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

<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/hbase-0.98.20/tmp</value>
  </property>

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

 <!-- 指定ZooKeeper集群位置 --> 
  <property>
<name>hbase.zookeeper.quorum</name>
<value>slave1,slave2,slave3,master1,master2</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/hadoopzookeeper-3.4.6/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

vim regionservers

slave1

slave2

slave3

新建backup-masters文件并配置

$ vim backup-masters

master2

创建hbase的缓存文件目录

$ cd /home/hadoop/hbase-0.98.20/

$ mkdir tmp

创建hbase的日志文件目录

$ cd /home/hadoop/hbase-0.98.20/

$ mkdir logs

创建hbase的pid文件目录

$ cd /home/hadoop/hbase-0.98.20/

$ mkdir pids

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

$ scp -r /home/hadoop/hbase-0.98.20/ master2:/home/hadoop/

$ scp -r /home/hadoop/hbase-0.98.20/ slave1:/home/hadoop/

$ scp -r /home/hadoop/hbase-0.98.20/ slave2:/home/hadoop/

$ scp -r /home/hadoop/hbase-0.98.20/ slave3:/home/hadoop/

启动集群

先启动zookeeper,再Hadoop,最后HBase。

动态替换节点

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字节数 设置带宽

Hadoop动态删除节点

(一)在hadoop配置文件hdfs-site.xml中配置如下:

<property>

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

<value>/home/hadoop/hadoop-2.7.2/etc/hadoop/exclude</value>

</property>

(二)在配置文件exclude中添加需要删除的节点主机名

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

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

HBase动态添加节点

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

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

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

HBase动态删除节点

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

(二)在HBase的配置文件regionserver中移除删除节点的主机名

什么是ZooKeeper ? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 Rabbit ZooKeeper Extensions 该项目使用了 Apache ZooKeeper .NET async Client 组件,除提供了基本的zk操作,还额外封装了常用的功能以便让.net开发者更好的使用zookeeper。 提供的功能 session过期重连 永久watcher 递归删除节点 递归创建节点 跨平台(支持.net core) 使用说明 创建连接 IZookeeperClient client = new ZookeeperClient(new ZookeeperClientOptions         {             ConnectionString = "172.18.20.132:2181",             BasePath = "/", //default value             ConnectionTimeout = TimeSpan.FromSeconds(10), //default value             SessionTimeout = TimeSpan.FromSeconds(20), //default value             OperatingTimeout = TimeSpan.FromSeconds(60), //default value             ReadOnly = false, //default value             SessionId = 0, //default value             SessionPasswd = null //default value         }); 创建节点 var data = Encoding.UTF8.GetBytes("2016"); //快速创建临时节点 await client.CreateEphemeralAsync("/year", data); await client.CreateEphemeralAsync("/year", data, ZooDefs.Ids.OPEN_ACL_UNSAFE); //快速创建永久节点 await client.CreatePersistentAsync("/year", data); await client.CreatePersistentAsync("/year", data, ZooDefs.Ids.OPEN_ACL_UNSAFE); //完整调用 await client.CreateAsync("/year", data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); //递归创建 await client.CreateRecursiveAsync("/microsoft/netcore/aspnet", data, CreateMode.PERSISTENT); 获取节点数据 IEnumerable data = await client.GetDataAsync("/year"); Encoding.UTF8.GetString(data.ToArray()); 获取子节点 IEnumerable children= await client.GetChildrenAsync("/microsoft"); 判断节点是否存在 bool exists = await client.ExistsAsync("/year"); 删除节点 await client.DeleteAsync("/year"); //递归删除 bool success = await client.DeleteRecursiveAsync("/microsoft"); 更新数据 Stat stat = await client.SetDataAsync("/year", Encoding.UTF8.GetBytes("2017")); 订阅数据变化 await client.Subscrib
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值