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

			 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 免密登录


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


### 3.集群配置



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


🎯集群配置部署  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ae6ad9be788b49f9a0aecdfec1e61469.png)  
 🎯配置文件说明:Hadoop 配置文件分两类,**默认配置文件**和**自定义配置文件**,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值


🎯默认配置文件




| 默认配置文件 | 文件存放在 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 |


🎯自定义配置文件(常用):`core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml`、`workers` 五个配置文件存放在`/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>`之间插入以下内容



<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 UI | 9870 |
| 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. 删除每个虚拟机上的`logs`和`data`
> 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#/>,可以看到![在这里插入图片描述](https://img-blog.csdnimg.cn/c352da1c9ff54e9d98255656afcf93d2.png)副本为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:8088>、<http://hadoop102:9870/explorer.html#/>,不过还查看不了历史(history)
> 
> 
> 


### 6. 配置历史服务器


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



添加如下配置

mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888

🎯回到`/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系统上,可以方便的查看到程序运行详情,方便开发调试  
>  ![在这里插入图片描述](https://img-blog.csdnimg.cn/845fecc9a2ef40c8b589c17b3a2c75bc.png)开启日志聚集功能,需要**重新启动** NodeManager 、ResourceManager 和 HistoryServer
> 
> 
> 


🎯配置yarn-site.xml



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

增加如下配置

yarn.log-aggregation-enable true yarn.log.server.url http://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800

🎯保存之后分发



xsync yarn-site.xml


🎯重启NodeManager 、ResourceManager 和 HistoryServer:`mapred --daemon stop historyserver`,单个服务停止;切换至hadoop103上`sbin/stop-yarn.sh`  
 关闭yarn,`sbin/start-yarn.sh`重启yarn,切回hadoop102`mapred --daemon start historyserver`


🎯测试一下:



hadoop根目录下

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output2



> 
> web上查看logs是否有运行信息<http://hadoop102:19888/jobhistory>  
>  注意输出的文件不能已经存在了,要么删除原有的,要么新建一个
> 
> 
> 


### 8. 集群启动/停止方式


🎯各个**模块**分开启动/停止(配置 ssh 是前提)



整体启动/停止HDFS

start-dfs.sh
stop-dfs.sh

整体启动/停止yarn(hadoop103)

start-yarn.sh
stop-yarn.sh


🎯各个**服务组件**逐一启动/停止



单独启动/停止HDFS组件(namenode或datanode或secondarynamenode其中之一)

hdfs --daemon start namenode或datanode或secondarynamenode
hdfs --daemon stop namenode或datanode或secondarynamenode

单独启动/停止YARN组件

yarn --daemon stop resourcemanager或nodemanager
yarn --daemon stop resourcemanager或nodemanager


🎯注意到上述操作繁杂重复,故可以用**脚本一键**启动/关停所有`vim /bin/myhadoop.sh`:



#!/bin/bash

if [ $# -lt 1 ]
then
echo “No Args Input…”
exit ;
fi

case $1 in
“start”)
echo " =================== 启动 hadoop集群 ==================="

    echo " --------------- 启动 hdfs ---------------"
    ssh hadoop102 "/opt/module/hadoop/sbin/start-dfs.sh"
    echo " --------------- 启动 yarn ---------------"
    ssh hadoop103 "/opt/module/hadoop/sbin/start-yarn.sh"
    echo " --------------- 启动 historyserver ---------------"
    ssh hadoop102 "/opt/module/hadoop/bin/mapred --daemon start historyserver"

;;
“stop”)
echo " =================== 关闭 hadoop集群 ==================="

    echo " --------------- 关闭 historyserver ---------------"
    ssh hadoop102 "/opt/module/hadoop/bin/mapred --daemon stop historyserver"
    echo " --------------- 关闭 yarn ---------------"
    ssh hadoop103 "/opt/module/hadoop/sbin/stop-yarn.sh"
    echo " --------------- 关闭 hdfs ---------------"
    ssh hadoop102 "/opt/module/hadoop/sbin/stop-dfs.sh"

;;
*)
echo “Input Args Error…”
;;
esac


🎯先加上权限`chmod 777 myhadoop.sh`,再分发脚本`xsync myhadoop.sh`  
 🎯`myhadoop.sh start`一键启动、`myhadoop.sh stop`一键关停


🤯但是行不通,`myhadoop.sh stop/start`显示:



=================== 关闭 hadoop集群 ===================
--------------- 关闭 historyserver ---------------
--------------- 关闭 yarn ---------------
Stopping nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.
Stopping resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
--------------- 关闭 hdfs ---------------
Stopping namenodes on [hadoop102]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.Stopping datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.Stopping secondary namenodes [hadoop104]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.


🎯解决方法:`vim /opt/module/hadoop/etc/hadoop/hadoop-env.sh`



添加全局变量,跟上一个一样😵

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 /opt/module/hadoop/etc/hadoop/hadoop-env.sh`即可


🎯一键查看所有服务器java进程的脚本,拒绝一台一台jps,`vim /bin/jpsall`:



#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done


🎯先加上权限`chmod 777 myhadoop.sh`,再分发脚本`xsync jpsall`,最后`jpsall` 即可查看



![img](https://img-blog.csdnimg.cn/img_convert/0e83f0143dd80ad93021911819228790.png)
![img](https://img-blog.csdnimg.cn/img_convert/7cfa83ee6e8091a652fbfb80c4771af2.png)

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

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


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

绝一台一台jps,`vim /bin/jpsall`:



#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done


🎯先加上权限`chmod 777 myhadoop.sh`,再分发脚本`xsync jpsall`,最后`jpsall` 即可查看



[外链图片转存中...(img-Vh72uM2G-1714266547779)]
[外链图片转存中...(img-yPCW96Jk-1714266547779)]

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

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


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

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值