HBase 分布式集群搭建手记

摘要

由于HBase的数据是存放在HDFS上的,HBase依赖于Hadoop环境,搭建HBase集群环境前需要搭建好Hadoop集群环境,并且这里使用独立的Zookeeper进行集群管理,所以也需要单独安装Zookeeper。

整个安装步骤大致为以下几步:

  • 环境介绍
  • 基础环境配置
  • Hadoop 安装
  • Zookeeper 安装
  • HBase 安装

一、环境介绍

1.1 软件准备

本次搭建使用的软件版本清单:

  • Linux: CentOS 6 64bit
  • Hadoop: hadoop-2.5.1
  • Zookeeper: zookeeper-3.4.13
  • HBase: hbase-1.2.8

软件下载地址: 访问中科大源 http://mirrors.ustc.edu.cn/ 获取所需安装镜像。

1.2 Host与服务

本次搭建使用的服务器列表及所需安装软件:

  • server01(192.168.11.10): HDFS NameNode, HBase Master
  • server02(192.168.11.11): Zookeeper, HDFS DataNode, HBase RegionServer
  • server03(192.168.11.12): Zookeeper, HDFS DataNode, HBase RegionServer
  • server04(192.168.11.13): Zookeeper, HDFS DataNode, HBase RegionServer

二、基础环境配置

*:表示每台机器都要配置

1. 创建新用户及用户组*

 $ sudo groupadd hadoop  # 创建hadoop用户组
 
 $ sudo useradd -g hadoop hadoop # 在hadoop用户组中添加hadoop用户

 $ sudo passwd hadoop # 给用户hadoop设置密码

 $ sudo visudo # 将hadoop账号添加到sudo列表
   hadoop ALL=(ALL) NOPASSWD:ALL

注意:以下操作在 hadoop 账号下进行, 使用 su - hadoop 切换到 hadoop 账号

2. 安装JDK*

$ yum install java-1.8.0-openjdk-devel # 安装jdk

$ rpm -qa | grep java  # 查看安装了哪些包

$ rpm -ql # java包名 查看安装的位置

 # 在 /etc/profile 文件中配置 Java 环境
$ sudo vim /etc/profile

  JAVA_HOME=/etc/alternatives/jre_1.8.0_openjdk
  CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
  PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
  export PATH JAVA_HOME CLASSPATH

3. 配置 host 文件*

确保所有主机都能正确的解析自己以及集群内其它所有主机的主机名。

$ sudo vim /etc/hosts # 设置hosts

   192.168.11.10   server01
   192.168.11.11   server02
   192.168.11.12   server03
   192.168.11.13   server04

4. 配置 SSH 无密登录*

Hadoop需要使用SSH协议,namenode使用SSH无密码登录并启动datanode进程,同样原理,datanode上也能使用SSH无密码登录到namenode(这样也能在datanode上进行启动或关闭hadoop)。 Namenode作为客户端,要实现无密码公钥认证,连接到服务器端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。Namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了,期间不需要用户输入密码。

在server01上建立hadoop用户的授信证书

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
# -t 表示生成算法 有两种rsa和dsa, -P 表示使用的密码,''表示无密码

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 
# 将id_dsa.pub的内容追加到authorized_keys的内容后面

$ chmod 644  ~/.ssh/authorized_keys # 设置该文件的读写权限

在server02上建立hadoop用户的授信证书

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 644  ~/.ssh/authorized_keys

# 使用 SCP 将server01的公钥追加到本机authorized_keys后面
$ sudo scp -r hadoop@server01:/home/hadoop/.ssh/id_dsa.pub /hoodap/home/.ssh/master_dsa.pub
$ cat ~/.ssh/master_dsa.pub >> ~/.ssh/authorized_keys

这样server01就可以通过ssh无密码登录server02机器,但是server02无法登录server01。想要server02可以登录到server01,则需要将server02的公钥追加到server01的authorized_keys中。

在server01上进行以下操作
$ sudo scp -r hadoop@server02:/home/hadoop/.ssh/id_dsa.pub /hoodap/home/.ssh/server02_dsa.pub
$ cat ~/.ssh/server02_dsa.pub >> ~/.ssh/authorized_keys

其他server的操作同上。

5. 配置打开文件的最大句柄数*

防止 HDFS too many open files 异常,本脚本设置为 32768

$ sudo vim /etc/security/limits.conf

  *    -    nofile    32768  # 添加此行

6. 关闭 SELinux*

关闭 SELinux,使其状态为 disabled,启用时可能限制 SSH 免密登录。

$ sudo vim /etc/selinux/config  # Selinux的配置文件位置
  SELINUX=disabled

7. 关闭防火墙*

$ service iptables stop
$ chkconfig iptables off

8. 配置 NTP 服务*

  # 下载ntp
$ sudo yum install ntp
  # 设置为开机启动
$ chkconfig --add ntpd
$ chkconfig ntpd on
  # 启动ntp
$ service ntpd start

9. 配置 swappiness*

使 vm.swappiness= 0,以避免使用swap分区。

$ cat /etc/sys/vm/swappiness  # 查swappiness的值
$ sudo sysctl -p  # 查swappiness的值

$ sudo vim /etc/sysctl.conf  # 修改swappiness的值
  vm.swappiness= 0

10. 禁用透明大页面压缩*

$ sudo vim /etc/rc.local

  if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
  fi
  if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
  fi

三、Hadoop安装

1. 上传 hadoop 安装文件到server01上,并解压

# 创建hadoop软件的安装目录
$ sudo mkdir /opt/hadoop 
# 在 /opt/hadoop 目录下解压 hadoop 文件
$ sudo tar -zvxf hadoop-2.5.1.tar.gz

2. 修改 /etc/profile 文件*

$ sudo vim /etc/profile

  HADOOP_HOME=/opt/hadoop/hadoop-2.5.1
  CLASSPATH=$CLASSPATH:$HADOOP_HOME/src/core
  HADOOP_PATH=$HADOOP_HOME/bin
  PATH=$PATH:$CLASSPATH:$HADOOP_PATH:$HADOOP_HOME/bin:$HADOOP_HOME/src/core
  HADOOP_CLASSPATH=$HADOOP_HOME/build
  
  export PATH CLASSPATH HADOOP_HOME HADOOP_CLASSPATH HADOOP_PATH
$ source /etc/profile # 使配置文件生效

3. 修改Hadoop的配置文件

cd /opt/hadoop/hadoop-2.5.1/etc/hadoop/ 进入hadoop配置文件处

修改hadoop的以下5个配置文件 hadoop-env.sh、core-site.xml、mapred-site.xml、hdfs-site.xml、slaves。

  • hadoop-env.sh
$ sudo vim hadoop-env.sh
 export JAVA_HOME = /etc/alternative/jre_1.8.0_openjdk
  • core-site.xml
$ sudo vim core-site.xml
<configuration>
  <property>
  <name>fs.default.name</name>
  <value>hdfs://127.0.0.1:9000</value>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://server01:9000</value>
  </property>

  <property> 
    <name>hadoop.tmp.dir</name> 
    <value>/opt/hadoop/hadoop-2.5.1/hadoop_tmp/hadoop_${user.name}</value> 
  </property>
</configuration>
  • mapred-site.xml
    在高版本的hadoop中并没有mapred-site.xml文件,但是有一个mapred-site.xml.template文件,可以把它复制一下。
$ sudo cp mapred-site.xml.template mapred-site.xml
$ sudo vim mapred-site.xml
  
<configuration>
  <property>
      <name>mapred.job.tracker</name>
      <value>server01:9001</value>
  </property>
</configuration>
  • hdfs-site.xml
$ sudo vim hdfs-site.xml
 <configuration> 
  <property> // 文件块的副本数,一般不大于从机数
    <name>dfs.replication</name>
    <value>2</value>
  </property>

  <property> // hdfs的http访问位置
    <name>dfs.http.address</name>
    <value>server01:50070</value>
  </property>
</configuration>
  • slaves
$ sudo vim slaves
 server02
 server03
 server04

4. 使用 SCP 将配置好的 hadoop 文件复制到其他节点上

将安装的/opt/hadoop/hadoop-2.5.1文件复制到其他节点上

# 复制到server02的home目录下
$ scp -r hadoop-2.5.1 hadoop@server02:~ 
$ sudo mv hadoop-2.5.1 /opt/hadoop
# 其他server同上

注意:在各个server上执行 sudo chown -R hadoop:hadoop /opt/hadoop/ 设置读写权限(用于log的写入)

5. 格式化一个 namenode

在hadoop的安装目录下 ./bin/hdfs namenode -format

6. 启动 hadoop

./sbin/start-hdfs.sh

7. GUI 查看hadoop集群信息

默认地址:
NameNode:http://server01:50070
JobTracker: http://server01:50030

四、搭建Zookeeper集群

安装位置:server02,server03,server04

1. 上传 zookeeper 安装文件到server02上,并解压

# 创建zookeeper安装目录
$ sudo mkdir /opt/zookeeper
# 在 /opt/zookeeper 目录下解压文件
$ sudo tar -zvxf zookeeper-3.4.13

2. 配置zoo.cfg文件,将zoo_sample.cfg 文件复制一份

# 进入 /opt/zookeeper/zookeeper-3.4.13/conf 目录,修改zoo.cfg
$ sudo cp zoo_sample.cfg zoo.cfg
$ sudo vim zoo.cfg
  #the number of milliseconds of each tick
  tickTime=2000
  #the number of ticks that the initial synchronization phase can take
  initLimit=10
  #the number of ticks that can pass between sending a request and getting an acknowledgement
  syncLimit=5
  #the directory where the snapshot is stored
  // 修改存储快照文件目录
  dataDir=/home/opt/zookeeper/zookeeper-3.4.13/zookeeper_datastore 
  #the port at which the client will connect
  clientPort=2181
  #maxClientCnxns=0
  // 这里server.x中的x是一个数字,与myid文件中的id是一致的
  server.1=server02:2888:3888  
  server.2=server03:2888:3888
  server.3=server04:2888:3888
 

3. 创建 zookeeper_datastore 文件存放myid

$ sudo mkdir -p /opt/zookeeper/zookeeper-3.4.13/zookeeper_datastore
$ sudo vim /opt/zookeeper/zookeeper-3.4.13/zookeeper_datastore/myid
1

4. 修改 /etc/profile 配置文件

$ sudo vim /etc/profile

  ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.13
  PATH=$PATH:$ZOOKEEPER_HOME/bin
  
  export PATH ZOOKEEPER_HOME

5. 将配置好的zookeeper文件分发到其他节点(server03,server04)

$ scp -r zookeeper-3.4.13 hadoop@server03:~
$ sudo mv zookeeper-3.4.13 /opt/zoookeeper

6. 修改其他server的myid

$ sudo vim /opt/zookeeper/zookeeper-3.4.13/zookeeper_datastore/myid
2

注意:在各个server上执行 sudo chown -R hadoop:hadoop /opt/zookeeper 设置读写权限(用于log的写入)

7. 启动每台server上的zookeeper

# 启动 zookeeper
$ /opt/zookeeper/zookeeper-3.4.13/bin/zkServer.sh start
#  启动 zookeeper 时可以查看启动信息
$ /opt/zookeeper/zookeeper-3.4.13/bin/zkServer.sh start-foreground 
# 查看状态
$ /opt/zookeeper/zookeeper-3.4.13/bin/zkServer.sh status

五、HBase集群搭建

1. 上传 hbase 安装文件到server01上,并解压

# 创建 hbase 安装目录
$ sudo mkdir /opt/hbase
# 在 /opt/hbase 目录下安装文件
$ sudo tar -zvxf hbase-1.2.8-bin.tar.gz

2. 修改hbase的配置文件

在 /opt/hbase/hbase-1.2.8/conf 目录下,修改 hbase-env.sh、hbase-site.xml、regionservers。

  • hbase-env.sh
$ sudo vim hbase-env.sh
  export JAVA_HOME = /etc/alternative/jre_1.8.0_openjdk
  export HBASE_MANAGES_ZK=false
  • hbase-site.xml
$ sudo vim hbase-site.xml
<configuration>
  <property>
  <name>hbase.rootdir</name>
  <value>hdfs://server01:9000/hbase</value>
  </property>

  <property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
  </property>

  <property>
  <name>hbase.master.port</name>
  <value>60000</value>
  </property>

  <property>
  <name>hbase.zookeeper.quorum</name>
  <value>server02,server03,server04</value>
  </property>
</configuration>
  • regionservers
$ sudo vim regionservers
  server02
  server03
  server04

3. 修改 /etc/profile 配置文件*

$ sudo vim /etc/profile
 HBASE_HOME = /opt/hbase/hbase-1.2.8
 PATH=$PATH:$HBASE_HOME

 export HBASE_HOME PATH

4. 将安装文件 hbase-1.2.8 分发到其他节点

$ scp -r hbase-1.2.8 server02:~
# 移动到 /opt/hbase 目录下
$ sudo mv hbase-1.2.8 /opt/hbase

其他server操作同上。

注意:在各个server上执行 sudo chown -R hadoop:hadoop /opt/hbase 设置读写权限(用于log的写入)

5. 启动hbase

$ /opt/hbase/hbase-1.2.8/bin/start-hbase.sh

GUI 查看 hbase 集群信息

默认地址:http://server01:16010

六、总结

HBase集群的搭建步骤比较固定且繁琐,在进行操作时务必认真仔细。此文档主要是在公司进行HBase集群搭建时进行的整理,并且在搭建过程中得到了导师@Kent的指导与帮助,特此感谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值