Hadoop3.3.1 分布式部署

一、安装JDK
1.1 下载JDK1.8
        链接:https://pan.baidu.com/s/1TFGr2sZO1rZdvUJ9MeqfIQ 
        提取码:6666

1.2 上传至 /opt/software目录中


 1.3 解压到 /opt/module中
tar -zxvf jdk1.8.0_201.tar.gz  -C /opt/module/
1.4 配置环境变量
( 1 )新建 /etc/profile.d/my_env.sh 文件
vim /etc/profile.d/my_env.sh
 
#添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_201
export PATH=$PATH:$JAVA_HOME/bin
(2)source 一下 /etc/profile 文件,让新的环境变量 PATH 生效
source /etc/profile
1.5 测试
java -version

 


二、安装Hadoop3.3.1
2.1 下载
下载地址:Index of /dist/hadoop/common/hadoop-3.3.1

 2.2 上传到服务器并解压到/opt/module中


2.3 添加环境变量到/etc/profile.d/my_env.sh文件中

 

 2.4 测试
hadoop version


三、Hadoop 目录结构解析
 
( 1 ) bin 目录:存放对 Hadoop 相关服务( hdfs , yarn , mapred )进行操作的脚本
(2 ) etc 目录: Hadoop 的配置文件目录,存放 Hadoop 的配置文件
(3 ) lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
(4 ) sbin 目录:存放启动或停止 Hadoop 相关服务的脚本
(5 ) share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例
四、完全分布式模式
4.1 编写集群分发脚本xsync
(1)在/bin目录下创建xsync文件

 [root@ggl201 bin]# cd /bin
[root@ggl201 bin]# vim xsync
 
 
#添加如下代码
#!/bin/bash
 
#1. 判断参数个数
if [ $# -lt 1 ]
then
 echo Not Enough Arguement!
 exit;
fi
 
#2. 遍历集群所有机器
for host in ggl201 ggl202 ggl203
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.2 SSH 无密码登录配置
( 1 )免密登录原理

 

(2) 生成公钥和私钥

[root@ggl201 .ssh]# pwd
/root/.ssh
[root@ggl201 .ssh]# ssh-keygen -t rsa
然后连续敲三个回车,就会生成两个文件 id_rsa (私钥)、 id_rsa.pub (公钥)


(3)将公钥拷贝到要免密登录的目标机器上

 

[root@ggl201 .ssh]# ssh-copy-id ggl201
[root@ggl201 .ssh]# ssh-copy-id ggl202
[root@ggl201 .ssh]# ssh-copy-id ggl203
注意:
        还需要在 ggl202 上 配置一下无密登录到 ggl201、ggl203 服务器上。
        还需要在 ggl203 上 配置一下无密登录到 ggl201、ggl202 服务器上。
        操作步骤同上

(4).ssh 文件夹下(~/.ssh)的文件功能解释

 

4.3 集群配置
4.3.1 集群部署规划
注意:

(1)NameNode 和 SecondaryNameNode 不要安装在同一台服务器

(2)ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在

同一台机器上
ggl201    ggl202    ggl203
HDFS    
NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN    
NodeManager

ResourceManager
NodeManager

NodeManager

4.3.2 配置文件说明
        Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值。
( 1 )默认配置文件:
要获取的默认文件
文件存放在 Hadoop 的 jar 包中的位置
[core-default.xml]
hadoop-common-3.3.1.jar/core-default.xml
[hdfs-default.xml]
hadoop-hdfs-3.3.1.jar/hdfs-default.xml
[yarn-default.xml]
hadoop-yarn-common-3.3.1.jar/yarn-default.xml
[mapred-default.xml]
hadoop-mapreduce-client-core-3.3.1.jar/mapred-default.xml
(2 )自定义配置文件:
         core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
4.3.3 配置集群
(1)核心配置文件

配置 core-site.xml
[root@ggl201 hadoop]# pwd
/opt/module/hadoop-3.3.1/etc/hadoop
[root@ggl201 hadoop]# vim core-site.xml
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- 指定 NameNode 的地址 -->
 <property>
 <name>fs.defaultFS</name>
 <value>hdfs://ggl201:8020</value>
 </property>
 <!-- 指定 hadoop 数据的存储目录 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/module/hadoop-3.3.1/data</value>
 </property>
 <!-- 配置 HDFS 网页登录使用的静态用户为 hadoop -->
 <property>
 <name>hadoop.http.staticuser.user</name>
 <value>hadoop</value>
 </property>
</configuration>
(2 ) HDFS 配置文件
配置 hdfs-site.xml
[root@ggl201 hadoop]# vim hdfs-site.xml
内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
 <name>dfs.namenode.http-address</name>
 <value>ggl201:9870</value>
 </property>
<!-- 2nn web 端访问地址-->
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>ggl203:9898</value>
 </property>
</configuration>
(3 ) YARN 配置文件
配置 yarn-site.xml
[root@ggl201 hadoop]# vim yarn-site.xml
内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- 指定 MR 走 shuffle -->
 <property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
 </property>
 <!-- 指定 ResourceManager 的地址-->
 <property>
 <name>yarn.resourcemanager.hostname</name>
 <value>ggl202</value>
 </property>
 <!-- 环境变量的继承 -->
 <property>
 <name>yarn.nodemanager.env-whitelist</name>
 <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
 </property>
</configuration>
(4 ) MapReduce 配置文件
配置 mapred-site.xml
[root@ggl201 hadoop]# vim mapred-site.xml
内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>
</configuration>
4.3.4 在集群上分发配置好的 Hadoop 配置文件
[root@ggl201 hadoop]# xsync /opt/module/hadoop-3.3.1/etc/hadoop/
4.4 集群启动
4.4.1 配置 workers
[root@ggl201 hadoop]# vim /opt/module/hadoop-3.3.1/etc/hadoop/workers
增加以下内容:
ggl201
ggl202
ggl203
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
[root@ggl201 hadoop]# xsync /opt/module/hadoop-3.3.1/etc/hadoop/workers
4.4.2 启动集群
( 1 ) 如果集群是第一次启动 ,需要在ggl201   节点格式化 NameNode (注意:格式
化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)

[root@ggl201 hadoop-3.3.1]# hdfs namenode -format


(2 )启动 HDFS
[root@ggl201 hadoop-3.3.1]# sbin/start-dfs.sh
报错信息如下:

 

 

因为使用的用户是root 需要用hadoop用户启动 

 使用hadoop用户启动依然是报错 !!!

 

原因是 ssh的时候不通 当时用的root来创建的秘钥

解决方法如下:

 1、把root下的.ssh copy到 /home/hadoop/下

[root@ggl201 ~]# cp -r .ssh/ /home/hadoop/
 2、修改所属用户和用户组

[hadoop@ggl201 ~]$ sudo chown hadoop:hadoop -R .ssh/
 3、分发

[hadoop@ggl201 ~]$ sudo xsync  .ssh/
再次启动 成功

 

 (3)在配置了 ResourceManager 的节点(ggl202)启动 YARN

[hadoop@ggl202 hadoop-3.3.1]$ sbin/start-yarn.sh


(4 ) Web 端查看 HDFS 的 NameNode
        访问地址:http://ggl201:9870/

 

 

(5 ) Web 端查看 YARN 的 ResourceManager
        访问地址:http://ggl202:8088/

 

4.5 配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
4.5.1 配置 mapred-site.xml
[hadoop@ggl201 hadoop]$ pwd
/opt/module/hadoop-3.3.1/etc/hadoop
[hadoop@ggl201 hadoop]$ vim mapred-site.xml
添加内容如下:

<!-- 历史服务器端地址 -->
<property>
 <name>mapreduce.jobhistory.address</name>
 <value>ggl201:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
 <name>mapreduce.jobhistory.webapp.address</name>
 <value>ggl201:19888</value>
</property>
4.5.2 分发配置
[hadoop@ggl201 hadoop]$ xsync mapred-site.xml
4.5.3 在 ggl201 启动历史服务器
[hadoop@ggl201 hadoop]$ mapred --daemon start historyserver
4.5.4 查看历史服务器是否启动


4.5.5 查看 JobHistory
访问链接: http://ggl201:19888/jobhistory 

 

 


4.6 配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。

开启日志聚集功能具体步骤如下:

4.6.1 配置 yarn-site.xml
[hadoop@ggl201 hadoop]$ vim yarn-site.xml
内容如下:

<!-- 开启日志聚集功能 -->
<property>
 <name>yarn.log-aggregation-enable</name>
 <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property> 
 <name>yarn.log.server.url</name> 
 <value>http://ggl201:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
 <name>yarn.log-aggregation.retain-seconds</name>
 <value>604800</value>
</property>
4.6.2 分发
[hadoop@ggl201 hadoop]$ xsync yarn-site.xml
4.6.3 关闭 NodeManager 、ResourceManager 和 HistoryServer
[hadoop@ggl202 hadoop-3.3.1]$ sbin/stop-yarn.sh
[hadoop@ggl201 hadoop-3.3.1]$ mapred --daemon stop historyserver
4.6.4 启动 NodeManager 、ResourceManage 和 HistoryServer
[hadoop@ggl202 hadoop-3.3.1]$ sbin/start-yarn.sh
[hadoop@ggl201 hadoop-3.3.1]$ mapred --daemon start historyserver
4.6.5 执行 WordCount 程序
[hadoop@ggl201 hadoop-3.3.1]$ hadoop fs -put word.txt /input
[hadoop@ggl201 hadoop-3.3.1]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
报错如下:


解决方法如下:

 

 

[hadoop@ggl201 hadoop-3.3.1]$ hadoop classpath
 


[hadoop@ggl201 hadoop-3.3.1]$ vim etc/hadoop/mapred-site.xml
 修改mapred-site.xml文件

[hadoop@ggl201 hadoop-3.3.1]$ vim etc/hadoop/mapred-site.xml
增加内容如下:

<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1/etc/hadoop:/opt/module/hadoop-3.3.1/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/common/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn:/opt/module/hadoop-3.3.1/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn/*</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1/etc/hadoop:/opt/module/hadoop-3.3.1/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/common/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn:/opt/module/hadoop-3.3.1/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn/*</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1/etc/hadoop:/opt/module/hadoop-3.3.1/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/common/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn:/opt/module/hadoop-3.3.1/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn/*</value>
</property>

 

分发配置

[hadoop@ggl201 hadoop-3.3.1]$ xsync etc/hadoop/mapred-site.xml
再次运行成功 

4.6.6 查看日志
页面链接:http://ggl201:19888/jobhistory

 

 

4.7 集群启动/停止方式总结
4.7.1 各个模块分开启动/停止(配置 ssh 是前提)常用
( 1 )整体启动 / 停止 HDFS
start-dfs.sh/stop-dfs.sh
(2 )整体启动 / 停止 YARN
start-yarn.sh/stop-yarn.sh
4.7.2 各个服务组件逐一启动/停止

( 1 )分别启动 / 停止 HDFS 组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2 )启动 / 停止 YARN
yarn --daemon start/stop resourcemanager/nodemanager
4.8 编写 Hadoop 集群常用脚本
4.8.1 Hadoop 集群启停脚本(包含 HDFS,YARN,HistoryServer):my_hadoop
[hadoop@ggl201 bin]$ pwd
/home/hadoop/bin
[hadoop@ggl201 bin]$ vim my_hadoop
 内容如下:

#!/bin/bash
if [ $# -lt 1 ]
then
 echo "No Args Input..."
 exit ;
fi
case $1 in
"start")
 echo " =================== 启动 hadoop 集群 ==================="
 echo " --------------- 启动 hdfs ---------------"
 ssh ggl201 "/opt/module/hadoop-3.3.1/sbin/start-dfs.sh"
 echo " --------------- 启动 yarn ---------------"
 ssh ggl202 "/opt/module/hadoop-3.3.1/sbin/start-yarn.sh"
 echo " --------------- 启动 historyserver ---------------"
 ssh ggl201 "/opt/module/hadoop-3.3.1/bin/mapred --daemon start historyserver"
;;
"stop")
 echo " =================== 关闭 hadoop 集群 ==================="
 echo " --------------- 关闭 historyserver ---------------"
 ssh ggl201 "/opt/module/hadoop-3.3.1/bin/mapred --daemon stop historyserver"
 echo " --------------- 关闭 yarn ---------------"
 ssh ggl202 "/opt/module/hadoop-3.3.1/sbin/stop-yarn.sh"
 echo " --------------- 关闭 hdfs ---------------"
 ssh ggl201 "/opt/module/hadoop-3.3.1/sbin/stop-dfs.sh"
;;
*)
 echo "Input Args Error..."
;;
esac
增加执行权限

[hadoop@ggl201 bin]$ chmod +x my_hadoop
测试报错

 

解决办法

删除 /opt/module/hadoop-3.3.1/etc/hadoop/workers 下 localhost等无用字段 只写你的集群主机名 

 4.8.2 查看三台服务器 Java 进程脚本:jpsall
[hadoop@ggl201 root]$ cd /home/hadoop/bin/
[hadoop@ggl201 bin]$ vim jps_all
内容如下:

#!/bin/bash
for host in ggl201 ggl202 ggl203
do
 echo =============== $host ===============
 ssh $host jps 
done
增加执行权限

[hadoop@ggl201 bin]$ chmod +x jps_all
脚本分发

[hadoop@ggl201 bin]$ xsync jps_all
4.9 常用端口说明


4.10 集群时间同步
        如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
        如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境
根据任务对时间的准确程度要求周期同步。
4.10.1 时间服务器配置(必须 root 用户)
( 1 ) 查看所有节点 ntpd 服务状态和开机自启动状态
[root@ggl203 ~]# systemctl status ntpd
[root@ggl203 ~]# systemctl start ntpd
[root@ggl203 ~]# systemctl is-enabled ntpd
如果报错 Unit ntpd.service could not be found.

 

yum -y install ntp
(2 )修改 ggl201  的 ntp.conf 配置文件
[root@ggl201 ~]#  vim /etc/ntp.conf
  修改 1 (授权 192.168. 221.0 -192.168. 221.255 网段上的所有机器可以从这台机器上查
询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
为 restrict 192.168.221.0 mask 255.255.255.0 nomodify notrap
修改 2 (集群在局域网中,不使用其他互联网上的时间)
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 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
添加 3 ( 当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中
的其他节点提供时间同步 )
server 127.127.1.0
fudge 127.127.1.0 stratum 10

 

(3) 修改 ggl201 的/etc/sysconfig/ntpd 文件  增加内容如下(让硬件时间与系统时间一起同步)

[root@ggl201 ~]# vim /etc/sysconfig/ntpd
 
#增加内容
SYNC_HWCLOCK=yes
(4 )重新启动 ntpd 服务并设置 ntpd 服务开机启动
[root@ggl201 ~]#  systemctl start ntpd
[root@ggl201 ~]#  systemctl enable ntpd
4.10.2 其他机器配置(必须 root 用户)
( 1 )关闭 所有节点上 ntp 服务和自启动
[root@ggl202 ~]#  systemctl stop ntpd
[root@ggl202 ~]#  systemctl disable ntpd
[root@ggl203 ~]#  systemctl stop ntpd
[root@ggl203 ~]#  systemctl disable ntpd
(2 )在其他机器配置 1 分钟与时间服务器同步一次(生产环境可以设置成每小时同步一次)
*/1 * * * * /usr/sbin/ntpdate ggl201
(3 )修改任意机器时间
[root@ggl202 ~]# date -s "2021-11-01 11:22:33"
(4)1 分钟后查看机器是否与时间服务器同步 


————————————————
版权声明:本文为CSDN博主「与光同尘~追光者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37056683/article/details/121099742

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值