【大数据】hadoop的运行模式(root用户下、尚硅谷Hadoop入门)_hadoop三种运行模式(7)

mkdir wcinput
# 进入文件夹中
cd wcinput
# 编辑word.txt文本
vim word.txt
# 操作如下
i
11 11 11
22 22
33

# 回到Hadoop目录下执行(3.3.6版本的就是3.3.6,建议按tab键自动补全)
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
# 查看结果
cat wcoutput/part-r-00000

结果如下:

11      3
22      2
33      1

三、完全分布式运行模式

1. 编写集群分发脚本xsync

1.1 scp 安全拷贝

🎯语法:scp [选项] 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
🎯功能:可以实现服务器之间的数据拷贝

🎯选项:

选项说明
-C这会在复制过程中压缩文件或目录
-P如果默认 SSH 端口不是 22,则使用此选项指定 SSH 端口
-r此选项递归复制目录及其内容
-p保留文件的访问和修改时间

🎯例子:

# 文件夹在hadoop102上,拷贝到其他虚拟机上
# 102 --> 103
scp -r  /opt/module/java8/ root@hadoop103:/opt/module/
# 103 <-- 102
scp -r root@hadoop102:/opt/module/hadoop/ /opt/module/
# (103)102 --> 104
scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module/

上面命令将本地目录xxx复制到远程 module 目录下,会创建子目录

1.2. rsync 远程同步工具

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点

🎯rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去
🎯语法:rsync [选项] 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

🎯选项:

选项功能
-a归档拷贝
-v显示复制过程
-l拷贝符号链接

🎯例子:

# 更新同步hadoop103里面hadoop内容
rsync -av hadoop/ root@hadoop103:/opt/module/hadoop/

注意

  1. 如果只想同步源目录source里面的内容到目录destination,则需要在源目录后面加上斜杠
  2. 上面命令执行后,source目录里面的内容,就都被复制到了destination目录里面,不会在destination下面创建一个source子目录
1.3. xsync 集群分发脚本

🎯需求:循环复制文件到所有节点的相同目录下
🎯期待脚本:xsync 要同步的文件名称
🎯将脚本放在声明了全局环境变量的路径中

# 查看全局变量
$PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin:/opt/module/java8/bin:/opt/module/hadoop/bin:/opt/module/hadoop/sbin

# 如果全局变量中没有java、hadoop
source /etc/profile

发现/root/bin路径,故选择在根目录下创建bin目录,创建脚本xsync全局可用

🎯xsync脚本:

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
	echo Not Enough Arguement!
	exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
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

🎯小试牛刀:

# 将xsync脚本分发到其他虚拟机上
xsync /root/bin/

# 将java、hadoop环境变量分发到其他虚拟机上
xsync /etc/profile.d/my_env.sh
# 非root用户
sudo ./bin/xsync /etc/profile.d/my_env.sh

2. ssh 免密登录

🎯免密登录原理
在这里插入图片描述
🎯对每一台虚拟机:从根目录进入.shh目录下,生成公钥和私钥:ssh-keygen -t rsa,接着将公钥拷贝给所有虚拟机(包括自己)ssh-copy-id hadoop102

3.集群配置

NameNode 和 SecondaryNameNode 不要安装在同一台服务器,很消耗内存,ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上

🎯集群配置部署
在这里插入图片描述
🎯配置文件说明:Hadoop 配置文件分两类,默认配置文件自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值

🎯默认配置文件

默认配置文件文件存放在 Hadoop 的 jar 包中的位置
core-default.xmlhadoop-common-3.1.3.jar/core-default.xml
hdfs-default.xmlhadoop-hdfs-3.1.3.jar/hdfs-default.xml
yarn-default.xmlhadoop-yarn-common-3.1.3.jar/yarn-default.xml
mapred-default.xmlhadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

🎯自定义配置文件(常用):core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xmlworkers 五个配置文件存放在/opt/module/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置
🎯核心配置文件:vim core-site.xml,相当于内部通讯,在<configuration></configuration>之间插入

    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
    </property>

    <!-- 指定hadoop数据的存储目录,根据自身情况做出更改 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为root -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>

🎯HDFS配置文件:外部通讯的接口,vim hdfs-site.xml,在<configuration></configuration>之间插入以下内容

        <!-- nn web端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop102:9870</value>
    </property>
        <!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>

🎯YARN配置文件:vim yarn-site.xml,在<configuration></configuration>之间插入以下内容

    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</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>

🎯MapReduce配置文件:mapred-site.xml,在<configuration></configuration>之间插入以下内容

<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

🎯分发到其他虚拟机:xsync hadoop/,在hadoop103/104上查看是否搞定cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

  • 常用端口号:
端口名称端口号
NameNode 内部通信端口8020 / 9000 / 9820
NameNode HTTP UI9870
MapReduce 查看执行任务端口8088
历史服务器通信端口19888

4. 群起集群

🎯配置workers:vim /opt/module/hadoop-3.1.3/etc/hadoop/workers ,增加以下内容(该文件中添加的内容结尾不允许有空格,文件中不允许有空行)

hadoop102
hadoop103
hadoop104

# 保存退出,同步配置文件
xsync /opt/module/hadoop/etc/hadoop/workers

🎯启动集群:如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode

# 在hadoop根目录输入
hdfs namenode -format
# 随后会产生data和logs两个文件

格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化

  1. 杀进程sbin/stop-dfs.sh
  2. 删除每个虚拟机上的logsdata
  3. 格式化NameNode:hdfs namenode -format

🎯启动HDFS

# hadoop 根目录下启动 hdfs
sbin/start-dfs.sh

🤯启动hadoop集群时还有可能会报如下错误

Starting namenodes on [hadoop102]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop104]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

🎯解决方案:

vim /etc/profile
# 在环境变量中添加下面的配置
export HDFS\_NAMENODE\_USER=root
export HDFS\_DATANODE\_USER=root
export HDFS\_SECONDARYNAMENODE\_USER=root
export YARN\_RESOURCEMANAGER\_USER=root
export YARN\_NODEMANAGER\_USER=root

🎯查看是否启动成功:

# 分发并刷新配置文件
xsync /etc/profile ; source /etc/profile
# hadoop 根目录下启动 hdfs
sbin/start-dfs.sh
# jps查看启动的进程(Java进程的相关信息)
jps

🎯启动YARN(hadoop103上启动)

# 同样在hadoop根目录下
source /etc/profile
sbin/start-yarn.sh

# jps查看启动的进程
jps

🎯web端查看 HDFS 的 NameNode:浏览器中输入 http://hadoop102:9870;Web 端查看 YARN 的 ResourceManager:浏览器中输入 http://hadoop103:8088

5. 集群基本测试

🎯上传文件到集群(hadoop102上操作):

# 创建一个目录,后续操作才得以开展
hadoop fs -mkdir /wcinput
# 上传小文件
hadoop fs -put wcinput/word.txt /wcinput
# 上传大文件到根目录
hadoop fs -put /opt/software/jdk-8u371-linux-x64.tar.gz /

🎯web端查看上传情况:http://hadoop102:9870/explorer.html#/,可以看到在这里插入图片描述副本为3

上传文件后查看文件存放在什么位置(hadoop102)?

  1. HDFS的存储路径:/opt/module/hadoop/data/dfs/data/current/BP-141094941-192.168.150.103-1689214323987/current/finalized/subdir0/subdir0
  2. 查看HDFS在磁盘存储文件内容:cat blk_1073741825,可以发现blk_一长串数字即我们上传的文件,可以进行查看、解压等操作

🎯测试YARN(需要计算时才会显示任务):

# hadoop根目录下
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput

查看执行详情http://hadoop103:8088http://hadoop102:9870/explorer.html#/,不过还查看不了历史(history)

6. 配置历史服务器

🎯配置mapred-site.xml
vim /opt/module/hadoop/etc/hadoop/mapred-site.xml

# 添加如下配置
<!-- 历史服务器端地址(供内部) -->
<property>
	<name>mapreduce.jobhistory.address</name>
	<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址(供外部) -->
<property>
	<name>mapreduce.jobhistory.webapp.address</name>
	<value>hadoop102:19888</value>
</property>

🎯回到/opt/module/hadoop/etc/hadoop分发配置xsync mapred-site.xml,并在hadoop102上启动历史服务器:bin/mapred --daemon start historyserver
🎯查看是否启动成功:jps

🎯测试一下:

# 先创建文件夹
hadoop fs -mkdir /input
# 上传文件
hadoop fs -put wcinput/word.txt /input
# 测试yarn
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

web上查看记录http://hadoop102:19888/jobhistory

7. 配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上,可以方便的查看到程序运行详情,方便开发调试
在这里插入图片描述开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryServer

🎯配置yarn-site.xml

vim /opt/module/hadoop/etc/hadoop/yarn-site.xml
# 增加如下配置
<!-- 开启日志聚集功能 -->
<property>
	<name>yarn.log-aggregation-enable</name>
	<value>true</value>


![img](https://img-blog.csdnimg.cn/img_convert/f56af939b84e61a0e1697e5007be54dd.png)
![img](https://img-blog.csdnimg.cn/img_convert/d0b88540a99e7247c6e5100d4be402e9.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

能,需要**重新启动** NodeManager 、ResourceManager 和 HistoryServer
> 
> 
> 


🎯配置yarn-site.xml



vim /opt/module/hadoop/etc/hadoop/yarn-site.xml

增加如下配置

yarn.log-aggregation-enable true

[外链图片转存中…(img-LzDy9CSS-1714732775090)]
[外链图片转存中…(img-nIAS1fzh-1714732775091)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值