Centos7下hadoop集群搭建
1、环境准备
注意:如非特别说明,则说明三台服务器均需要进行操作。
虚拟机及环境配置可参考如下文章
1.1、服务准备
准备三台2C4G40G配置的服务器
IP | 配置 | 备注 |
192.168.2.101 | 2C4G40G | |
192.168.2.102 | 2C4G40G | |
192.168.2.102 | 2C4G40G |
1.2、JDK安装
安装过程略。版本如下。
java -version 复制代码
1.3、配置hosts
修改服务器/etc/hosts配置文件,在其中增加如下配置
192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 复制代码
1.4、关闭及禁用防火墙
- 关闭防火墙
systemctl stop firewalld 复制代码
- 禁用防火强
systemctl disable firewalld 复制代码
1.5、创建用户
- 创建用户hadoop
useradd hadoop 复制代码
- 设置密码
输入如下命令,并根据提示设置密码
passwd hadoop 复制代码
- 配置hadoop用户具有root权限,方便后期加sudo执行root权限的命令
修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示:
hadoop ALL=(ALL) NOPASSWD:ALL 复制代码
注意:hadoop这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了hadoop具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以hadoop要放到%wheel这行下面。
- 切换到hadoop用户
su hadoop 复制代码
1.6、创建文件目录
- 在/opt目录下创建module、software文件夹
mkdir /opt/module mkdir /opt/software 复制代码
1.7、修改所属主和所属组
修改module、software文件夹的所有者和所属组均为hadoop用户
chown hadoop:hadoop /opt/module chown hadoop:hadoop /opt/module 复制代码
1.8、必要软件安装
- 安装wget命令
yum install wget 复制代码
- 安装epel-release
yum install -y epel-release 复制代码
- 安装net-tools
yum install -y net-tools 复制代码
2、集群搭建
2.1、下载hadoop-3.1.3
进入/opt/software目录,执行如下命令下载,下载网速很慢,也可通过百度网盘地址下载后,上传到服务器。
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz 复制代码
2.2、环境配置
- 拷贝到其他服务器
scp hadoop-3.1.3.tar.gz root@hadoop102:/opt/software/ scp hadoop-3.1.3.tar.gz root@hadoop103:/opt/software/ 复制代码
- 切换到hadoop用户
su hadoop 复制代码
- 解压缩安装包到指定目录/opt/module/
tar -xvzf hadoop-3.1.3.tar.gz -C /opt/module/ 复制代码
- 环境变量配置
新建配置文件
vi /etc/profile.d/hadoop.sh 复制代码
将下面内容粘贴到文件中
#HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin 复制代码
- 使配置生效
source /etc/profile 复制代码
- 验证是否生效
hadoop version 复制代码
- 复制到102
scp /etc/profile.d/hadoop.sh root@hadoop102:/etc/profile.d/ 复制代码
- 复制到103
scp /etc/profile.d/hadoop.sh root@hadoop103:/etc/profile.d/ 复制代码
- 然后登录服务器使配置生效
source /etc/profile 复制代码
- 验证102
hadoop version 复制代码
- 验证103
hadoop version 复制代码
2.3、免密互相访问配置
- 免密登录原理
网络异常,图片无法展示|
- 生成公钥和私钥
通过ssh-keygen工具进行生成rsa公钥,私钥文件,执行下面命令然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
ssh-keygen -t rsa 复制代码
- .ssh文件夹下的文件功能解释
known_hosts | 记录ssh访问过计算机的公钥(public key) |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密登录服务器公钥 |
- 将公钥拷贝到要免密登录的目标机器上
还需要在hadoop101上采用hadoop账号,配置一下无密登录到hadoop101、hadoop102、hadoop103;
还需要在hadoop102上采用hadoop账号配置一下无密登录到hadoop101、hadoop102、hadoop103服务器上。
还需要在hadoop103上采用hadoop账号配置一下无密登录到hadoop101、hadoop102、hadoop103服务器上。
ssh-copy-id hadoop101 ssh-copy-id hadoop102 ssh-copy-id hadoop103 复制代码
2.4、应用目录说明
(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
2.5、Hadoop运行模式
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
Ø本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
Ø ***伪分布式模式:***也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
Ø ***完全分布式模式:***多台服务器组成分布式环境。生产环境使用。
2.6、集群配置
- 集群部署规划
Ø NameNode和SecondaryNameNode不要安装在同一台服务器
Ø ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
hadoop101 | hadoop102 | hadoop103 | |
HDFS | NameNodeDataNode | DataNode | SecondaryNameNodeDataNode |
YARN | NodeManager | ResourceManagerNodeManager | NodeManager |
- 配置文件说明
Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
要获取的默认文件 | 文件存放在Hadoop的jar包中的位置 |
[core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
[yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
[mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
(2)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
- 修改集群配置
(1)核心配置文件
配置core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> <!-- Put site-specific property overrides in this file. --> <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:8020</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置HDFS网页登录使用的静态用户为hadoop --> <property> <name>hadoop.http.staticuser.user</name> <value>hadoop</value> </property> </configuration> 复制代码
(2)HDFS配置文件
配置hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> <!-- Put site-specific property overrides in this file. --> <configuration> <!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop101:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop103:9868</value> </property> </configuration> 复制代码
(3)YARN配置文件
配置yarn-site.xml
<?xml version="1.0"?> <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> <configuration> <!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop102</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> 复制代码
(4)MapReduce配置文件
配置mapred-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> <!-- Put site-specific property overrides in this file. --> <configuration> <!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 复制代码
- 使用命令同步rsync文件
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)基本语法
rsync -av pdir/pdir/pdir/fname user@user@user@host:pdir/pdir/pdir/fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项参数说明
选项 | 功能 |
-a | 归档拷贝 |
-v | 显示复制过程 |
(2)安装工具
sudo yum install rsync 复制代码
(3)编辑同步文件
#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in hadoop101 hadoop102 hadoop103 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 复制代码
(4)同步配置文件
./xsync /opt/module/hadoop-3.1.3/etc/hadoop/ 复制代码
(5)修改集群文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers 复制代码
增加如下配置
hadoop101 hadoop102 hadoop103 复制代码
(6)同步配置
./xsync /opt/module/hadoop-3.1.3/etc/hadoop/ 复制代码
- 启动集群
(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
hdfs namenode -format 复制代码
(2)启动HDFS
./sbin/start-dfs.sh 复制代码
(3)***在配置了ResourceManager的节点(hadoop102)***启动YARN
./sbin/start-yarn.sh 复制代码
- 集群验证
(1)Web端查看HDFS的NameNode
(a)浏览器中输入:http://192.168.2.101:9870
(b)查看HDFS上存储的数据信息
数据节点信息
(2)Web端查看YARN的ResourceManager
(a)浏览器中输入:http://192.168.2.102:8088
(b)查看YARN上运行的Job信息
2.7、集群基本测试
注意一下在101服务器上进行验证
在$HADOOP_HOME创建目录workspace然后在目录下创建文件wordcount.txt内容如下
mkdir workspace 复制代码
cd workspace 复制代码
vi wordcount.txt 复制代码
将如下内容粘贴到文件中
hadoop yarn hadoop mapreduce jianjang jianjang 复制代码
(1)上传文件到集群
Ø 上传小文件
创建存储目录
hadoop fs -mkdir /input 复制代码
hadoop fs -put $HADOOP_HOME/workspace/wordcount.txt /input 复制代码
Ø 上传大文件
hadoop fs -put /usr/local/java/jdk-8u281-linux-x64.tar.gz / 复制代码
(2)上传文件后查看文件存放在什么位置
由下图可知在配置目录的对应存储池ID如图红色内容
Ø 查看HDFS文件存储路径
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-272299021-192.168.2.101-1669776100885/current/finalized/subdir0/subdir0
Ø 查看HDFS在磁盘存储文件内容
[hadoop@hadoop101 subdir0]$ pwd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-272299021-192.168.2.101-1669776100885/current/finalized/subdir0/subdir0 [hadoop@hadoop101 subdir0]$ ll 总用量 141468 -rw-rw-r--. 1 hadoop hadoop 47 11月 30 11:20 blk_1073741825 -rw-rw-r--. 1 hadoop hadoop 11 11月 30 11:20 blk_1073741825_1001.meta -rw-rw-r--. 1 hadoop hadoop 134217728 11月 30 11:21 blk_1073741826 -rw-rw-r--. 1 hadoop hadoop 1048583 11月 30 11:21 blk_1073741826_1002.meta -rw-rw-r--. 1 hadoop hadoop 9505196 11月 30 11:21 blk_1073741827 -rw-rw-r--. 1 hadoop hadoop 74267 11月 30 11:21 blk_1073741827_1003.meta 复制代码
(3)查看内容blk_1073741825从时间是看这个应该是wordcount.txt的文件
cat blk_1073741825 复制代码
(4)拼接
我们看到jdk被分割成了两个文件blk_1073741826和blk_1073741827,所以想要查看,就要进行合并才行,可以使用追加重定向>>命令。
cat blk_1073741826 >>tmp.tar.gz cat blk_1073741827 >>tmp.tar.gz 复制代码
验证是否正常
tar -xvzf tmp.tar.gz 复制代码
(5)下载
从hdfs中下载文件到当前目录,根据文件存储目录及文件名称下载,既然是分布式文件系统,可以常识在其他节点上执行如下命令(自行验证)
hadoop fs -get /jdk-8u281-linux-x64.tar.gz ./ 复制代码
1)、101服务器
2)、103服务器
(6)执行wordcount程序
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output 复制代码
查看执行结果
hadoop fs -get /output ./ 复制代码
cd output 复制代码
查看执行结果,如下图我们看到统计结果正确
cat part-r-0000 复制代码
2.8、开启日志聚集功能
- 配置yarn-site.xml
在101上执行如下命令
vi yarn-site.xml 复制代码
在该文件里面增加如下配置。
<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop101:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> 复制代码
同步配置文件
./xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml 复制代码
重启102服务器yarn服务
- 关闭服务
关闭NodeManager 、ResourceManager和HistoryServer
./stop-yarn.sh 复制代码
- 启动服务
启动NodeManager 、ResourceManager和HistoryServer
./start-yarn.sh 复制代码
- 启动101上的HistoryServer
mapred --daemon start historyserver 复制代码
- 提交任务
cd /opt/module/hadoop-3.1.3/ 复制代码
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output2 复制代码
- 验证
(1)历史服务器地址
http://192.168.2.101:19888/jobhistory
(2)历史任务列表
(3)查看认证执行日志
点击Job Id
点击logs
执行日志详情
3、日常运维
3.1、单独启停
- 各个模块分开启动/停止
(1)整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
- 各个服务组件逐一启动/停止
(1)分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
3.2、集群启停
在用户目录下创建文件夹shell用于存放脚本
mkdir shell 复制代码
3.2.1、集群启停脚本
- 创建脚本
集群启停脚本编写start-hadoop.sh
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start") echo " =================== 启动 hadoop集群 ===================" echo " --------------- 启动 hdfs ---------------" ssh hadoop101 "sh /opt/module/hadoop-3.1.3/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh hadoop102 "sh /opt/module/hadoop-3.1.3/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh hadoop101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver" ;; "stop") echo " =================== 关闭 hadoop集群 ===================" echo " --------------- 关闭 historyserver ---------------" ssh hadoop101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh hadoop102 "sh /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh hadoop101 "sh /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh" ;; *) echo "Input Args Error..." ;; esac 复制代码
- 增加执行权限
sudo chmod +x start-hadoop.sh 复制代码
- 验证启停脚本
./start-hadoop.sh stop 复制代码
./start-hadoop.sh start 复制代码
3.2.2、查看进程脚本
- 创建脚本
show-jps.sh
#!/bin/bash for host in hadoop101 hadoop102 hadoop103 do echo =============== $host =============== ssh $host jps done 复制代码
- 增加可执行权限
sudo chmod +x show-jps.sh 复制代码
- 验证进程查看脚本
./show-jps.sh 复制代码
3.3.3、脚本同步到其他服务器
./xsync /home/hadoop/shell/ 复制代码
4、常用端口号说明
端口名称 | Hadoop2.x | Hadoop3.x |
NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
至此操作完毕,如有发现问题不合理的地方,请联系我修改,谢谢。
作者:血小溅
链接:https://juejin.cn/post/7172122388434255885
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。