集群规划
- 本次安装拟使用的各软件版本如下
- CentOS 7.6
- Zookeeper 3.6.3
- Hadoop 3.2.2
- Hive 3.1.2
- Spark 3.0.2
- Sqoop 1.4.7
- MySQL 8.0.21
- 机器规划
一、安装CentOS 7.6
若使用虚拟机,建议选择2CPU2线程,4G或以上内存,至少50G硬盘。
安装过程注意事项主要包括:
- 日期和时间:选择上海
- 语言支持:简体中文和英语
- 软件选择:最小安装,选择其中的调试工具、兼容性程序库、开发工具、安全性工具、和系统管理工具
- 设置root密码:root123
安装完成后,重启即可登录系统
二、配置Linux
使用root用户登录机器,进行相关配置
2.1 配置IP地址
修改文件/etc/sysconfig/network-scripts/ifcfg-ens33,变更相关配置,应保证hadoop集群机器IP地址不变
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.100.124
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
DNS1=114.114.114.114
DNS2=218.2.135.1
2.2 基础配置
- 配置主机名。根据机器不同,设置不同的主机名,从hadoop101开始。命令:hostnamectl set-hostname hadoop101
- 关闭防火墙。依次执行下列命令,最后查看防火墙状态
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl status firewalld.service #查看firewall状态
- 关闭selinux。修改文件/etc/sysconfig/selinux,将SELINUX=enforcing改为SELINUX=disabled。然后重启后用sestatus命令查看状态
# sestatus
SELinux status: disabled
- 安装net-tools。可在线或离线安装
# 在线安装命令
sudo yum -y install net-tools
# 离线安装
# 下载net-tools包,centos7版本:
http://mirrors.163.com/centos/7/os/x86_64/Packages/net-tools-2.0-0.25.20131004git.el7.x86_64.rpm
# 离线安装命令
sudo rpm -Uvh net-tools-2.0-0.25.20131004git.el7.x86_64.rpm
# 验证安装是否成功
netstat -nltp
2.3 配置hadoop用户
本次安装计划在hadoop用户下,安装和使用hadoop集群 。命令如下:
# 首先创建用户
useradd hadoop
# 配置密码
passwd hadoop # 将hadoop的密码设置为:hadoop123
# 配置sudo权限
vi /etc/sudoers
# 在101行左右,添加一行:
hadoop ALL=(ALL) NOPASSWD:ALL
2.4 配置基本目录
为hadoop集群安排3个目录存放相关内容
- 程序目录:/app
- 数据目录:/data
- 日志目录:/applogs
mkdir /app /applogs /data
chown -R hadoop: /app /data /applogs
从本步骤之后,不做特别说明,均使用hadoop用户进行相关操作
2.5 安装jdk
- 下载:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
- 上传到Centos后解压并安装
# 解压上传的文件
tar zxvf jdk-8u281-linux-x64.tar.gz -C /app/
# 配置环境变量
sudo vi /etc/profile.d/env.sh
sudo chmod 777 /etc/profile.d/env.sh
# 在文件中添加下列配置
export JAVA_HOME=/app/jdk1.8.0_281
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
# 完成后,启用环境变量
source /etc/profile
- 验证是否安装完成
2.6 配置管理脚本
创建脚本存放目录:mkdir -p /home/hadoop/bin
2.6.1 配置分发脚本
创建脚本/home/hadoop/xsync,文件写入下列内容,并赋予执行权限chmod +x xsync
#!/bin/bash
#1. 判断参数个数
[ $# -lt 1 ] && {
echo Not Enough Arguement!
exit
}
# 遍历所有目标,同步所有文件
for file in $@
do
echo ====================== sync $file =====================
[ -e $file ] && {
for host in hadoop101 hadoop102 hadoop103
do
echo ----------------- $host --------------------
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
done
} || {
echo $file does not exists, please check again!
}
done
2.6.2 配置进程查看脚本
创建文件 /home/hadoop/bin/jpsall,输入下列内容,并授予执行权限
#!/bin/bash
for host in hadoop101 hadoop102 hadoop103
do
echo =============== $host ===============
ssh $host jps
done
2.7 克隆虚拟机
将本基础机器关闭,再克隆生成三台新的虚拟机,注意克隆时选择创建完整克隆
2.8 依次配置3台机器
- 配置ip地址
- 配置主机名,主机名配置为hadoop101、hadoop102、hadoop103 hostnamectl set-hostname hadoop101
- 修改所有机器的 /etc/hosts,添加以下内容: 192.168.100.124 hadoop101 192.168.100.129 hadoop102 192.168.100.130 hadoop103
- 为3台机器做ssh免密访问。要求效果root之间免密访问,hadoop用户之间免密访问。 ssh-keygen -t rsa
# 将所有服务器的 id_rsa.pub 内容汇总到 authorized_keys
# !!! 伪分布式,也必须要先生成 authorized_keys 文件!!!
# 复制到其他服务器
# scp authorized_keys @hadoop002:$PWD
# ssh-copy-id 将key写到远程机器的 ~/ .ssh/authorized_key.文件中
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop101
# 修改hadoop用户的.ssh下的权限(root不用修改)
sudo chmod 700 /home/hadoop/.ssh
sudo chmod 600 /home/hadoop/.ssh/*
2.9 配置时间同步
首先从服务器先同步时间,再执行以下操作
sudo ntpdate ntp1.aliyun.com或者使用命令sudo ntpdate 192.168.100.124
- 编辑 hadoop101 时间服务器配置文件 sudo vi /etc/ntp.conf #这一行的含义是授权172.16.128.0网段上的所有机器可以从这台机器上查询和同步时间. restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap # 修改server段内容 server 210.72.145.44 server ntp1.aliyun.com server ntp2.aliyun.com server ntp3.aliyun.com server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst server 127.127.1.0 fudge 127.127.1.0 stratum 10
- 编辑其他机器的时间服务配置文件sudo vi /etc/ntp.conf server 192.168.100.124 fudge 192.168.100.124 stratum 10
- 启动ntpd服务并设置开机启动 sudo service ntpd start sudo systemctl enable ntpd sudo systemctl enable ntpdate sudo systemctl is-enabled ntpd
参考文档:
https://blog.csdn.net/vic_qxz/article/details/80343351 https://www.linuxprobe.com/centos7-ntp-time.html
三、安装Zookeeper
1. 安装步骤
- 下载zookeeper3.6.3版本,解压文件到/app路径下 下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz tar zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /app/
- 建立相关的目录,存放数据和日志 mkdir -p /data/zookeeper/zdata/data
mkdir -p /data/zookeeper/zdata/logs - 为各服务器在data目录下,生成myid文件,不同服务器myid内值不能相同。从1开始,依次增加 echo 1 > /data/zookeeper/zdata/data/myid
- 修改zookeeper的配置文件,复制zoo_sample.cfg为zoo.cfg cd /app
ln -s apache-zookeeper-3.6.3-bin zookeeper
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
# 修改zoo.cfg,以下为配置信息
dataDir=/data/zookeeper/zdata/data
dataLogsDir=/data/zookeeper/zdata/logs
# 副本数
autopurge.snapRetainCount=3
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
4lw.commands.whitelist=* - 分发zookeeper到各服务器,注意修改各服务器的myid cd /app
xsync apache-zookeeper-3.6.3-bin zookeeper
cd /data
xsync zookeeper
# 在hadoop102执行
echo 2 > /data/zookeeper/zdata/data/myid
# 在hadoop103执行
echo 3 > /data/zookeeper/zdata/data/myid - 配置环境变量 # 在/etc/profile.d/env.sh中添加
export ZOOKEEPER_HOME=/app/apache-zookeeper-3.6.3
# 同步到各机器
sudo /home/hadoop/bin/xsync /etc/profile.d/env.sh
# 在所有服务器应用新的环境变量 - 编写集群管理脚本 myzookeeper.sh,脚本放置在home目录下面的bin目录中(/home/hadoop/bin) #!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 zookeeper 集群 ======================"
for host in hadoop101 hadoop102 hadoop103
do
echo "----------------- 启动 $host -------------------"
ssh $host "/app/apache-zookeeper-3.6.3/bin/zkServer.sh start"
done
;;
"stop")
echo " =================== 关闭 zookeeper 集群 ======================"
for host in hadoop101 hadoop102 hadoop103
do
echo "----------------- 关闭 $host -------------------"
ssh $host "/app/apache-zookeeper-3.6.3/bin/zkServer.sh stop"
done
;;
"status")
echo " =================== 检查 zookeeper 集群 ======================"
for host in hadoop101 hadoop102 hadoop103
do
echo "----------------- 检查 $host -------------------"
ssh $host "/app/apache-zookeeper-3.6.3/bin/zkServer.sh status"
done
esac
2. 启动验证
myzookeeper.sh start
四、安装Hadoop
1. 安装说明
- 本次使用Hadoop3.2.2版本,重点参考文档 https://blog.csdn.net/u012760435/article/details/104401268
- 本次安装程序是基于zookeeper搭建HA环境,请先安装zookeeper
2. 文件配置
- 下载解压hadoop: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 -C /app
cd /app
ln -s hadoop-3.2.2 hadoop
2.2 配置core-site.xml
fs.defaultFS
hdfs://mycluster
hadoop.tmp.dir
/data/hadoop/tmp
hadoop.http.staticuser.user
hadoop
ha.zookeeper.quorum
hadoop101:2181,hadoop102:2181,hadoop103:2181
hadoop.proxyuser.hadoop.hosts
*
hadoop.proxyuser.hadoop.groups
*
ipc.client.connect.max.retries
100
Indicates the number of retries a client will make to establish a server connection.
ipc.client.connect.retry.interval
10000
Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.
2.3 配置hadoop-env.sh
export JAVA_HOME=/app/jdk1.8.0_281
export HDFS_NAMENODE_USER="hadoop"
export HDFS_DATANODE_USER="hadoop"
export HDFS_ZKFC_USER="hadoop"
export HDFS_JOURNALNODE_USER="hadoop"
2.4 配置hdfs-site.xml
dfs.replication
2
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
nn1,nn2
dfs.namenode.rpc-address.mycluster.nn1
hadoop101:8020
dfs.namenode.rpc-address.mycluster.nn2
hadoop102:8020
dfs.namenode.http-address.mycluster.nn1
hadoop101:9870
dfs.namenode.http-address.mycluster.nn2
hadoop102:9870
dfs.namenode.shared.edits.dir
qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/mycluster
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
dfs.journalnode.edits.dir
/data/hadoop/journalnode
dfs.ha.automatic-failover.enabled
true
dfs.webhdfs.enabled
true
dfs.datanode.max.transfer.threads
8192
Specifies the maximum number of threads to use for transferring data
in and out of the DN.
2.5 配置workers
填入所有datanode的主机名称,不能留有空格
hadoop101
hadoop102
hadoop103
2.6 配置环境变量
export HADOOP_HOME=/app/hadoop-3.2.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 同步到各机器
sudo /home/hadoop/bin/xsync /etc/profile.d/env.sh
# 在所有服务器应用新的环境变量
2.7 修改进程最大文件打开数
sudo vi /etc/security/limits.conf
# 参考 https://blog.csdn.net/knowledgeaaa/article/details/21240247
# 添加以下内容
* - nofile 1000000
* - nproc 1000000
3. 首次启动集群
- 将同步hadoop目录及配置文件到所有机器
cd /app
xsync hadoop-3.2.2
- 启动journalnode,在所有journalnode节点上启动journalnode(本例中是所有机器)
hdfs --daemon start journalnode
- 初始化namenode,在任意namenode节点上执行格式化命令,出现successfully formated即为执行成功(本次在hadoop101执行)
hdfs namenode -format
# 安装时出现过一次错误:Unable to check if JNs are ready for formatting.
# 类似 https://blog.csdn.net/Maricle_Again/article/details/96481845
# 解决办法是删除所有机器 /data/hadoop/journalnode/mycluster 目录下的文件
# cd /data/hadoop/journalnode/mycluster
# rm -rf in_use.lock current edits.sync
# 也有可能是网络的问题,参考该文章:https://blog.csdn.net/tototuzuoquan/article/details/89644127
# 在dev环境中出现连不上journalnode问题,添加该配置,以增加重试次数和间隔
ipc.client.connect.max.retries
100
Indicates the number of retries a client will make to establish a server connection.
ipc.client.connect.retry.interval
10000
Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.
- 随后启动格式化后的namenode(在hadoop101执行)
hdfs --daemon start namenode
- 在其他namenode节点同步信息(在hadoop102执行) 伪分布式部署时,不用执行本步骤
hdfs namenode -bootstrapStandby
- 格式化zookeeper节点,出现以下信息即为执行成功(在hadoop101执行) 伪分布式不用执行本步骤
hdfs zkfc -formatZKssh
- 启动hdfs集群(在hadoop101执行)
start-dfs.sh
# 随后查看各机器进程
jpsall
4. 日常启停HDFS集群
- 启动hdfs
start-dfs.sh
# 若报错:publickey,gssapi-keyex,gssapi-with-mic,password
# 是因为ssh配置问题,需要生成~/.ssh/authorized_keys文件
- 关闭hdfs
stop-dfs.sh
5. 页面查看集群
6. 配置YARN及其HA
使用yarn来管理hdfs集群的资源分配,yarn的功能概述参见:https://blog.csdn.net/scgaliguodong123_/article/details/46603827
6.1. 文件配置
参考文档:https://blog.csdn.net/u012760435/article/details/104541021
6.1.1 配置hadoop-env.sh
因为hadoop3限制必须要声明角色运行进程,vi /app/hadoop-3.2.2/etc/hadoop/hadoop-env.sh
export YARN_NODEMANAGER_USER="hadoop"
export YARN_RESOURCEMANAGER_USER="hadoop"
6.1.2 配置mapred-site.xml
vi /app/hadoop-3.2.2/etc/hadoop/mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.application.classpath
$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*
mapreduce.jobhistory.address
hadoop102:10020
mapreduce.jobhistory.webapp.address
hadoop102:19888
mapreduce.map.memory.mb
1024
mapreduce.map.java.opts
-Xmx1024M
mapreduce.reduce.memory.mb
1024
mapreduce.reduce.java.opts
-Xmx1024M
6.1.3 配置yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
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.resourcemanager.cluster-id
yarncluster
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
hadoop101
yarn.resourcemanager.hostname.rm2
hadoop103
yarn.resourcemanager.webapp.address.rm1
hadoop101:8088
yarn.resourcemanager.webapp.address.rm2
hadoop103:8088
hadoop.zk.address
hadoop101:2181,hadoop102:2181,hadoop103:2181
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
yarn.nodemanager.resource.detect-hardware-capabilities
false
yarn.log-aggregation-enable
true
yarn.log.server.url
http://hadoop102:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
yarn.nodemanager.resource.memory-mb
4096
yarn.nodemanager.resource.cpu-vcores
4
yarn.nodemanager.vmem-check-enabled
true
Whether virtual memory limits will be enforced for containers
yarn.nodemanager.vemem-pmem-ration
2.1
Ration between virtual memory to physical memory when setting memoery limits for containers
yarn.nodemanager.pmem-check-enabled
true
yarn.scheduler.minimum-allocation-mb
1024
yarn.scheduler.maximum-allocation-mb
4096
6.2. 启动yarn
# 先同步配置文件到各服务器
xsync /app/hadoop-3.2.2/etc/hadoop
# 启动yarn
start-yarn.sh
6.3. web页面查看
7. 历史服务器配置
? 为了查看程序的历史运行情况,需要配置一下历史服务器,步骤如下:
7.1. 配置mapred-site.xml
vi /app/hadoop-3.2.2/etc/hadoop/mapred-site.xml , 添加下列配置
mapreduce.jobhistory.address
hadoop102:10020
mapreduce.jobhistory.webapp.address
hadoop102:19888
7.2. 启动历史服务器
mapred --daemon start historyserver
# 关闭
mapred --daemon stop historyserver
8. 日志聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
配置yarn-site.xml
vi /app/hadoop-3.2.2/etc/hadoop/yarn-site.xml
yarn.log-aggregation-enable
true
yarn.log.server.url
http://hadoop102:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
同步配置到各服务器
# 先同步配置文件到各服务器
xsync /app/hadoop-3.2.2/etc/hadoop
9. 常用命令
# 查看集群可用空间等
hdfs dfsadmin -report
# 查看空间使用情况
hadoop fs -du -h /
# 查看namenode是否处于只读模式下
hdfs dfsadmin -safemode get
关注本头条号回复:hadoop ,获取完整文档
未完待续!