- 本次安装拟使用的各软件版本如下
- 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
- 机器规划
| 机器名称 | zookeeper | journalnode | namenode | datanode | yarn | mysql | hive | spark |
|---|---|---|---|---|---|---|---|---|
| hadoop101 | Y | Y | Y | Y | Y | Y | Y | Y |
| hadoop102 | Y | Y | Y | Y | Y | Y | ||
| hadoop103 | Y | Y | Y | Y | Y |
若使用虚拟机,建议选择2CPU2线程,4G或以上内存,至少50G硬盘。
安装过程注意事项主要包括:
-
日期和时间:选择上海
-
语言支持:简体中文和英语
-
软件选择:最小安装,选择其中的调试工具、兼容性程序库、开发工具、安全性工具、和系统管理工具
-
设置root密码:root123
安装完成后,重启即可登录系统
使用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.12.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 -nltp2.3 配置hadoop用户
本次安装计划在hadoop用户下,安装和使用hadoop集群 。命令如下:
# 首先创建用户 useradd hadoop # 配置密码 passwd hadoop # 将hadoop的密码设置为:hadoop123 # 配置sudo权限 vi /etc/sudoers # 在101行左右,添加一行: hadoop ALL=(ALL) NOPASSWD:ALL2.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
- 验证是否安装完成
创建脚本存放目录: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/*
首先从服务器先同步时间,再执行以下操作
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
-
下载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
myzookeeper.sh start3. 安装zkui(可选)
参考文档:https://www.cnblogs.com/caoshousong/p/10709371.html
四、安装Hadoop 1. 安装说明- 本次使用Hadoop3.2.2版本,重点参考文档 https://blog.csdn.net/u012760435/article/details/104401268
- 本次安装程序是基于zookeeper搭建HA环境,请先安装zookeeper
-
下载解压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.3 配置hadoop-env.shfs.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.
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
2.5 配置workersdfs.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.
填入所有datanode的主机名称,不能留有空格
hadoop101 hadoop102 hadoop1032.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 10000003. 首次启动集群
-
将同步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
-
启动hdfs
start-dfs.sh # 若报错:publickey,gssapi-keyex,gssapi-with-mic,password # 是因为ssh配置问题,需要生成~/.ssh/authorized_keys文件
-
关闭hdfs
stop-dfs.sh
使用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
6.1.3 配置yarn-site.xmlmapreduce.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
参考文档:https://blog.csdn.net/suifeng3051/article/details/48135521
https://blog.csdn.net/weixin_42517486/article/details/113326259
https://www.cnblogs.com/yinzhengjie/articles/11064239.html
6.2. 启动yarnyarn.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
# 先同步配置文件到各服务器 xsync /app/hadoop-3.2.2/etc/hadoop # 启动yarn start-yarn.sh6.3. web页面查看 7. 历史服务器配置
为了查看程序的历史运行情况,需要配置一下历史服务器,步骤如下:
7.1. 配置mapred-site.xmlvi /app/hadoop-3.2.2/etc/hadoop/mapred-site.xml , 添加下列配置
7.2. 启动历史服务器mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888
mapred --daemon start historyserver # 关闭 mapred --daemon stop historyserver8. 日志聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
配置yarn-site.xmlvi /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/hadoop9. 常用命令
# 查看集群可用空间等 hdfs dfsadmin -report # 查看空间使用情况 hadoop fs -du -h / # 查看namenode是否处于只读模式下 hdfs dfsadmin -safemode get
关注公众号数据研发技术回复:hadoop 获取完整文档



