代码改变世界

搭建企业hbase

2016-11-07 05:22  方小呆dai  阅读(303)  评论(0编辑  收藏  举报

一、简介:

1.1 简介

HBase是一个分布式的、面向列的开源数据库。HBase是Apache的Hadoop项目的子项目,不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,且HBase是基于列而不是基于行的模式。它具有高可靠性、高性能、面向列、可伸缩的特性,利用HBase技术可在廉价PC上搭建起大规模结构化存储集群。

HBase的常见使用场景:

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

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

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

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

 

1.2 架构

承接上一节,使用NameNode1、NameNode2和DataNode1 三个服务器来模拟集群,NameNode1上搭建Hbase和Hmaster,NameNode2搭建Hmaster,与NameNode1互为主备,DataNode1上搭建regionserver,Hbase通过zookeeper来保存活跃的master节点信息,保证活跃的master节点出现问题时,备用master取代主master。


二、准备阶段
(这一过程实际应该在安装hadoop之前就进行) 

2.1 查看、修改Linux系统的最大文件打开数和最大进程数

ulimit –a       //测试环境一般不用修改,但是商业应用时一般需要修改

 

su

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

 

2.2 调整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

保存修改

:wq

sysctl -p

 

2.3 配置时间同步

如果集群节点时间不同步,可能会出现节点宕机或其它异常,生产环境中一般通过配置NTP服务器实现集群时间同步,需要确保各节点的时间差在10s以内,有条件最好隔一段时间同步一次。本集群在节点hadoop-namenode1中设置ntp服务器,具体方法如下:

切换至root用户

su root

查看、安装ntp

pm -qa | grep ntp

yum install -y ntp

配置时间服务器

vim /etc/ntp.conf

禁止所有机器连接ntp服务器

restrict default ignore

允许局域网内的所有机器连接ntp服务器

restrict 192.168.152.0 mask 255.255.255.0 nomodify notrap

使用本机作为时间服务器

server 127.127.1.0

启动ntp服务器

service ntpd start

设置ntp服务器开机自动启动

chkconfig ntpd on

集群其它节点通过执行crontab定时任务,每天在指定时间向ntp服务器进行时间同步,方法如下:

切换root用户

su root

执行定时任务,每天00:00向服务器同步时间,并写入日志

crontab -e

0       0       *      *       *       /usr/sbin/ntpdate hadoop-namenode1>> /home/hadoop/ntpd.log

// 查看任务

crontab -l

三、Hbase的安装、配置

3.1 下载、安装Hbase

此处版本为:

hbase-1.2.2-bin.tar.gz

解压安装Hbase:

tar zxvf hbase-1.2.2-bin.tar.gz

删除安装文件:

rm hbase-1.2.2-bin.tar.gz

 

3.2 配置环境:

cd /home/hadoop/apache/hbase-1.2.2/conf

vim hbase-env.sh

export JAVA_HOME=/home/hadoop/apache/jdk1.8.0_101   //设置jdk的路径

export HBASE_HEAPSIZE=1024                      //设置hbase的堆(内存)的大小

export HBASE_MASTER_OPTS=”-Xmx512m”       //设置hmaster的内存,企业级一般为4-8G

export HBASE_REGIONSERVER_OPTS=”-Xmx1024m”   //设置regionserver的大小

export HBASE_LOG_DIR=${HBASE_HOME}/logs       //设置hbase日志路径

export HBASE_PID_DIR=/home/hadoop/apache/hbase-1.2.2/pids

export HBASE_MANAGES_ZK=false       //选用独立的zookeeper集群

 

配置hbase-site.xml文件

vim hbase-site.xml

 

vim regionservers              //添加regionserver节点主机名

hadoop-datanode1

 

复制hdfs-site.xml到conf目录下

cp /home/hadoop/apache/hadoop-2.6.0/etc/hadoop/hdfs-site.xml .

 

vim backup-masters           //添加备用Hmaster节点主机名

hadoop-namenode2

 

创建hbase的缓存文件目录、日志文件目录和pid文件目录

cd /home/hadoop/apache/hbase-1.2.2/

mkdir tmp

mkdir logs

mkdir pids

 

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

scp -r /home/hadoop/apache/hbase-1.2.2 hadoop@hadoop-namenode2:/home/hadoop/apache/

scp -r /home/hadoop/apache/hbase-1.2.2 hadoop@hadoop-datanode1:/home/hadoop/apache/

 

3.4 在各节点上修改用户环境变量并使其生效,且授予权限

chown -R hadoop:hadoop hbase-1.2.2

vim ~/.bash_profile

export HBASE_HOME=/home/hadoop/apache/hbase-1.2.2

export PATH=$PATH:$HBASE_HOME/bin

source ~/.bash_profile

四、启动集群

zkServer.sh start

start-dfs.sh

start-yarn.sh

yarn-daemon.sh start resourcemanager

start-hbase.sh

五、功能测试

 

Shell操作

进入Shell

hbase shell

创建表employee,列族data

> create 'employee','data'

往表employee中插入测试数据

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

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

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

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

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

检索表employee中的所有数据

> scan 'employee'

检索表employee中行键为rowkey01的数据

> get 'employee','rowkey01'

禁用表employee并删除它

> disable 'employee'

> drop 'employee'

 

 

六、HDFS、HBase动态替换节点

6.1 Hadoop、HBase动态增加节点

6.1.1 增加Hadoop节点

新节点的IP配置,用户创建,核对时间,修改最大文件读取数、最大用户进程数和内核参数,SSH免密码登录配置等

配置hosts文件,添加主机名和IP地址,且同步到其它节点

修改hadoop的配置文件slaves,添加新节点的主机名

复制JDK和hadoop目录到新的节点(注意新节点的hadoop的data、pids等目录需要清除数据)

新节点hadoop权限的修改

修改新节点的环境变量

在新节点中通过命令Hdfs dfsadmin –setBalancerBandwidth设置字节数、带宽,通过命令start-balancer.sh -threshold 5均衡当前的HDFS块 (threshold是平衡阈值,默认是10%,值越小负载越均衡,但需要更长的时间去执行)

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

 

6.1.2 增加HBase节点

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

复制hbase目录到新的节点(注意新节点的data等目录也需要清除数据)

在新节点通过命令hbase-daemon.sh start regionserver启动HRegionServer

在新节点上通过hbase-daemon.sh start regionserver启动regionserver

进入hbase shell,通过命令balance_switch true进行region负载平衡

 

6.2 Hadoop、HBase动态删除节点

6.2.1 删除HBase节点

通过‘graceful_stop.sh 节点名’使得需要删除的节点的负载均衡停止使用

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

 

6.2.2 删除Hadoop节点

在hadoop的配置文件hdfs-site.xml中添加配置:

<property>

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

<value>/home/hadoop/apache/hadoop-2.6.0/etc/hadoop/exclude</value>

</property>

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

通过命令hdfsafsadmin -refreshNodes执行节点刷新操作,重新加载配置

通过命令hadoop dfsadmin –report查看集群状态