使用vagrant+virtual box安装Kafka和Hadoop集群

480 阅读2分钟

vagrant+virtual box 安装centos7

下载安装vagrant

  1. 访问官网www.vagrantup.com
  2. 选择最新版本安装
  3. 终端输入vagrant,测试是否安装成功

下载安装virtual box

  1. 访问官网www.virtualbox.org
  2. 选择最新版本安装

安装centos7

  1. 访问www.vagrantbox.es
  2. 查找需要的系统版本,获取下载url,如:github.com/tommy-muehl…
  3. 通过以下命令加载/初始化/启动镜像
 $ vagrant box add {title} {url}
 $ vagrant init {title}
 $ vagrant up

集群安装

  1. vagrant init
  2. 修改生成的Vagrantfile文件:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
boxes = [
  {
      :name => "master-node",
      :eth1 => "192.168.1.111",
      :mem => "1024",
      :cpu => "1"
  },
  {
      :name => "worker01-node",
      :eth1 => "192.168.1.112",
      :mem => "1024",
      :cpu => "1"
  },
  {
      :name => "worker02-node",
      :eth1 => "192.168.1.113",
      :mem => "1024",
      :cpu => "1"
  }
]

Vagrant.configure(2) do |config|

config.vm.box = "centos7"

 boxes.each do |opts|
    config.vm.define opts[:name] do |config|
      config.vm.hostname = opts[:name]
      config.vm.provider "virtualbox" do |v|
        v.customize ["modifyvm", :id, "--memory", opts[:mem]]
                v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
                v.customize ["modifyvm", :id, "--name", opts[:name]]
      end

      config.vm.network :public_network, ip: opts[:eth1]
    end
  end
end

备注:虚拟机IP地址需和物理机在同一网段,方便后续操作。

  1. 启动虚拟机
vagrant up
  1. 登录master验证机器之间的连通性
vagrant ssh master-node
ping 192.168.1.112
ping 192.168.1.113

其他两天机器依次执行相同操作

  1. 验证物理机与三台虚拟机的连通性,若不能ping通,打开virtual box,找到对应的虚拟机,将网卡连接方式均改为桥接模式。
  2. 登录虚拟机修改root密码
vagrant ssh master-node
sudo -i
passwd
  1. 配置ssh免密 登录master-node执行以下命令:
ssh-keygen -t rsa
ssh-copy-id -i  .ssh/id_rsa.pub root@worker01-node
ssh-copy-id -i  .ssh/id_rsa.pub root@worker02-node

其余节点执行类似操作

  1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  1. 增加host name
vi /etc/hosts

新增以下内容:

192.168.101.111 master-node
192.168.101.112 worker01-node
192.168.101.113 worker02-node

删除这条记录(若存在):

127.0.0.1 master-node master-node

zookeeper集群搭建

  1. 安装java环境
yum install java
  1. 下载和解压
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
  1. 配置

分别进入安装目录下的conf目录,拷贝zoo_sample.cfg为zoo.cfg并进行修改,三份配置文件分别为: master-node:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-cluster/data
dataLogDir=/usr/local/zookeeper-cluster/log
clientPort=2181

# server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里
# 指名集群间通讯端口和选举端口
server.1=master-node:2287:3387
server.2=worker01-node:2287:3387
server.3=worker02-node:2287:3387

worker01-node:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-cluster/data
dataLogDir=/usr/local/zookeeper-cluster/log
clientPort=2181

server.1=master-node:2287:3387
server.2=worker01-node:2287:3387
server.3=worker02-node:2287:3387

worker02-node:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-cluster/data
dataLogDir=/usr/local/zookeeper-cluster/log
clientPort=2181

server.1=master-node:2287:3387
server.2=worker01-node:2287:3387
server.3=worker02-node:2287:3387

备注:可以看出,三份配置文件只有dataLogDir和dataLogDir不同

配置参数说明:

tickTime:用于计算的基础时间单元。比如 session 超时:N*tickTime; initLimit:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示; syncLimit:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制); dataDir:数据存储位置; dataLogDir:日志目录; clientPort:用于客户端连接的端口,默认 2181

  1. 标识节点

分别在三个节点的数据存储目录下新建 myid 文件,并写入对应的节点标识。Zookeeper 集群通过 myid 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 leader 节点。

创建存储目录并写入节点标识到myid文件: master-node

mkdir -vp  /usr/local/zookeeper-cluster/data
echo "1" > /usr/local/zookeeper-cluster/data/myid

worker01-node

mkdir -vp  /usr/local/zookeeper-cluster/data
echo "2" > /usr/local/zookeeper-cluster/data/myid

worker02-node

mkdir -vp  /usr/local/zookeeper-cluster/data
echo "3" > /usr/local/zookeeper-cluster/data/myid
  1. 启动集群 分别启动三个节点:
/opt/apache-zookeeper-3.7.0-bin/bin/zkServer.sh start
  1. 集群验证 使用 jps 查看进程,并且使用 zkServer.sh status 查看集群各个节点状态。如图三个节点进程均启动成功,并且两个节点为 follower 节点,一个节点为 leader 节点。

kafka集群搭建

  1. 下载和解压
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.0/kafka_2.13-2.7.0.tgz
tar -zxvf kafka_2.13-2.7.0.tgz
  1. 修改配置文件 进入安装目录下的config目录,修改server.properties的部分配置如下: master-node:
# The id of the broker. 集群中每个节点的唯一标识
broker.id=0
# 监听地址
listeners=PLAINTEXT://192.168.101.111:9092
# 数据的存储位置
log.dirs=/usr/local/kafka-logs
# Zookeeper连接地址
zookeeper.connect=master-node:2181,worker01-node:2181,worker02-node:2181

worker01-node:

broker.id=1
listeners=PLAINTEXT://192.168.101.112:9092
log.dirs=/usr/local/kafka-logs
zookeeper.connect=master-node:2181,worker01-node:2181,worker02-node:2181

worker02-node:

broker.id=2
listeners=PLAINTEXT://192.168.101.113:9092
log.dirs=/usr/local/kafka-logs
zookeeper.connect=master-node:2181,worker01-node:2181,worker02-node:2181

这里需要说明的是 log.dirs 指的是数据日志的存储位置,确切的说,就是分区数据的存储位置,而不是程序运行日志的位置。程序运行日志的位置是通过同一目录下的 log4j.properties 进行配置的。

  1. 启动集群 启动三个 Kafka 节点。启动后可以使用 jps 查看进程,此时应该有三个 zookeeper 进程和三个 kafka 进程。
/opt/kafka_2.13-2.7.0/bin/kafka-server-start.sh /opt/kafka_2.13-2.7.0/config/server.properties
  1. 创建测试主题 创建测试主题:
bin/kafka-topics.sh --create --bootstrap-server master-node:9092 --replication-factor 3 --partitions 1 --topic log

创建后可以使用以下命令查看创建的主题信息:

bin/kafka-topics.sh --describe --bootstrap-server master-node:9092 --topic log

Hadoop安装

  1. 下载解压
wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz
tar -zxvf hadoop-3.2.2.tar.gz  
  1. 修改配置 配置文件都在Hadoop解压目录的etc/hadoop下。
  • hadoop-env.sh配置 找到export JAVA_HOME=...这行,修改为实际的路径
  • core-site.xml配置 configuration标签里添加如下配置:
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.101.111:9000</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop-3.2.2/tmp-data</value>
</property>
  • hdfs-site.xml配置 指定hdfs副本数量
    <configuration>
       <property>
           <name>dfs.replication</name>
           <value>2</value>
       </property>
    </configuration>
  • mapred-site.xml配置 指定 MapReduce运行在yarn上
    <configuration> 
       <property>  
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
  • yarn-site.xml配置

指定 ResourceManager 服务节点

    <configuration>
       <property>
            <name>yarn.resourcemanger.hostname</name>
            <value>master-node</value>
        </property>
        <property>
             <name>yarn.nodemanager.aux-services</name>
             <value>mapreduce_shuffle</value>
         </property>
     </configuration>
  • workers配置

在此文件添加 我们作为DataNode节点的两台台机器的主机名,如果我们只将master-node 作为 namenode不做为datanode的话,就不用在此文件中添加了,我这里三台机器都做为 DataNode 节点:

master-node
worker01-node
worker02-node
  1. 配置Hadoop 环境变量 三台机器都需要配置
vi /etc/profile

export HADOOP_HOME=/opt/hadoop-3.2.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

然后保存退出

执行 source /etc/profile 使配置生效

  1. 初始化操作 完成以上步骤后,需要先格式化文件系统

在 NameNode 节点上执行,上面的配置是将 master-node 作为 NameNodde 节点,worker01-node,worker02-node 作为 DataNode 节点

在 master-node 下执行格式化

hdfs namenode -format
  1. 启动hadoop start-all.sh 启动Hadoop集群

stop-all.sh 关闭Hadoop集群

  1. 验证hadoop 在namenode节点下执行jps,可以看到如下进程:NodeManager、ResourceManager、DataNode、NameNode、SecondaryNameNode。

在datanode节点下执行jps,可以看到如下进程:DataNode、NodeManager

如果发现缺少进程,进入logs文件夹,查看相应进程对应的日志文件。

通过浏览器访问WEB UI:http://ip:9870

备注:因为root用户启动,会报错。 在文件开始空白处增加以下内容: 在start-dfs.sh中:

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root 

在start-yarn.sh中

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

hbase集群安装

  1. 下载解压
wget https://mirrors.bfsu.edu.cn/apache/hbase/2.4.2/hbase-2.4.2-bin.tar.gz
tar xvzf hbase-2.4.2-bin.tar.gz
  1. 环境变量配置 vi /etc/profile
# 在 /etc/profile 文件末尾添加如下内容
export HBASE_HOME=/opt/hbase-2.4.2
export PATH=$HBASE_HOME/bin:$PATH
 
# 使配置生效
source /etc/profile
  1. 修改配置,配置文件目录conf下
  • hbase-env.sh
export JAVA_HOME= /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64
#禁用Hbase自带的zookeeper
export HBASE_MANAGES_ZK=false
  • hbase-site.xml
<configuration>
    <!-- 指定hbase在HDFS上存储的路径 -->
    <property>
      <name>hbase.rootdir</name>
      <value>hdfs://master-node:9000/hbase</value>
   </property>
   <!-- 指定hbase是分布式的 -->
   <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
   </property>
   <!-- 指定zk的地址,多个用“,”分割 -->
   <property>
      <name>hbase.zookeeper.quorum</name>
    <value>192.168.101.111:2181,192.168.101.112:2181,192.168.101.113:2181</value>
    </property>
    <property>
      <name>hbase.zookeeper.property.dataDir</name>
            <value>/opt/data/zookeeper</value>
 </property>
 <property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
 </property>
</configuration>
  • regionservers

添加节点hostname

 master-node
 worker01-node
 worker02-node

拷贝hadoop配置文件core-site.xml和hdfs-site.xml到hbase-2.4.2/conf下

cp $HADOOP_HOME/etc/hadoop/core-site.xml $HBASE_HOME/conf/
cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml $HBASE_HOME/conf/
  1. 启动Hbase 在启动Hbase之前,先启动zookeeper和hadoop。

在哪个节点上输入启动命令start-hbase.sh,哪个节点就是Hmaster。启动完成后可以通过jps查看进程。

Hmaster节点进程:

SecondaryNameNode
NodeManager
ResourceManager
HRegionServer
Jps
DataNode
QuorumPeerMain
HMaster
NameNode

子节点进程:

QuorumPeerMain
HRegionServer
DataNode
Jps
NodeManager

启动完成后,可以通过WEB UI查看Hbase集群情况,http://ip:16010

备注:如果发现子节点启动HRegionServer失败,通常是因为子节点系统的时间不同步造成的。调整系统时间即可解决。