文章目录
- hadood centos7集群搭建
hadood centos7集群搭建
系统环境:CentOS-7-x86_64-DVD-2009.iso
hadoop版本:hadoop-3.1.3
jdk:1.8
1 模板虚拟机环境准备
1.1 安装epel-release
相当于一个软件仓库
yum install -y epel-release
1.2 linux 安装的是最小系统则安装一下插件
# net-tool:工具包集合,包含ifconfig等命令
yum install -y net-tools
# vim:编辑器
yum install -y vim
1.3 关闭防火墙,关闭防火墙开机自启
# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙开机自启
systemctl disable firewalld.service
1.4 创建一个用户develop
# 创建用户
useradd develop
# 设置develop用户的密码
passwd develop
...设置密码操作
1.5 配置develop用户具有root权限,方便后期加sudo执行root权限的命令
- 修改文件
# 系统用户权限配置文件
vim /etc/sudoers
- 编辑
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## 添加配置
develop ALL=(ALL) NOPASSWD:ALL
注意:develop 这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了develop 具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以develop 要放到%wheel这行下面。
1.6 在/opt目录下创建文件夹,并修改所属主和所属组
[root@hadoop100 opt]# mkdir module
[root@hadoop100 opt]# mkdir software
[root@hadoop100 opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 8 00:33 module
drwxr-xr-x. 2 root root 6 9月 8 00:33 software
[root@hadoop100 opt]# chown develop:develop /opt/module
[root@hadoop100 opt]# chown develop:develop /opt/software/
[root@hadoop100 opt]# ll
总用量 0
drwxr-xr-x. 2 develop develop 6 9月 8 00:33 module
drwxr-xr-x. 2 develop develop 6 9月 8 00:33 software
1.7 卸载虚拟机自带的JDK
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
- rpm -qa:查询所安装的所有rpm软件包
- grep -i:忽略大小写
- xargs -n1:表示每次只传递一个参数
- rpm -e –nodeps:强制卸载软件
1.8 重启虚拟机
reboot
2 克隆虚拟机
2.1 克隆
克隆三台hadoop,分别修改静态ip以及服务器名称,如下:
192.168.11.100 hadoop100
192.168.11.200 hadoop200
192.168.11.201 hadoop201
3 hadoop100-安装jdk
3.1 下载
jdk:官网下载
3.2 上传解压环境变量配置
- 上传解压
# 1.上传至指定目录
# 2.解压
[develop@hadoop100 software]$ tar -zxvf jdk-8u301-linux-x64.tar.gz -C /opt/module/
[develop@hadoop100 module]$ ls
jdk1.8.0_301 jdk-8u301-linux-x64.tar.gz
- 配置环境变量
# 1. 在/etc/proile.d/目录下创建my_jdk.sh,并编辑
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin
# 2. 重新加载
source /etc/profile
# 3. java -version 验证是否生效
[develop@hadoop100 jdk1.8.0_301]$ java -version
java version "1.8.0_301"
4 hadoop100-安装hadoop
4.1 下载
4.2 上传解压环境变量配置
- 上传解压
#1. 上传至指定目录
#2. 解压
[develop@hadoop100 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
[develop@hadoop100 module]$ ls
hadoop-3.1.3 jdk1.8.0_301
- 环境变量配置
# 1. 在/etc/proile.d/目录下创建my_hadoop_evn.sh,并编辑
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 2. 重新加载
source /etc/profile
# 3. 查看是否生效
[develop@hadoop100 /]$ hadoop
Usage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
or hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
where CLASSNAME is a user-provided Java class
OPTIONS is none or any of:
...
5 本地workCount执行测试
# 1. 创建目录
mkdir mkInput
# 2. 在mkInput目录下创建work.txt文件,并输入单词
[develop@hadoop100 hadoop-3.1.3]$ cd mkInput/
[develop@hadoop100 mkInput]$ ll
总用量 4
-rw-rw-r--. 1 develop develop 49 9月 9 00:54 work.txt
[develop@hadoop100 mkInput]$ more work.txt
xiaoxiao
kaka
kafka
java kafka
develop xiaoxiaio
# 3. 使用官网提供的jar执,确保输出文件夹不存在mkOutput
[develop@hadoop100 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount mkInput mkOutput
...
2021-09-09 01:03:28,767 INFO mapred.LocalJobRunner: Finishing task: attempt_local399259649_0001_r_000000_0
2021-09-09 01:03:28,767 INFO mapred.LocalJobRunner: reduce task executor complete.
2021-09-09 01:03:29,228 INFO mapreduce.Job: Job job_local399259649_0001 running in uber mode : false
2021-09-09 01:03:29,229 INFO mapreduce.Job: map 100% reduce 100%
2021-09-09 01:03:29,230 INFO mapreduce.Job: Job job_local399259649_0001 completed successfully
...
# 4. 查看mkOutput下的结果文件
[develop@hadoop100 hadoop-3.1.3]$ cd mkOutput/
[develop@hadoop100 mkOutput]$ ll
总用量 4
-rw-r--r--. 1 develop develop 55 9月 9 01:03 part-r-00000
-rw-r--r--. 1 develop develop 0 9月 9 01:03 _SUCCESS
6 集群服务器免密访问配置
https://blog.csdn.net/qq_27242695/article/details/120236642
7 hadoop 集群配置(重点)
7.1 集群部署规划
hadoop100 | hadoop200 | hadoop300 | |
---|---|---|---|
hdfs | NameNode,DataNode | DataNode | SecondaryNameNode ,DataNode |
yarn | NodeManager | ResourceManager ,NodeManager | NodeManager |
注意
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
- 集群搭建最好至少三台服务器
7.2 配置文件说明
-
默认配置文件
-
自定义配文件
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
7.3 集群自定义配置
- 配置文件目录在hadoop解压路径
- hadoop100,hadoop200,hadoop300分別做一下文件配置(只需要配置一台,使用xsync同步到其他服务器)
# 例
/opt/module/hadoop-3.1.3/etc/hadoop
7.3.1 core-site.xml
- hadoop100 配置NameNode
- 配置hdf文件存储路径
- 配置静态操作用户(后续网页才有权限操作)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop100:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为develop -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>develop</value>
</property>
</configuration>
7.3.2 hdfs-site.xml
- hadoop300配置SecondaryNameNode
- 配置hdfs网页端访问地址: hadoop300:9868
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- (SecondaryNameNode)2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop300:9868</value>
</property>
<!-- (NameNode)nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop100:9870</value>
</property>
</configuration>
7.3.3 yarn-site.xml
- hadoop200配置ResourceManager
- 设置mapperReduce协议(mapreduce_shuffle)官方推荐
- 配置一些环境变量,解决3.1.3版本小bug
<?xml version="1.0"?>
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop200</value>
</property>
<!-- 指定MR走shuffle 官网推荐 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 环境变量的继承,解决3.1.3一些小bug -->
<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>
7.3.4 mapred-site.xml
- 配置指定MapReduce程序运行在Yarn上
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7.3.5 works集群配置
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
[develop@hadoop100 hadoop]$ vim workers
hadoop100
hadoop200
hadoop300
7.3.6 启动集群
7.3.6.1 集群第一次启动需要格式化
-
如果集群是第一次启动,需要在配置NameNode(博主:hadoop100)节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
-
NameNode 格式换指令
hdfs namenode -format
7.3.6.1 启动HDFS
# hadoop 解压路径/opt/module/hadoop-3.1.3
[develop@hadoop100 hadoop-3.1.3]$ sbin/start-dfs.sh
7.3.6.2 启动yarn
# hadoop 解压路径/opt/module/hadoop-3.1.3
[develop@hadoop100 hadoop-3.1.3]$ sbin/start-yarn.sh
7.3.6.3 查看网页
-
Web端查看HDFS的NameNode:http://hadoop100:9870
-
Web端查看YARN的ResourceManager :http://hadoop200:8088
7.4 集群基本操作
7.4.1 基本指令
# 上传文件到hdfgs
hadoop fs -mkdir 文件全路径
# 文件上传
hadoop fs -put 上传文件路径 上传至服务器路径
# 文件下载
hadoop fs -get hdf服务器文件路径 本地服务器路径
7.5 配置历史job服务器
7.5.1 mapred-site.xml 配置
<!-- 历史服务器端地址,配置hadoop100 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop100:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop100:19888</value>
</property>
7.5.2 xsync 分发
分发到hadoop200,hadoop300
7.5.3 启动/关闭历史服务器
# 在hadoop100 服务器上启动
[develop@hadoop100 hadoop]$ mapred --daemon start historyserver
# 关闭
[develop@hadoop100 hadoop]$ mapred --daemon stop historyserver
7.5.4 查看历史服务器
http://hadoop100:19888/jobhistory
7.6 配置日志的聚集
- 日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
- 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
- 注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
7.6.1 yarn-site.xml 配置
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 hadoop100 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop100:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
7.6.2 xsync分发
分发给hadoop200,hadoop300
7.6.3 重启
- 关闭流程
- historyserver
- yarn
- hdfs
- 重启流程
- hdfs
- yarn
- historyserver
7.6.4 访问
http://hadoop100:19888/jobhistory
8 集群启动与停止(重点)
当生产存在好几十台服务器,需要使用脚本进行集群的启动与停止
8.1 准备
每台服务器需要配置ssh免密登录
https://blog.csdn.net/qq_27242695/article/details/120236642
8.2 编写Hadoop集群常用脚本:myhadoop.sh
Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
- 在用户bin目录下创建myhadoop.sh
[develop@hadoop100 bin]$ cd /home/develop/bin/
[develop@hadoop100 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 hadoop100 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop200 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop200 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop100 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
- myhadoop.sh 设为可执行脚本
[develop@hadoop100 bin]$ chmod +x myhadoop.sh
- 启停
# 启动
myhadoop.sh start
# 关闭
myhadoop.sh stop
8.3 查看三台服务器Java进程脚本:jpsall.sh
#!/bin/bash
for host in hadoop100 hadoop200 hadoop300
do
echo =============== $host ===============
ssh $host jps
done