名称 | 版本 | 资源 |
Linux | centos7 | centos7 |
JDK | 8u212 | jdk-8u212-linux-x64.tar.gz |
Hadoop | 3.1.3 | hadoop-3.1.3.tar.gz |
Zookerper | 3.5.7 | apache-zookeeper-3.5.7-bin.tar.gz |
Kafka | 2.4.1 | kafka_2.11-2.4.1.tgz |
Spark | 2.1.1 | spark-2.1.1-bin-hadoop2.7.tgz |
虚拟机环境配置
1、虚拟机配置
注意:单台虚拟机内存4G,磁盘50G
2、必要安装环境
sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
3、修改虚拟机的静态IP
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改为: (ONBOOT、IP地址、网关和DNS需要注意)
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.1.101
PREFIX=24
GATEWAY=192.168.1.2
DNS1=192.168.1.2
4、查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8
子网Ip : 192.168.1.0
子网掩码:255.255.255..0
网关:192.168.1.2
5、查看Windows系统适配器VMware Network Adapter VMnet8的IP地址
IP地址:192.168.1.10
子网掩码:255.255.255.0
DNS服务器:192.168.1.2
6、修改主机名
sudo hostnamectl --static set-hostname hadoop101
7、配置主机名映射,需要打开/etc/hosts
sudo vim /etc/hosts
添加内容:
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
8、关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
9、创建用户并给用户root权限
# 创建mayday用户
sudo useradd mayday
sudo passwd 123456
#重启虚拟机
reboot
#配置mayday用户具有root权限
vi sudo
修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
mayday ALL=(ALL) ALL
注:
vi显示行号命令:
: set nu
#在/opt目录下创建文件夹
1、在/opt目录下创建module、software文件夹
sudo mkdir module
sudo mkdir software
2、修改module、software文件夹的所有者cd
sudo mkdir /opt/module /opt/software
sudo chown mayday:mayday /opt/module /opt/software
10、安装JDK,先卸载自带的JDK
rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
注: 可以用CRT或者Xshell连接虚拟机,上传资源直接拖进去即可
11、解压到指定目录
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
12、配置环境变量
1、新建/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
2、添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
3、保存后退出
:wq
4、重启xshell窗口,让环境变量生效
5、测试JDK是否安装成功
java -version
如果能看到以下结果、则Java正常安装
java version "1.8.0_212"
Hadoop框架搭建
1、解压安装文件包到指定目录下
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
2、配置环境变量
1、获取Hadoop安装路径
[mayday@hadoop101 hadoop-3.1.3]$ pwd
/opt/module/hadoop-3.1.3
2、打开/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
3、在profile文件末尾添加JDK路径:(shitf+g)
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
4、后退出
:wq
5、改后的文件生效
source /etc/profile
6、安装成功
hadoop version
Hadoop 3.1.3
7、如果Hadoop命令不能用再重启)
sync
sudo reboot
注:基本每次安装一个组件都会重复上述 步骤
2、完全分布式需要三台
需要同步文件,避免重复配置,有时候会同步不成功,首先集群之间是可以ping通的,其次可能是权限问题,集群其他主机没有对应文件夹或权限
(1)在home/mayday下创建xsync文件
cd /home/mayday
vim xsync
(2)脚本实现
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
(3)修改脚本的执行权限
chmod +x xsync
(4)将脚本移入到bin中,方便全局调用
sudo mv xsync /bin/
(5)测试脚本
sudo xsync /bin/xsync
3、配置免密登陆
(1)ssh hadoop101会发现需要输入密码
(2)生成公钥和私钥
ssh-keygen -t rsa
然后只需要i巧三个回车,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(3)将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
注意:
还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
还需要在hadoop103上采用mayday登录到hadoop102、hadoop103、hadoop104服务器上。
集群规划
名称 | hadoop102 | hadoop103 | hadoop104 |
DFS | namenode datanode | datanode | secondary namenode dataode |
YARN | nodemanger | resourcemanger nodemanger | nodemanger |
1、配置core-site
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
添加内容
fs.defaultFS
hdfs://hadoop102:8020
hadoop.tmp.dir
/opt/module/hadoop-3.1.3/data
hadoop.proxyuser.mayday
*
hadoop.proxyuser.maydays
*
hadoop.http.staticuser.user
maydaye>
2、配置hdfs-site.xml
dfs.namenode.secondary.http-address
hadoop104:9868
3、配置yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop103
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
yarn.scheduler.minimum-allocation-mb
512
yarn.scheduler.maximum-allocation-mb
4096
yarn.nodemanager.resource.memory-mb
4096
yarn.nodemanager.pmem-check-enabled
false
yarn.nodemanager.vmem-check-enabled
false
4、配置mapred-site.xml
mapreduce.framework.name
yarn
配置完成后,向集群分发文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
5、群起集群
(1)配置works
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
添加内容
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行
所有节点同步
xsync /opt/module/hadoop-3.1.3/etc
6、启动集群
hdfs namenode -format
如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据
启动dfs
start-dfs.sh
start-yarn.sh
集群测试
# 小文件
hadoop fs -mkdir -p /user/mayday/
hadoop fs -put $HADOOP_HOME/wcinput/wc.input /user/mayday/
#传大文件
hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz /
7、配置历史服务器
(1)配置mapred-site.xml
vi mapred-site.xml
mapreduce.jobhistory.address
hadoop102:10020
mapreduce.jobhistory.webapp.address
hadoop102:19888
(2)分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
(3)启动历史服务器
mapred --daemon start historyserver
8、配置日志聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
(1)配置yarn.-site.xml
yarn.log-aggregation-enable
true
yarn.log.server.url
http://${yarn.timeline-service.webapp.address}/applicationhistory/logs
yarn.log-aggregation.retain-seconds
604800
yarn.timeline-service.enabled
true
yarn.timeline-service.hostname
${yarn.resourcemanager.hostname}
yarn.timeline-service.http-cross-origin.enabled
true
yarn.resourcemanager.system-metrics-publisher.enabled
true
配置完成之后
#分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
#闭NodeManager 、ResourceManager和HistoryServer
在103上执行: stop-yarn.sh
在102上执行: mapred --daemon stop historyserver
#启动NodeManager 、ResourceManage、Timelineserver和HistoryServer
在103上执行:start-yarn.sh
在103上执行:yarn --daemon start timelineserver
在102上执行:mapred --daemon start historyserver
#删除HDFS上已经存在的输出文件
hdfs dfs -rm -R /user/maydayt
#执行WordCount程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/mayday /user/mayday
Zookerper安装
1、解压到指定的目录
tar -zxvf zookeeper-3.5.7.tar.gz -C /opt/module/
2、集群同步
xsync zookeeper-3.5.7/
3、配置服务器编号
在zookerper下创建zkData
mkdir -p zkData
创建myid文件
vi myid
1
同步并修改其他两个节点为2,3,
4、配置zoo.cfg
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/opt/module/zookeeper-3.5.7/zkData
增加如下配置
#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
同步集群其他节点
bin/zkServer.sh start
5、群起脚本
vi zk.sh
添加内容
#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
echo "------------- $i -------------"
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
done
};;
esac
添加执行权限
chmod 777 zk.sh
Flume安装
1、解压到指定目录
tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/
2、修改名称
mv /opt/module/apache-flume-1.9.0-bin /opt/module/flume
3、将lib文件夹下的guava-11.0.2.jar删除以兼容Hadoop 3.1.3
rm /opt/module/flume/lib/guava-11.0.2.jar
4、将flume/conf下的flume-env.sh.template文件修改为flume-env.sh,并配置flume-env.sh文件
mv flume-env.sh.template flume-env.sh
vi flume-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_212
Kafka配置
1、解压安装包
tar -zxvf kafka_2.11-2.4.1.tgz -C /opt/module/
2、修改名称
mv kafka_2.11-2.4.1/ kafka
3、在/opt/module/kafka目录下创建logs文件夹
mkdir logs
4、修改配置文件
cd config/
vi server.properties
输入以下内容:
#broker的全局唯一编号,不能重复
broker.id=0
#删除topic功能使能
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径
log.dirs=/opt/module/kafka/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka
5、配置环境变量
vi /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
6、使配置文件生效
source /etc/profile.d/my_env.sh
7、分发文件
xsync kafka/
注意:分发之后记得配置其他机器的环境变量
分别在hadoop103和hadoop104上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=1、broker.id=2
注:broker.id不得重复
8、启动集群
bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties
9、群起脚本
vi kf.sh
添加内容
#! /bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo " --------启动 $i Kafka-------"
ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties "
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo " --------停止 $i Kafka-------"
ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh stop"
done
};;
esac
10、kakfa命令操作
1)查看当前服务器中的所有topic
bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka --list
2)创建topic
bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka \
--create --replication-factor 3 --partitions 1 --topic first
选项说明:
--topic 定义topic名
--replication-factor 定义副本数
--partitions 定义分区数
3)删除topic
bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka \
--delete --topic first
需要server.properties中设置delete.topic.enable=true否则只是标记删除。
4)发送消息
bin/kafka-console-producer.sh \
--broker-list hadoop102:9092 --topic first
>hello world
5)消费消息
bin/kafka-console-consumer.sh \
--bootstrap-server hadoop102:9092 --from-beginning --topic first
bin/kafka-console-consumer.sh \
--bootstrap-server hadoop102:9092 --from-beginning --topic first
--from-beginning:会把主题中以往所有的数据都读取出来。
6)查看某个Topic的详情
bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka \
--describe --topic first
7)修改分区数
bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka --alter --topic first --partitions 6
Spark安装(yarn模式)
1‘、解压到指定目录
tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/module/
2、进入到/opt/module目录,修改spark-2.1.1-bin-hadoop2.7名称为spark-yarn
mv spark-2.1.1-bin-hadoop2.7/ spark-yarn
3、hadoop配置文件/opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml,添加如下内容
vi yarn-site.xml
yarn.nodemanager.pmem-check-enabled
false
yarn.nodemanager.vmem-check-enabled
false
分发配置文件
xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
修改/opt/module/spark/conf/spark-env.sh,添加YARN_CONF_DIR配置,保证后续运行任务的路径都变成集群路径
mv spark-env.sh.template spark-env.sh
vi spark-env.sh
YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
分发spark-yarn
xsync spark-yarn
启动集群
sbin/start-dfs.sh
sbin/start-yarn.sh
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.11-2.1.1.jar \
10
4、配置历史服务器
1)修改spark-default.conf.template名称
mv spark-defaults.conf.template spark-defaults.conf
2)修改spark-default.conf文件,配置日志存储路径,并分发
vi spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop102:8020/directory
xsync spark-defaults.conf
3)修改spark-env.sh文件,添加如下配置:
vi spark-env.sh
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory
-Dspark.history.retainedApplications=30"
# 参数1含义:WEBUI访问的端口号为18080
# 参数2含义:指定历史服务器日志存储路径
# 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
4)分发配置文件
xsync spark-env.sh
查看集群运行状态脚本jps
#!/bin/bash
for i in hadoop106 hadoop107 hadoop108
do
echo "=============== $i =============="
ssh $i 'jps'
done