梦见你的名字 发表于 2023-5-9 11:45:10

Hadoop的运行模式

Hadoop官方网站

http://hadoop.apache.org/
Hadoop运行模式


[*]本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
[*]伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
[*]完全分布式模式:多台服务器组成分布式环境。生产环境使用。
本地运行模式(官方 WordCount)


[*]创建在hadoop-3.1.3文件下面创建一个wcinput文件夹
 $ mkdir wcinput

[*]在wcinput文件下创建一个word.txt文件
 $ cd wcinput

[*]编辑word.txt文件
 $ vim word.txt hadoop<br> yarn<br> hadoop <br> mapreduce<br> atguigu <br> atguigu

[*]回到 Hadoop 目录/opt/module/hadoop-3.1.3
[*]执行程序
 $ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput

[*]查看结果
 $ cat wcoutput/part-r-00000 <br> ​<br> 看到如下结果: <br> ​<br> atguigu 2 <br> hadoop2<br> mapreduce  1<br> yarn   1伪分布式模式

完全分布式模式(开发重点)


[*]准备3台客户机(关闭防火墙、静态IP、主机名称)
[*]安装JDK
[*]配置环境变量
[*]安装Hadoop
[*]配置环境变量
[*]配置集群
[*]单点启动
[*]配置ssh
[*]群起并测试集群
虚拟机准备

编写集群分发脚本xsync

1、scp(secure copy)安全拷贝


[*]定义
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
[*]基本语法
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
 scp-r     $pdir/$fname       $user@$host:$pdir/$fname
[*]实操

[*]前提:在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、 /opt/software 两个目录
[*]在hadoop102上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上。
 $ scp -r /opt/module/jdk1.8.0_212 root@hadoop103:/opt/module

[*]在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。
 $ scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

[*]在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。
 $ scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module
2、rsync远程同步工具


[*]定义
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
[*]rsync和scp区别:
用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
[*]基本语法
rsync -av $pdir/$fname $user@$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
 rsync -av pdir/fname user @user@host:pdir/fname选线参数说明
选项功能-a归档拷贝-v显示复制过程
[*]实操

[*]删除hadoop103中/opt/module/hadoop-3.1.3/wcinput
 $ rm -rf wcinput/

[*]同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103
 $ rsync -av hadoop-3.1.3/ root@hadoop103:/opt/module/hadoop-3.1.3/
3、xsync集群分发脚本


[*]需求:循环复制文件到所有节点的相同目录下
[*]在/home/bin目录下创建xsync文件
 $ cd /home/atguigu<br> ​<br> $ mkdir bin<br> ​<br> $ cd bin<br> ​<br> $ vim xsync
[*]在该文件编写代码
 #!/bin/bash<br> #1.判断参数个数<br> if [ $# -lt 1 ]<br> then<br> echo Not Enough Arguement!<br> exit;<br> fi<br> #2.遍历集群所有机器<br> for host in hadoop102 hadoop103 hadoop104<br> do<br> echo ================$host============<br> #3.遍历所有目录。挨个发送<br> for file in $@<br> do<br> #4.判断文件是否存在<br> if [ -e $file ]<br> then<br> #5.获取父目录<br> pdir=$(cd -P $(dirname $file); pwd)<br> #6.获取当前文件的名称<br> fname=$(basename $file)<br> ssh $host "mkdir -p $pdir"<br> rsync -av $pdir/$fname $host:$pdir<br> else<br> echo $file does not exists!<br> fi<br> done<br> done
[*]修改脚本xsync的权限
 $ chmod 777(+x) xsync
[*]测试脚本
 $ xsync /home/atguigu/bin
[*]将脚本复制到/bin中,以便全局调用
 $ sudo cp xsync /bin/
[*]同步环境变量配置(root所有者)
 $ sudo ./bin/xsync /etc/profile.d/my_env.sh
SSH免密登录

配置ssh


[*]基本语法
ssh 另一台电脑的 IP 地址

[*]ssh 连接时出现 Host key verification failed 的解决方法
 $ ssh hadoop103
[*]如果出现如下内容
 Are you sure you want to continue connecting (yes/no)?

[*]输入 yes,并回车

[*]退回到 hadoop102
  $ exit

[*]查看sshd的状态:
 systemctl status sshd无密钥配置

免密登录原理

<img alt="image-20230402173350859">
生成公钥和密钥

 $ pwd /home/atguigu/.ssh   $ssh-keygen -t rsa

[*]然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到免密登录的目标机器上

 $ ssh-copy-id hadoop102<br> $ ssh-copy-id hadoop103<br> $ ssh-copy-id hadoop104注意:


[*]还需要在hadoop103上采用root账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
[*]还需要在hadoop104上采用root账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
[*]还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
ssh的文件功能

known_hosts记录ssh访问过计算机的公钥(public key)id_rsa生成的私钥id_rsa.pub生成的公钥authorized_keys存放授权过的无密登录服务器公钥集群配置

集群部署

 hadoop102Hadoop103hadoop104HDFSNameNodeDataNodeDataNodeSecondaryNameNodeDataNodeYARNNodeManagerResourceManagerNodeManagerNodeManager

[*]注意:

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

配置文件


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


[*]核心配置文件
配置 core-site.xml
 $ cd $HADOOP_HOME/etc/hadoop $ vim core-site.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>

<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
[*]HDFS配置文件
配置 hdfs-site.xml
 $ vim hdfs-site.xml文件内容如下:
1<?xml version="1.0" encoding="UTF-8"?>
2<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
3<configuration>
4
5<property>
6<name>dfs.namenode.http-address</name>
7<value>hadoop102:9870</value>
8</property>
9
10<property>
11<name>dfs.namenode.secondary.http-address</name>
12<value>hadoop104:9868</value>
13</property>
14</configuration> 
[*]YARN配置文件
配置 yarn-site.xml
 $ vim yarn-site.xml文件内容如下: 
<em> </em> 1 <?xml version="1.0" encoding="UTF-8"?>
2<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
3<configuration>
4
5<property>
6<name>yarn.nodemanager.aux-services</name>
7<value>mapreduce_shuffle</value>
8</property>
9
10<property>
11<name>yarn.resourcemanager.hostname</name>
12<value>hadoop103</value>
13</property>
14
15<property>
16<name>yarn.nodemanager.env-whitelist</name>
17<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
18NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
19RED_HOME</value>
20</property>
21</configuration>
[*]MapReduce配置文件
配置 mapred-site.xml
 $ vim mapred-site.xml文件内容如下:

[*]分发Hadoop配置文件
 $ xsync /opt/module/hadoop3.1.3/etc/hadoop/
[*]查看分发情况
 $ cat /opt/module/hadoop•3.1.3/etc/hadoop/core-site.xml<br>  <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration> 
$ cat /opt/module/hadoop•3.1.3/etc/hadoop/core-site.xml<br> ​
群起集群


[*]配置 workers
 $ vim /opt/module/hadoop•3.1.3/etc/hadoop/workers在该文件中增加如下内容:
 hadoop102 <br> hadoop103<br> hadoop104

[*]注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
 $ xsync /opt/module/hadoop-3.1.3/etc
[*]启动集群

[*]如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式 化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群 找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要 先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行 格式化。)
 $ hdfs namenode -format
[*]启动 HDFS
 $ sbin/start-dfs.sh
[*]在配置了 ResourceManager 的节点(hadoop103)启动 YARN
 $ sbin/start-yarn.sh
[*]Web 端查看 HDFS 的 NameNode
浏览器中输入:http://hadoop102:9870
查看 HDFS 上存储的数据信息
[*]Web 端查看 YARN 的 ResourceManager
浏览器中输入:http://hadoop103:8088
查看 YARN 上运行的 Job 信息

[*]集群基本测试

[*]上传文件到集群
上传小文件
 $ hadoop fs -mkdir /input<br> $ hadoop fs -put<br> $HADOOP_HOME/wcinput/word.txt /input上传大文件
 $ hadoop fs -put /opt/software/jdk-8u212-<br> linux-x64.tar.gz /
[*]上传文件后查看文件存放在什么位置
查看 HDFS 文件存储路径
 $ pwd<br> /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-<br> 192.168.10.102-1610603650062/current/finalized/subdir0/subdir0查看 HDFS 在磁盘存储文件内容
 $ cat blk_1073741825<br> hadoop yarn<br> hadoop mapreduce<br> atguigu<br> atguigu
[*]拼接
 -rw-rw-r--. 1 atguigu atguigu 134217728 5 月 23 16:01 blk_1073741836<br> -rw-rw-r--. 1 atguigu atguigu 1048583 5 月 23 16:01 blk_1073741836_1012.meta<br> -rw-rw-r--. 1 atguigu atguigu 63439959 5 月 23 16:01 blk_1073741837<br> -rw-rw-r--. 1 atguigu atguigu 495635 5 月 23 16:01 blk_1073741837_1013.meta<br> $ cat blk_1073741836>>tmp.tar.gz<br> $ cat blk_1073741837>>tmp.tar.gz<br> $ tar -zxvf tmp.tar.gz
[*]下载
 $ hadoop fs -get /jdk-8u212-linux•x64.tar.gz ./
[*]执行wordcount程序
 $ hadoop jar<br> share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar<br> wordcount /input /output

配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

[*]配置 mapred-site.xml
 $ vim mapred-site.xml在该文件里面增加如下配置。
1
2<property>
3<name>mapreduce.jobhistory.address</name>
4<value>hadoop102:10020</value>
5</property>
6
7<property>
8<name>mapreduce.jobhistory.webapp.address</name>
9<value>hadoop102:19888</value>
10</property>
[*]分发配置
 $ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
[*]在 hadoop102 启动历史服务器
 $ mapred --daemon start historyserver
[*]在 hadoop102 启动历史服务器
 $ jps
[*]查看 JobHistory
http://hadoop102:19888/jobhistory
配置日志的聚集


[*]日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
<img alt="image-20230408165101397">
[*]日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
[*]注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryServer。

[*]配置 yarn-site.xml
 $ vim yarn-site.xml在该文件里面增加如下配置。
1
2<property>
3<name>yarn.log-aggregation-enable</name>
4<value>true</value>
5</property>
6
7<property>
8<name>yarn.log.server.url</name>
9<value>http://hadoop102:19888/jobhistory/logs</value>
10</property>
11
12<property>
13<name>yarn.log-aggregation.retain-seconds</name>
14<value>604800</value>
15</property>
[*]分发配置
 $ xsync $HADOOP_HOME/etc/hadoop/yarn•site.xml
[*]关闭 NodeManager 、ResourceManager 和 HistoryServer
 $ sbin/stop-yarn.sh<br> ​<br> $ mapred --daemon stop historyserver
[*]启动 NodeManager 、ResourceManage 和 HistoryServer
 $ start-yarn.sh<br> $ mapred --daemon start historyserver
[*]删除 HDFS 上已经存在的输出文件
 $ hadoop fs -rm -r /output
[*]执行 WordCount 程序
 $ hadoop jar<br> share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar<br> wordcount /input /output
[*]查看日志

[*]历史服务器地址
http://hadoop102:19888/jobhistory
[*]历史服务器地址
<img alt="image-20230408165519643">
[*]查看任务运行日志
<img alt="image-20230408165536204">
[*]运行日志详情
<img alt="image-20230408165553055">

集群启动/停止方式总结


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

[*]整体启动/停止 HDFS
 start-dfs.sh/stop-dfs.sh
[*]整体启动/停止 YARN
 start-yarn.sh/stop-yarn.sh

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

[*]分别启动/停止 HDFS 组件
 hdfs --daemon start/stop namenode/datanode/secondarynamenode
[*]启动/停止 YARN
 yarn --daemon start/stop resourcemanager/nodemanager

编写 Hadoop 集群常用脚本


[*]Hadoop 集群启停脚本

[*]包含 HDFS,Yarn,Historyserver:myhadoop.sh
 $ cd /home/atguigu/bin $ vim 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-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start
historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop
historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac ​保存后退出,然后赋予脚本执行权限
 $ chmod +x myhadoop.sh 

[*]查看三台服务器 Java 进程脚本:jpsall
 $ cd /home/atguigu/bin<br> $ vim jpsall输入内容
  #!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done 
​保存后退出,然后赋予脚本执行权限
 $ chmod +x jpsall
[*]分发/home/atguigu/bin 目录,保证自定义脚本在三台机器上都可以使用
 $ xsync /home/atguigu/bin/
常用端口号说明

端口名称Hadoop2.xHadoop3.xNameNode 内部通信端口8020 / 90008020 / 9000/9820NameNode HTTP UI500709870MapReduce 查看执行任务端口80888088历史服务器通信端口1988819888集群时间同步


[*]如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定 期和公网时间进行校准;
[*]如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差, 导致集群执行任务时间不同步。
需求


[*]找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环 境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用 1 分钟同 步一次。
<img alt="image-20230408110644744">
时间服务器配置(必须 root 用户)


[*]查看所有节点 ntpd 服务状态和开机自启动状态
 $ sudo systemctl status ntpd $ sudo systemctl start ntpd $ sudo systemctl is-enabled ntpd
[*]修改 hadoop102 的 ntp.conf 配置文件
 $ sudo vim /etc/ntp.conf修改内容

[*]修改 1(授权 192.168.10.0-192.168.10.255 网段上的所有机器可以从这台机器上查 询和同步时间)
 #restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap<br> 为 <br> restrict 192.168.10.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 <br> 为<br> #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 <br> ​<br> fudge 127.127.1.0 stratum 10

[*]修改 hadoop102 的/etc/sysconfig/ntpd 文件
 $ sudo vim /etc/sysconfig/ntpd增加内容如下(让硬件时间与系统时间一起同步)
 SYNC_HWCLOCK=yes
[*]重新启动 ntpd 服务
 $ sudo systemctl start ntpd
[*]设置 ntpd 服务开机启动
 $ sudo systemctl enable ntpd
其他机器配置(必须 root 用户)


[*]关闭所有节点上 ntp 服务和自启动
 $ sudo systemctl stop ntpd<br> $ sudo systemctl disable ntpd<br> $ sudo systemctl stop ntpd<br> $ sudo systemctl disable ntpd
[*]在其他机器配置 1 分钟与时间服务器同步一次
 $ sudo crontab -e编写定时任务如下:
  */1 * * * * /usr/sbin/ntpdate hadoop102
[*]修改任意机器时间
 $ sudo date -s "2021-9-11 11:11:11"
[*]1 分钟后查看机器是否与时间服务器同步
 $ sudo date
  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Hadoop的运行模式