vagrant+virtual box 安装centos7
下载安装vagrant
- 访问官网www.vagrantup.com
- 选择最新版本安装
- 终端输入vagrant,测试是否安装成功
下载安装virtual box
- 访问官网www.virtualbox.org
- 选择最新版本安装
安装centos7
- 访问www.vagrantbox.es
- 查找需要的系统版本,获取下载url,如:github.com/tommy-muehl…
- 通过以下命令加载/初始化/启动镜像
$ vagrant box add {title} {url}
$ vagrant init {title}
$ vagrant up
集群安装
- vagrant init
- 修改生成的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地址需和物理机在同一网段,方便后续操作。
- 启动虚拟机
vagrant up
- 登录master验证机器之间的连通性
vagrant ssh master-node
ping 192.168.1.112
ping 192.168.1.113
其他两天机器依次执行相同操作
- 验证物理机与三台虚拟机的连通性,若不能ping通,打开virtual box,找到对应的虚拟机,将网卡连接方式均改为桥接模式。
- 登录虚拟机修改root密码
vagrant ssh master-node
sudo -i
passwd
- 配置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
其余节点执行类似操作
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 增加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集群搭建
- 安装java环境
yum install java
- 下载和解压
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
- 配置
分别进入安装目录下的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
- 标识节点
分别在三个节点的数据存储目录下新建 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
- 启动集群 分别启动三个节点:
/opt/apache-zookeeper-3.7.0-bin/bin/zkServer.sh start
- 集群验证 使用 jps 查看进程,并且使用 zkServer.sh status 查看集群各个节点状态。如图三个节点进程均启动成功,并且两个节点为 follower 节点,一个节点为 leader 节点。
kafka集群搭建
- 下载和解压
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
- 修改配置文件 进入安装目录下的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 进行配置的。
- 启动集群 启动三个 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
- 创建测试主题 创建测试主题:
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安装
- 下载解压
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
- 修改配置 配置文件都在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
- 配置Hadoop 环境变量 三台机器都需要配置
vi /etc/profile
export HADOOP_HOME=/opt/hadoop-3.2.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
然后保存退出
执行 source /etc/profile 使配置生效
- 初始化操作 完成以上步骤后,需要先格式化文件系统
在 NameNode 节点上执行,上面的配置是将 master-node 作为 NameNodde 节点,worker01-node,worker02-node 作为 DataNode 节点
在 master-node 下执行格式化
hdfs namenode -format
- 启动hadoop start-all.sh 启动Hadoop集群
stop-all.sh 关闭Hadoop集群
- 验证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集群安装
- 下载解压
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
- 环境变量配置 vi /etc/profile
# 在 /etc/profile 文件末尾添加如下内容
export HBASE_HOME=/opt/hbase-2.4.2
export PATH=$HBASE_HOME/bin:$PATH
# 使配置生效
source /etc/profile
- 修改配置,配置文件目录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/
- 启动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失败,通常是因为子节点系统的时间不同步造成的。调整系统时间即可解决。