在写这一篇文章之前,先啰嗦一下上一篇文章,上一篇是配置hadoop ha ,但由于一些配置出错,导致最后的结果出错,虽然最后发现问题所在,但也花费了不少时间。而在搭建这些环境时,最重要的就是配置文件了,所以大家在配置文件时一定要仔细细心。
关于HBase的介绍在前面的文章中已经讲解过,这篇文章主要是配置企业级的HBase,之前的配置都是基于单机版,但如果用在真实的环境中,可能不止一台机器了。这里的实验环境我们使用三台电脑,两台master节点,一台regionserver。由于是测试,所以三台电脑配置一样,如果是实际使用,可能master和reginonserver的配置会稍有不同。企业级的配置我们一般要先设置电脑的系统参数,例如最大可打开的文件数,最多同时使用的进程数等;在配置好这些之后,再开始进行后面的配置。
一、前提
1、环境:
系统:centos6.8
jdk:1.7
hbase:1.2.3
2.集群规划
namenode1:59.78.184.37 hmaster(active OR standby)/hdfs/zookeeper
namenode2:59.78.184.39 hmaster(active OR standby)/hdfs/zookeeper
datanode:59.78.184.43 regionserver/hdfs/zookeeper
3.配置系统参数
修改系统最大进程数和最多文件打开数
su root
vi /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
修改完之后,可使用ulimit -a查看
调整linux内核数
vi /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.使用ntp或其他工具使集群时间同步(这一点很重要,若时间不一致,会导致出错)
二、配置
1.将hbase的tar包拷贝至namenode1,并解压缩到/opt下,权限赋予给hadoop
2.配置以下几个文件:hbase-env.sh hbase-site.xml regionserver backup-masters
hbase-env.sh:
</pre><pre name="code" class="plain">//配置java路径
export JAVA_HOME=/opt/java/jdk1.7.0_25
//设置hbase内存堆的大小
export HBASE_HEAPSIZE=1024
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
//设置hmaster最大可用内存
export HBASE_MASTER_OPTS="-Xmx512m"
//设置regionserver最大可用内存
export HBASE_REGIONSERVER_OPTS="-Xmx512m"
//设置hbase的log目录
export HBASE_LOG_DIR=${HBASE_HOME}/logs
//设置hbase的pid目录
export HBASE_PID_DIR=/opt/hbase/pids
//设置为false说明不使用自带的zookeeper
export HBASE_MANAGES_ZK=false
hbase-site.xml
</pre><pre name="code" class="plain"><configuration>
<!--是否将log plit-->
<property>
<name>hbase.master.distributed.log.splitting</name>
<value>false</value>
</property>
<!--hbase的路径,mycluster与hadoop中的core-site.xml中配置一致-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--master的端口号-->
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
<!--指定zookeeper的机器名-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>namenode1,namenode2,datanode</value>
</property>
<!--zookeeper的data路径,与zookeeper的一致-->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/hadoopdata/zookeeper/data</value>
</property>
<property>
<name>hbase.client.scanner.caching</name>
<value>2000</value>
</property>
<!--最多存放的文件数-->
<property>
<name>hbase.hregion.max.filesize</name>
<value>10737418240</value>
</property>
<property>
<name>hbase.regionserver.regionSplitLimit</name>
<value>2000</value>
</property>
<property>
<name>hbase.hstore.compactionThreshold</name>
<value>6</value>
</property>
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>14</value>
</property>
<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>20</value>
</property>
<property>
<name>hbase.server.thread.wakefrequency</name>
<value>500</value>
</property>
<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>hfile.block.cache.size</name>
<value>0.4</value>
</property>
<property>
<name>hbase.regionserver.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>
regionserver (配置regionserver的机器)
datanode
backup-masters(配置备用master机器名)
namenode2
将hadoop下的hdfs-site.xml拷贝的/opt/hbase/conf文件下,以便hbase能够找到hadoop
3.创建上述配置中的路径文件夹。
4.将配置好的hbase文件夹拷贝至其他两台机器中:
scp -r /opt/hbase-1.2.3 namenode2:/opt
scp -r /opt/hbase-1.2.3 datanode:/opt
5.各机器上配置环境变量
vi ~/.bashrc
export HBASE_HOME=/opt/hbase-1.2.3
export PATH=$PATH:$HBASE_HOME/bin
source ~/.bashrc 使配置生效三、启动
以上配置完成之后,可启动hbase
1.依次启动zookeeper(可参见上一篇文章)
2.启动hdfs
namenode1上直接运行 ./start-dfs.sh 即可
3.启动hbase
namenode1上启动即可
cd /opt/hbase-1.2.3/bin
./start-hbase.sh
从上图可看出,依次启动了主master,regionserver和namenode2的备用master
4.在datanode上可以运行hbase shell查看hbase 是否可用,是否可建表,插入数据等。
5.在浏览器上查看
namenode1:
namenode2:
ps:之前启动hbase时失败过一次,报错如下:Couldn't create proxy provider null
这个是hadoop配置出错,在hdfs-site.xml文件中。