您的当前位置:首 页 >> 信息中心

hadoop集群部署,Hadoop 3.3.1 分布式部署

发布日期:2021-12-05 23:05:40 作者: 点击:
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文件

[[email protected] bin]# cd /bin[[email protected] bin]# vim xsync#添加如下代码#!/bin/bash#1. 判断参数个数if [ $# -lt 1 ]then echo Not Enough Arguement! exit;fi#2. 遍历集群所有机器for host in ggl201 ggl202 ggl203do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in [email protected] 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 donedone

(2)修改脚本 xsync 具有执行权限

[[email protected] bin]# chmod +x xsync

(3)测试脚本

[[email protected] bin]# xsync /bin/xsync

如果报错 rsync: command not found 安装一下rsync

yum -y install rsync 4.2 SSH 无密码登录配置 ( 1 )免密登录原理

(2) 生成公钥和私钥

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

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

[[email protected] .ssh]# ssh-copy-id ggl201[[email protected] .ssh]# ssh-copy-id ggl202[[email protected] .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 配置在

同一台机器上 ggl201ggl202ggl203HDFS

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 [[email protected] hadoop]# pwd/opt/module/hadoop-3.3.1/etc/hadoop[[email protected] hadoop]# vim core-site.xml 内容如下: fs.defaultFS hdfs://ggl201:8020 hadoop.tmp.dir /opt/module/hadoop-3.3.1/data hadoop.http.staticuser.user hadoop (2)HDFS 配置文件 配置 hdfs-site.xml [[email protected] hadoop]# vim hdfs-site.xml

内容如下:

dfs.namenode.http-address ggl201:9870 dfs.namenode.secondary.http-address ggl203:9898 (3 ) YARN 配置文件 配置 yarn-site.xml [[email protected] hadoop]# vim yarn-site.xml

内容如下:

yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname ggl202 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME (4 ) MapReduce 配置文件 配置 mapred-site.xml [[email protected] hadoop]# vim mapred-site.xml

内容如下:

mapreduce.framework.name yarn

4.3.4 在集群上分发配置好的 Hadoop 配置文件[[email protected] hadoop]# xsync /opt/module/hadoop-3.3.1/etc/hadoop/ 4.4 集群启动 4.4.1 配置 workers[[email protected] hadoop]# vim /opt/module/hadoop-3.3.1/etc/hadoop/workers 增加以下内容: ggl201ggl202ggl203 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。 同步所有节点配置文件 [[email protected] 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 目录,然后再进行格式化。)

[[email protected] hadoop-3.3.1]# hdfs namenode -format

(2 )启动 HDFS [[email protected] hadoop-3.3.1]# sbin/start-dfs.sh

报错信息如下:

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

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

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

解决方法如下:

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

[[email protected] ~]# cp -r .ssh/ /home/hadoop/

 2、修改所属用户和用户组

[[email protected] ~]$ sudo chown hadoop:hadoop -R .ssh/

 3、分发

[[email protected] ~]$ sudo xsync.ssh/

再次启动 成功

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

[[email protected] 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 [[email protected] hadoop]$ pwd/opt/module/hadoop-3.3.1/etc/hadoop[[email protected] hadoop]$ vim mapred-site.xml

添加内容如下:

mapreduce.jobhistory.address ggl201:10020 mapreduce.jobhistory.webapp.address ggl201:19888 4.5.2 分发配置 [[email protected] hadoop]$ xsync mapred-site.xml 4.5.3 在 ggl201 启动历史服务器 [[email protected] 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 [[email protected] hadoop]$ vim yarn-site.xml

内容如下:

yarn.log-aggregation-enable true yarn.log.server.url http://ggl201:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800 4.6.2 分发 [[email protected] hadoop]$ xsync yarn-site.xml 4.6.3 关闭 NodeManager 、ResourceManager 和 HistoryServer [[email protected] hadoop-3.3.1]$ sbin/stop-yarn.sh[[email protected] hadoop-3.3.1]$ mapred --daemon stop historyserver 4.6.4 启动 NodeManager 、ResourceManage 和 HistoryServer [[email protected] hadoop-3.3.1]$ sbin/start-yarn.sh[[email protected] hadoop-3.3.1]$ mapred --daemon start historyserver 4.6.5 执行 WordCount 程序 [[email protected] hadoop-3.3.1]$ hadoop fs -put word.txt /input[[email protected] hadoop-3.3.1]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output 报错如下:

解决方法如下:

[[email protected] hadoop-3.3.1]$ hadoop classpath

[[email protected] hadoop-3.3.1]$ vim etc/hadoop/mapred-site.xml

 修改mapred-site.xml文件

[[email protected] hadoop-3.3.1]$ vim etc/hadoop/mapred-site.xml

增加内容如下:

yarn.app.mapreduce.am.envHADOOP_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/*mapreduce.map.envHADOOP_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/*mapreduce.reduce.envHADOOP_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/*

 

分发配置

[[email protected] 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 [[email protected] bin]$ pwd/home/hadoop/bin[[email protected] bin]$ vim my_hadoop

 内容如下:

#!/bin/bashif [ $# -lt 1 ]then echo "No Args Input..." exit ;ficase $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

增加执行权限

[[email protected] bin]$ chmod +x my_hadoop

测试报错

解决办法

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

 4.8.2 查看三台服务器 Java 进程脚本:jpsall [[email protected] root]$ cd /home/hadoop/bin/[[email protected] bin]$ vim jps_all

内容如下:

#!/bin/bashfor host in ggl201 ggl202 ggl203do echo =============== $host =============== ssh $host jps done

增加执行权限

[[email protected] bin]$ chmod +x jps_all

脚本分发

[[email protected] bin]$ xsync jps_all 4.9 常用端口说明

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

如果报错 Unit ntpd.service could not be found.

yum -y install ntp (2 )修改 ggl201  的 ntp.conf 配置文件 [[email protected] ~]#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 iburstserver 1.centos.pool.ntp.org iburstserver 2.centos.pool.ntp.org iburstserver 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.0fudge 127.127.1.0 stratum 10

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

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

(4)1 分钟后查看机器是否与时间服务器同步