1.Haoop集群安装前准备
1.1 安装虚拟机&操作系统
安装虚拟机及操作系统(CentOS 7),配置虚拟机网络环境。
参考:VMware 创建虚拟机&安装CentOS 7 Linux系统
1.2 克隆虚拟机
对安装完成操作系统的虚拟机进行克隆,克隆至3台虚拟机,主机名分别为node01/node02/node03。
参考:VMware克隆虚拟机
1.3 Hadoop资源下载
hadoop: https://hadoop.apache.org/#
hive: https://dlcdn.apache.org/hive/
hbase: https://hbase.apache.org/downloads.html
zookeeper: https://zookeeper.apache.org/releases.html
spark: https://spark.apache.org/downloads.html
*注意:hadoop及相关各组件使用需要考虑版本的兼容性,hadoop对应各组件兼容版本可查阅官方文档
1.4 配置主机映射及免密登录
① 配置主机映射
vim /etc/hosts
集群所有服务器都需配置主机映射。
② 配置免密登录
在所有虚拟机节点上使用 ssh-keygen 命令生成一对公钥和私钥, ssh-keygen -t rsa
回车敲击四下即可生成
查看一下生成的公钥和私钥
cd /root/.ssh/
在所有虚拟机上把公钥拷贝给其他机器,机器就是你需要远程免密登录的机器
ssh-copy-id node01
ssh-copy-id node02
ssh-copy-id node03
验证是否能够成功免密登录到其他机器
ssh node01
ssh node02
ssh node03
1.5 编写集群文件同步脚本
①rsync集群同步脚本参考:
rsync集群同步脚本①
②shell集群同步脚本参考:包括:集群分发文件脚本&批量执行命令脚本
shell集群同步脚本②
1.6 安装JDK8
①上传文件至/opt/package路径,解压JDK压缩包
tar -zxvf jdk-8u261-linux-x64.tar.gz -C …/soft/
②配置JDK环境变量
vim /etc/profile
export JAVA_HOME=/opt/soft/jdk1.8.0_261
export PATH=$PATH:$JAVA_HOME/bin
注意:执行source /etc/profile
③验证JDK是否安装成功
java -version
#显示java版本即安装成功
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
1.7 禁止Selinux
①使用批量执行命令脚本执行命令:
ssh_do_all.sh ~/bin/node.list “setenforce 0”
②修改配置文件,在配置文件中修改 参数 (所有机器)
vim /etc/selinux/config
SELINUX=disabled
③同步文件到其他节点
xsync /etc/selinux/config
1.8 关闭防火墙
①批量关闭节点的防火墙
ssh_do_all.sh ~/bin/node.list “systemctl stop firewalld”
②设置开机不启动防火墙
ssh_do_all.sh ~/bin/node.list “systemctl disable firewalld”
③查看防火墙状态
ssh_do_all.sh ~/bin/node.list “systemctl status firewalld”
1.9 配置时钟同步
① 所有节点卸载chrony
ssh_do_all.sh ~/bin/node.list “yum -y remove chrony”
② 所有节点下载安装ntp服务
sh ssh_do_all.sh ~/bin/node.list “yum -y install ntp”
③修改配置文件
在Master(node01)节点修改/etc/ntp.conf文件
vim /etc/ntp.conf
#添加一下内容
server 127.127.1.0
fudge 127.127.1.0 stratum 10
#注释掉其他时间服务器和不用的参数
④从节点(node02/node03)添加master的地址
vim /etc/ntp.conf
server node01 #(该节点IP地址为CM的IP地址)
⑤启动ntp服务,查看同步状态
sh ssh_do_all.sh ~/bin/node.list “systemctl start ntpd”
sh ssh_do_all.sh ~/bin/node.list “systemctl enable ntpd”
sh ssh_do_all.sh ~/bin/node.list “systemctl status ntpd”
sh ssh_do_all.sh ~/bin/node.list “ntpq -p”
左边出现*号表示同步成功。
注意:可以使用下面可以强制同步时钟
ntpdate -u 主节点IP
2 Hadoop集群部署
2.1 Hadoop安装包目录结构
①安装目录为/opt/soft,解压安装包, 并传输给所有节点。
tar -zxvf hadoop-3.3.3.tar.gz -C /opt/soft
②安装包目录结构如下:
注意:安装文件的用户及属组修改为root
③hadoop目录解析:
bin:Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。
etc:Hadoop配置文件所在的目录,包括core-site,xml、hdfs-site.xml、mapred-site.xml等从Hadoop1.0继承而来的配置文件和yarn-site.xml等Hadoop2.0新增的配置文件。
include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。
lib:该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。
libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。
sbin:Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本。
share:Hadoop各个模块编译后的jar包所在的目录,官方自带示例。
2.2 配置Hadoop环境变量
①添加环境变量
vim /etc/profile
export HADOOP_HOME=/opt/soft/hadoop-3.3.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
②同步配置文件到其他节点
ssh_do_scp.sh ~/bin/node.list /etc/profile /etc
注意:每个节点执行source /etc/profile
ssh_do_all.sh ~/bin/node.list “source /etc/profile”
③验证是否成功
hadoop version
2.3 Hadoop集群规划
node01 | node02 | node03 | |
---|---|---|---|
HDFS | NamNode DataNode | DataNode | Secondary NameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
2.4 修改配置文件
①核心配置文件,进入配置文件目录
cd $HADOOP_HOME/etc/hadoop
②配置core-site.xml
vim core-site.xml
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/soft/hadoop-3.3.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
③配置hdfs-site.xml
vim hdfs-site.xml
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>node01:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node03:9868</value>
</property>
</configuration>
④配置yarn-site.xml
vim yarn-site.xml
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node02</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
⑤配置mapred-site.xml
vim mapred-site.xml
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
⑥ 配置workers
在该文件中增加如下内容:
vim workers
node01
node02
node03
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行
⑦配置JAVA环境变量
vim hadoop-env.sh
export JAVA_HOME=/opt/soft/jdk1.8.0_261
⑦ 所有节点都已有hadoop安装包,同步所有节点的配置文件
ssh_do_scp.sh ~/bin/node.list $HADOOP_HOME/etc/hadoop/ $HADOOP_HOME/etc/
2.5 服务启动权限配置
在安装包目录下的启动脚本添加服务启动权限配置,不然启动脚本会报错。
①在sbin/start-dfs.sh和sbin/stop-dfs.sh文件添加如下内容
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
② 在sbin/start-yarn.sh和sbin/stop-yarn.sh文件添加如下内容
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
③同步配置至其他节点
ssh_do_scp.sh ~/bin/node.list /opt/soft/hadoop-3.3.3/sbin/ /opt/soft/hadoop-3.3.3/
2.6 启动集群
集群&服务启动停止命令
HDFS | YARN | |
---|---|---|
集群启动 | start-dfs.sh | start-yarn.sh |
集群停止 | stop-dfs.sh | stop-yarn.sh |
服务启动 | hdfs --daemon start namenode/datanode/secondarynamenode | hdfs --daemon stop namenode/datanode/secondarynamenode |
服务停止 | yarn --daemon start resourcemanager/nodemanager | yarn --daemon stop resourcemanager/nodemanager |
① 如果集群是第一次启动,需要在node01节点格式化NameNode
(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
hdfs namenode -format
②在node01上启动HDFS
start-dfs.sh
③在node02上启动YARN
start-yarn.sh
④Web端查看HDFS的NameNode
(a)浏览器中输入:http://node01:9870
(b)查看HDFS上存储的数据信息
⑤Web端查看YARN的ResourceManager
(a)浏览器中输入:http://node02:8088
(b)查看YARN上运行的Job信息
注意:通过主机映射访问需要配置windows C:\Windows\System32\drivers\etc\hosts映射文件
2.7 集群基本测试
①上传文件到集群
Ø上传小文件
[root@node01 ~]# hadoop fs -mkdir /input
[root@node01 ~]# hadoop fs -put test.txt /input
[root@node01 ~]# hadoop fs -ls /input/
Found 1 items
-rw-r--r-- 3 root supergroup 0 2022-06-01 21:22 /input/test.txt
Ø上传大文件
[root@node01 ~]# hadoop fs -put /opt/soft/jdk1.8.0_261/ /input
[root@node01 ~]# hadoop fs -ls /input/
Found 2 items
drwxr-xr-x - root supergroup 0 2022-06-01 21:24 /input/jdk1.8.0_261
-rw-r--r-- 3 root supergroup 0 2022-06-01 21:22 /input/test.txt
②查看HDFS文件存储路径、磁盘存储文件内容
[root@node01 subdir4]# cat blk_1073742908
test hadoop input file
[root@node01 subdir4]# pwd
/opt/soft/hadoop-3.3.3/data/dfs/data/current/BP-158062577-192.168.31.101-1654087916304/current/finalized/subdir0/subdir4
③ 下载文件
[root@node01 ~]# hadoop fs -get /input/test.txt ./
[root@node01 ~]# ll
total 902524
-rw-r--r-- 1 root root 23 Jun 1 21:31 test.txt
④删除文件
[root@node01 ~]# hadoop fs -rm /input/test.txt
Deleted /input/test.txt
[root@node01 ~]# hadoop fs -ls /input/
[root@node01 ~]#
⑤执行wordcount程序
hadoop jar /opt/soft/hadoop-3.3.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output
2.8 配置JobHistory历史服务
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
① 配置mapred-site.xml, 添加下列参数
vim mapred-site.xml (目录:$HADOOP_HOME/etc/hadoop/)
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node01:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node01:19888</value>
</property>
② 分发配置
ssh_do_scp.sh ~/bin/node.list $HADOOP_HOME/etc/hadoop/mapred-site.xml $HADOOP_HOME/etc/hadoop/
(3) 在node01启动历史服务器
[root@node01 ~]# mapred --daemon start historyserver
[root@node01 ~]# jps
5124 NameNode
11620 JobHistoryServer
5301 DataNode
11642 Jps
5627 NodeManager
(5) 查看JobHistory
http://node01:19888/jobhistory
2.9 配置Yarn日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
开启日志聚集功能具体步骤如下:
① 配置yarn-site.xml,在该文件里面增加如下配置。
vim yarn-site.xml
<!-- 开启日志聚集功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址-->
<property>
<name>yarn.log.server.url</name>
<value>http://node01:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
② 分发配置
ssh_do_scp.sh ~/bin/node.list $HADOOP_HOME/etc/hadoop/yarn-site.xml $HADOOP_HOME/etc/hadoop/
③ 关闭NodeManager 、ResourceManager和HistoryServer
mapred --daemon stop historyserver
stop-yarn.sh
④ 启动NodeManager 、ResourceManage和HistoryServer
start-yarn.sh
mapred --daemon start historyserver
⑤ 删除HDFS上已经存在的输出文件
hadoop fs -rm -r /output
⑥ 执行WordCount程序
hadoop jar /opt/soft/hadoop-3.3.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output
⑦查看日志
(1)历史服务器地址
http://node01:19888/jobhistory
(2)历史任务列表
(3)查看任务运行日志
(4)运行日志详情
3 编写集群常用脚本
3.1 Hadoop集群启停脚本
①启停脚本包含HDFS,Yarn,Historyserver
cd ~/bin/
vim myhadoop.sh
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit;
fi
case $1 in
"start")
echo "=================启动Hadoop集群==============="
echo "-----------------启动hdfs----------------"
ssh node01 "/opt/soft/hadoop-3.3.3/sbin/start-dfs.sh"
echo "-----------------启动yarn----------------"
ssh node02 "/opt/soft/hadoop-3.3.3/sbin/start-yarn.sh"
echo "-----------------启动historyserver----------------"
ssh node01 "/opt/soft/hadoop-3.3.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo "=================关闭Hadoop集群==============="
echo "-----------------关闭historyserver----------------"
ssh node01 "/opt/soft/hadoop-3.3.3/bin/mapred --daemon stop historyserver"
echo "-----------------关闭yarn----------------"
ssh node02 "/opt/soft/hadoop-3.3.3/sbin/stop-yarn.sh"
echo "-----------------关闭hdfs----------------"
ssh node01 "/opt/soft/hadoop-3.3.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error.."
;;
esac
②赋予脚本执行权限
chmod 755 myhadoop.sh
3.2 查看集群java进程脚本
①查看三台服务器Java进程脚本:jpsall
cd ~/bin/
vim jpsall
#!/bin/bash
for host in node01 node02 node03
do
echo =============== $host ===============
export JAVA_HOME=/opt/soft/jdk1.8.0_261
ssh $host jps
done
②赋予脚本执行权限
chmod 755 jpsall
③ 异常问题:
bash: jps: command not found
解决方法:bash: jps: command not found