共计 12163 个字符,预计需要花费 31 分钟才能阅读完成。
1、相关环境
CentOS7 Hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4
本篇文章仅涉及 hbase 集群的搭建,关于 hadoop 与 zookeeper 的相关部署参见Zookeeper 集群的搭建及 Hadoop HA 的相关配置 http://www.linuxidc.com/Linux/2016-12/138430.htm
目标如下:
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 | |
yum install ntp -y | |
# 查看 NTP 状态 | |
service ntpd status | |
# 配置文件 | |
vim /etc/ntp.conf |
以下是配置文件内容
restrict default ignore | |
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap | |
server 127.127.1.0 |
之后个节点与 master 进行同步,并设置 NTP 开机自动启动
# 终端执行命令同步时间 | |
ntpdate 192.168.1.215 | |
# 设置开机自动启动 | |
systemctl restart ntpd.service | |
systemctl enable ntpd.service |
以上为最初同步
2> 设置定时任务,使服务器定时同步时间
执行以下命令:
crontab -e
配置文件写入以下内容:
0 1 * * * /usr/sbin/ntpdate 192.168.1.215 >> /data/ntpd.log
保存后执行以下命令查看定时任务,并重启服务
crontab -l | |
# 重启 | |
systemctl restart crontab.service |
3、设置 linux 系统最大进程数和最大文件打开数
使用 root 账号
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 |
设置完 重新登录 shell,执行以下命令查看结果
ulimit -a
Hadoop+HBase 搭建云存储总结 PDF http://www.linuxidc.com/Linux/2013-05/83844.htm
Ubuntu Server 14.04 下 Hbase 数据库安装 http://www.linuxidc.com/Linux/2016-05/131499.htm
HBase 结点之间时间不一致造成 regionserver 启动失败 http://www.linuxidc.com/Linux/2013-06/86655.htm
CentOS 6.3 下 HBase 伪分布式平台搭建 http://www.linuxidc.com/Linux/2016-11/136830.htm
Hadoop 集群安装 &HBase 实验环境搭建 http://www.linuxidc.com/Linux/2013-04/83560.htm
基于 Hadoop 集群的 HBase 集群的配置 http://www.linuxidc.com/Linux/2013-03/80815.htm‘
Hadoop 安装部署笔记之 -HBase 完全分布模式安装 http://www.linuxidc.com/Linux/2012-12/76947.htm
单机版搭建 HBase 环境图文教程详解 http://www.linuxidc.com/Linux/2012-10/72959.htm
4、调整 Linux 内核参数
打开文件 /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_uses_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.msgmnb = 65536 | |
kernel.msgmax = 65536 | |
kernel.shmmax = 68719476736 | |
kernel.shmall = 268435456 | |
# 提高系统支持的最大 SYN 半连接数,表示 SYN 队列的长度,默认为 1024,加大队列长度为,可以容纳最多等待连接的网络连接数 | |
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 | |
# 减少系统 SYN 连接重试次数(默认是 5)# 为了打开对端的连接,内核需要发送一个 SYN 并附带一个回应前面一个 SYN 的 ACK,也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送 SYN+ACK 包的数量。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 | |
# 以下两参数可解决生产场景中大量连接的 Web(cache)服务器中 TIME_WAIT 过多问题 | |
# 表示开启重用。允许将 TIME-WAIT 的 sockets 重新用于新的 TCP 连接,默认为 0 表示关闭 | |
net.ipv4.tcp_tw_reuse = 1 | |
# 打开 TIME-WAIT 套接字重用及回收功能,表示开启 TCP 连接中 TIME-WAIT 的 sockets 的快速收回功能,默认为 0 表示关闭。net.ipv4.tcp_tw_recycle = 1 | |
# 当 keepalive 起用的时候,TCP 发送 keepalive 消息的频度,缺省是 2 小时,改为 1200 秒 | |
net.ipv4.tcp_keepalive_time = 1200 | |
net.ipv4.tcp_syncookies= 1 | |
# 减少处于 FIN-WAIT- 2 连接状态的时间,使系统可以处理更多的连接,缺省值是 60 秒 | |
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 | |
# 网卡 eno16777736 | |
net.ipv4.conf.eno16777736.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 | |
# 网卡 eno16777736 | |
net.ipv4.conf.eno16777736.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 |
之后,一定要执行以下命令进行检查,防止出现错误,例如“没有那个文件或目录”之类
# 从指定的文件加载系统参数,如不指定即从 /etc/sysctl.conf 中加载 | |
sysctl -p |
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-12/138536p2.htm
5、配置文件
1> hbase-env.sh
# 配置 JDK 安装路径 | |
export JAVA_HOME=/usr/java/jdk | |
# 配置 Hadoop 安装路径 | |
export HADOOP_HOME=/usr/Apache/hadoop | |
# 设置 HBase 的日志目录 | |
export HBASE_LOG_DIR=${HBASE_HOME}/logs | |
# 设置 HBase 的 pid 目录 | |
export HBASE_PID_DIR=${HBASE_HOME}/pids | |
# 使用独立的 ZooKeeper 集群 | |
export HBASE_MANAGES_ZK=false | |
# 设置 HBase 内存堆的大小 | |
export HBASE_HEAPSIZE=1024 | |
# 设置 HMaster 最大可用内存 | |
export HBASE_MASTER_OPTS="-Xmx512m" | |
# 设置 HRegionServer 最大可用内存 | |
export HBASE_REGIONSERVER_OPTS="-Xmx512m" |
注意:
企业实际部署时,datanode 一般设置 16 到 20G 左右,过小与过大都不合适;regionserver 一般可以设置 32 到 48,或者以上;hmaster 一般 4 到 8G 足够了。此外实际部署当中,hmaster 与 regionserver 一般不在同一机器中。
2> hbase-site.xml 参数说明见注释
<configuration> | |
<!-- 开启分布式模式 --> | |
<property> | |
<name>hbase.cluster.distributed</name> | |
<value>true</value> | |
</property> | |
<!-- 设置 HRegionServers 目录 --> | |
<property> | |
<name>hbase.rootdir</name> | |
<value>hdfs://nscluster/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>/usr/Apache/hbase/data/tmp</value> | |
</property> | |
<!-- 指定 ZooKeeper 集群位置 --> | |
<property> | |
<name>hbase.zookeeper.quorum</name> | |
<value>master,data1,data2</value> | |
</property> | |
<!-- 指定 ZooKeeper 集群端口 --> | |
<property> | |
<name>hbase.zookeeper.property.clientPort</name> | |
<value>2181</value> | |
</property> | |
<!--指定 Zookeeper 数据目录,需要与 ZooKeeper 集群上配置相一致 --> | |
<property> | |
<name>hbase.zookeeper.property.dataDir</name> | |
<value>/usr/Apache/zookeeper/data</value> | |
</property> | |
<!-- ZooKeeper 客户端同时访问的并发连接数,需要与 ZooKeeper 集群上配置相一致,可设置为 2000 --> | |
<property> | |
<name>hbase.zookeeper.property.maxClientCnxns</name> | |
<value>60</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)当 HStoreFile 大于这个文件时,就会 split 成两个文件 --> | |
<property> | |
<name>hbase.hregion.max.filesize</name> | |
<value>10737418240</value> | |
</property> | |
<!-- 一个 HRegionServer 中最大的 region 数量 --> | |
<property> | |
<name>hbase.regionserver.reginoSplitLimit</name> | |
<value>2000</value> | |
</property> | |
<!-- 当某一个 region 的 storefile 个数达到该值则 block 写入,等待 compact,或者说定义 storefile 数量达到多少时 block 住 update 操作 默认 7 --> | |
<!-- 设置过小会使影响系统吞吐率,但也不应过大,经验值是 15 到 20 左右。太大的话会在系统压力很大时使 storefile 过多,compact 一直无法完成,扫库或者数据读取的性能会受到影响。--> | |
<!--同时,可以适当提高一些 hbase.hstore.compactionThreshold,增加 compact 的处理线程数,加快 compact 的处理速度而避免 block--> | |
<property> | |
<name>hbase.hstore.blockingStoreFiles</name> | |
<value>14</value> | |
</property> | |
<!-- StoreFile 的个数超过这个数就开始合并 默认值为 3 --> | |
<property> | |
<name>hbase.hstore.compactionThreshold</name> | |
<value>6</value> | |
</property> | |
<!-- 超过 memstore 大小的倍数达到该值则 block 所有写入请求,自我保护 --> | |
<property> | |
<name>hbase.hregion.memstore.block.multiplier</name> | |
<value>20</value> | |
</property> | |
<!-- service 工作的 sleep 间隔 默认 10000--> | |
<property> | |
<name>hbase.server.thread.wakefrequency</name> | |
<value>500</value> | |
</property> | |
<!-- 以下三项通常联合起来调整 --> | |
<!-- MemStore flush 顺序是按照大小降序执行的,直到刷新到 MemStore 使用内存略小于该百分比 --> | |
<property> | |
<name>hbase.regionserver.global.memstore.lowerLimit</name> | |
<value>0.3</value> | |
</property> | |
<!-- hbase.regionserver.global.memstore.upperLimit 与 hbase.block.cache.size 这两项合起来不能超过 0.8,谁大谁小取决于业务偏向于读还是写,如果读多一些就把读缓存设置大一些 --> | |
<!-- 默认 0.4 当 MemStore 使用内存总量达到该值(总量的百分比)时,block 所有更新,将会有多个 MemStores flush 到文件中--> | |
<property> | |
<name>hbase.regionserver.global.memstore.upperLimit</name> | |
<value>0.39</value> | |
</property> | |
<!-- 读缓存占堆的百分比,默认 0.25 --> | |
<property> | |
<name>hbase.block.cache.size</name> | |
<value>0.4</value> | |
</property> | |
<!-- RegionServer 处理 rpc 线程数,默认 10 --> | |
<property> | |
<name>hbase.reginoserver.handler.count</name> | |
<value>300</value> | |
</property> | |
<!-- 客户端最大重试次数,默认 10 --> | |
<property> | |
<name>hbase.client.retries.number</name> | |
<value>5</value> | |
</property> | |
<!-- 客户端重试的休眠时间 --> | |
<property> | |
<name>hbase.client.pause</name> | |
<value>100</value> | |
</property> | |
</configuration> |
3> 配置 regionservers 文件
目录:$HBASE_HOME/conf/,添加以下节点
data1 | |
data2 |
4> 配置 backup-masters 文件
目录:$HBASE_HOME/conf/,添加以下节点
data1
表示 data1
是一个备用的 HMaster 节点
6、创建配置文件中出现的文件夹
cd /usr/Apache/hbase | |
# 创建 hbase 的缓存文件目录 | |
mkdir data/tmp | |
# 创建 hbase 的日志文件目录 | |
mkdir logs | |
# 创建 hbase 的 pid 文件目录 | |
mkdir pids |
7、环境变量设置
~/.bashrc 或 ~/.bash_profile
export HADOOP_HOME=/usr/Apache/hadoop | |
export ZOOKEEPER_HOME=/usr/Apache/zookeeper | |
export HBASE_HOME=/usr/Apache/hbase | |
export HADOOP_COMMON_HOME=$HADOOP_HOME | |
export HADOOP_HDFS_HOME=$HADOOP_HOME | |
export HADOOP_MAPRED_HOME=$HADOOP_HOME | |
export HADOOP_YARN_HOME=$HADOOP_HOME | |
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop | |
export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH | |
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin |
8、启动与关闭
start-hbase.sh | |
stop-hbase.sh |
master 节点
访问:192.168.1.215:16010/
data1
节点会作为一个备用节点,如果 master 节点关闭,data1
节点会成为主节点,这就是设置了 backup-masters 文件的作用,当然前提 hbase 使用了 zookeeper 集群。
访问:192.168.1.218:16010/
HBase 的详细介绍:请点这里
HBase 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138536.htm
1、相关环境
CentOS7 Hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4
本篇文章仅涉及 hbase 集群的搭建,关于 hadoop 与 zookeeper 的相关部署参见Zookeeper 集群的搭建及 Hadoop HA 的相关配置 http://www.linuxidc.com/Linux/2016-12/138430.htm
目标如下:
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 | |
yum install ntp -y | |
# 查看 NTP 状态 | |
service ntpd status | |
# 配置文件 | |
vim /etc/ntp.conf |
以下是配置文件内容
restrict default ignore | |
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap | |
server 127.127.1.0 |
之后个节点与 master 进行同步,并设置 NTP 开机自动启动
# 终端执行命令同步时间 | |
ntpdate 192.168.1.215 | |
# 设置开机自动启动 | |
systemctl restart ntpd.service | |
systemctl enable ntpd.service |
以上为最初同步
2> 设置定时任务,使服务器定时同步时间
执行以下命令:
crontab -e
配置文件写入以下内容:
0 1 * * * /usr/sbin/ntpdate 192.168.1.215 >> /data/ntpd.log
保存后执行以下命令查看定时任务,并重启服务
crontab -l | |
# 重启 | |
systemctl restart crontab.service |
3、设置 linux 系统最大进程数和最大文件打开数
使用 root 账号
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 |
设置完 重新登录 shell,执行以下命令查看结果
ulimit -a
Hadoop+HBase 搭建云存储总结 PDF http://www.linuxidc.com/Linux/2013-05/83844.htm
Ubuntu Server 14.04 下 Hbase 数据库安装 http://www.linuxidc.com/Linux/2016-05/131499.htm
HBase 结点之间时间不一致造成 regionserver 启动失败 http://www.linuxidc.com/Linux/2013-06/86655.htm
CentOS 6.3 下 HBase 伪分布式平台搭建 http://www.linuxidc.com/Linux/2016-11/136830.htm
Hadoop 集群安装 &HBase 实验环境搭建 http://www.linuxidc.com/Linux/2013-04/83560.htm
基于 Hadoop 集群的 HBase 集群的配置 http://www.linuxidc.com/Linux/2013-03/80815.htm‘
Hadoop 安装部署笔记之 -HBase 完全分布模式安装 http://www.linuxidc.com/Linux/2012-12/76947.htm
单机版搭建 HBase 环境图文教程详解 http://www.linuxidc.com/Linux/2012-10/72959.htm
4、调整 Linux 内核参数
打开文件 /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_uses_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.msgmnb = 65536 | |
kernel.msgmax = 65536 | |
kernel.shmmax = 68719476736 | |
kernel.shmall = 268435456 | |
# 提高系统支持的最大 SYN 半连接数,表示 SYN 队列的长度,默认为 1024,加大队列长度为,可以容纳最多等待连接的网络连接数 | |
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 | |
# 减少系统 SYN 连接重试次数(默认是 5)# 为了打开对端的连接,内核需要发送一个 SYN 并附带一个回应前面一个 SYN 的 ACK,也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送 SYN+ACK 包的数量。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 | |
# 以下两参数可解决生产场景中大量连接的 Web(cache)服务器中 TIME_WAIT 过多问题 | |
# 表示开启重用。允许将 TIME-WAIT 的 sockets 重新用于新的 TCP 连接,默认为 0 表示关闭 | |
net.ipv4.tcp_tw_reuse = 1 | |
# 打开 TIME-WAIT 套接字重用及回收功能,表示开启 TCP 连接中 TIME-WAIT 的 sockets 的快速收回功能,默认为 0 表示关闭。net.ipv4.tcp_tw_recycle = 1 | |
# 当 keepalive 起用的时候,TCP 发送 keepalive 消息的频度,缺省是 2 小时,改为 1200 秒 | |
net.ipv4.tcp_keepalive_time = 1200 | |
net.ipv4.tcp_syncookies= 1 | |
# 减少处于 FIN-WAIT- 2 连接状态的时间,使系统可以处理更多的连接,缺省值是 60 秒 | |
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 | |
# 网卡 eno16777736 | |
net.ipv4.conf.eno16777736.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 | |
# 网卡 eno16777736 | |
net.ipv4.conf.eno16777736.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 |
之后,一定要执行以下命令进行检查,防止出现错误,例如“没有那个文件或目录”之类
# 从指定的文件加载系统参数,如不指定即从 /etc/sysctl.conf 中加载 | |
sysctl -p |
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-12/138536p2.htm
