最码农 最码农
  • 首页
  • 动态广场
  • 精选栏目
  • 闲言碎语
  • 左邻右里
  • 笔记屋
  • 注册
  • 登录
首页 › 大数据 › Hadoop 运行模式

Hadoop 运行模式

Cosy
11月前大数据阅读 408

Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
Hadoop 官方网站:http://hadoop.apache.org/

本地运行模式(官方 wordcount)

1)创建在 hadoop-3.1.3 文件下面创建一个 wcinput 文件夹


[hadoop@hadoop102 hadoop-3.1.3]$ mkdir wcinput

2)在 wcinput 文件下创建一个 word.txt 文件


[hadoop@hadoop102 hadoop-3.1.3]$ cd wcinput

3)编辑 word.txt 文件


[hadoop@hadoop102 wcinput]$ vim word.txt

在文件中输入如下内容


hadoop yarn
hadoop mapreduce
school
school

保存退出::wq
4)回到 Hadoop 目录/opt/module/hadoop-3.1.3

5)执行程序


[hadoop@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce examples-3.1.3.jar wordcount wcinput wcoutput

6)查看结果


[hadoop@hadoop102 hadoop-3.1.3]$ cat wcoutput/part-r-00000

看到如下结果:


hadoop 2
mapreduce 1
school 2
yarn 1

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

分析:

  • 1)准备 3 台客户机(关闭防火墙、静态 ip、主机名称)
  • 2)安装 JDK
  • 3)配置环境变量
  • 4)安装 Hadoop
  • 5)配置环境变量
  • 6)配置集群
  • 7)单点启动
  • 8)配置 ssh
  • 9)群起并测试集群

虚拟机准备

详情见 第三章、Hadoop 运行环境搭建

编写集群分发脚本 xsync

1)scp(secure copy)安全拷贝

(1)scp 定义

scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
(2)基本语法

scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

(3)案例实操

前提:

  • 在 hadoop102 hadoop103 hadoop104 都已经创建好的 /opt/module /opt/software 两个目录, 并且已经把这两个目录修改为 hadoop:hadoop
  • sudo chown hadoop:hadoop -R /opt/module

(a)在 hadoop102 上,将 hadoop102 中/opt/module/jdk1.8.0_212 目录拷贝到hadoop103 上。


[hadoop@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 hadoop@hadoop103:/opt/module

(b)在 hadoop103 上,将 hadoop102 中/opt/module/hadoop-3.1.3 目录拷贝到hadoop103 上。


[hadoop@hadoop103 ~]$ scp -r hadoop@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

(c)在 hadoop103 上操作,将 hadoop102 中/opt/module 目录下所有目录拷贝到
hadoop104 上。


[hadoop@hadoop103 opt]$ scp -r hadoop@hadoop102:/opt/module/* hadoop@hadoop104:/opt/module

2)rsync 远程同步工具

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

rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。
(1)基本语法
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

选项参数说明

Hadoop 运行模式-最码农

(2)案例实操

(a)把 hadoop102 机器上的/opt/software 目录同步到 hadoop103 服务器的/opt/software 目录下


[hadoop@hadoop102 opt]$ rsync -av /opt/software/* hadoop@hadoop103:/opt/software

3)xsync 集群分发脚本

(1)需求:循环复制文件到所有节点的相同目录下

(2)需求分析:

  • (a)rsync 命令原始拷贝:

rsync -av /opt/module root@hadoop103:/opt/
  • (b)期望脚本:xsync 要同步的文件名称
  • (c)说明:在/home/atguigu/bin 这个目录下存放的脚本,atguigu 用户可以在系统任何地方直接执行。

(3)脚本实现

  • (a)在/home/atguigu/bin 目录下创建 xsync 文件

[hadoop@hadoop102 opt]$ cd /home/hadoop
[hadoop@hadoop102 ~]$ mkdir bin
[hadoop@hadoop102 ~]$ cd bin
[hadoop@hadoop102 bin]$ vim 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
  • (b)修改脚本 xsync 具有执行权限

[hadoop@hadoop102 bin]$ chmod +x xsync
  • (c)将脚本复制到/bin 中,以便全局调用

[hadoop@hadoop102 bin]$ sudo cp xsync /bin/
  • (d)测试脚本

[hadoop@hadoop102 ~]$ xsync /home/atguigu/bin
[hadoop@hadoop102 bin]$ sudo xsync /bin/xsync

SSH 无密登录配置

(1)免密登录原理

Hadoop 运行模式-最码农

(2)生成公钥和私钥:


[hadoop@hadoop102 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

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


[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop102
[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop103
[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop104

注意:

还需要在 hadoop103 上采用 hadoop 账号配置一下无密登录到 hadoop102、hadoop103、hadoop104 服务器上。
还需要在 hadoop104 上采用 hadoop 账号配置一下无密登录到 hadoop102、hadoop103、hadoop104 服务器上。
还需要在 hadoop102 上采用 root 账号,配置一下无密登录到 hadoop102、hadoop103、hadoop104。

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

Hadoop 运行模式-最码农

集群配置

1)集群部署规划

注意:NameNode 和 SecondaryNameNode 不要安装在同一台服务器。

注意:ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。

Hadoop 运行模式-最码农

2)配置文件说明

Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

(1)默认配置文件:

Hadoop 运行模式-最码农

(2)自定义配置文件:

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

(3)常用端口号说明:

DaemonAppHadoop2Hadoop3
NameNode PortHadoop HDFS NameNode8020 / 90009820
 Hadoop HDFS NameNode HTTP UI500709870
Secondary NameNode PortSecondary NameNode500919869
 Secondary NameNode HTTP UI500909868
DataNode PortHadoop HDFS DataNode IPC500209867
 Hadoop HDFS DataNode500109866
 Hadoop HDFS DataNode HTTP UI500759864

3)配置集群

(1)核心配置文件

配置 core-site.xml


[hadoop@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[hadoop@hadoop102 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://hadoop102:9820</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 hadoop -->
 <property>
 <name>hadoop.http.staticuser.user</name>
 <value>hadoop</value>
</property>
<!-- 配置该 hadoop(superUser)允许通过代理访问的主机节点 -->
 <property>
 <name>hadoop.proxyuser.hadoop.hosts</name>
 <value>*</value>
</property>
<!-- 配置该 hadoop(superUser)允许通过代理用户所属组 -->
 <property>
 <name>hadoop.proxyuser.hadoop.groups</name>
 <value>*</value>
</property>
<!-- 配置该 hadoop(superUser)允许通过代理的用户-->
 <property>
 <name>hadoop.proxyuser.hadoop.groups</name>
 <value>*</value>
</property>
</configuration>

(2)HDFS 配置文件

配置 hdfs-site.xml


[hadoop@hadoop102 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>hadoop102:9870</value>
 </property>
<!-- 2nn web 端访问地址-->
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>hadoop104:9868</value>
 </property>
</configuration>

(3)YARN 配置文件

配置 yarn-site.xml


[hadoop@hadoop102 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>hadoop103</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>
<!-- yarn 容器允许分配的最大最小内存 -->
 <property>
 <name>yarn.scheduler.minimum-allocation-mb</name>
 <value>512</value>
 </property>
 <property>
 <name>yarn.scheduler.maximum-allocation-mb</name>
 <value>2048</value>
</property>
<!-- yarn 容器允许管理的物理内存大小 -->
 <property>
 <name>yarn.nodemanager.resource.memory-mb</name>
 <value>4096</value>
</property>
<!-- 关闭 yarn 对物理内存和虚拟内存的限制检查 -->
 <property>
 <name>yarn.nodemanager.pmem-check-enabled</name>
 <value>false</value>
 </property>
 <property>
 <name>yarn.nodemanager.vmem-check-enabled</name>
 <value>false</value>
 </property>
</configuration>

(4)MapReduce 配置文件

配置 mapred-site.xml


[hadoop@hadoop102 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)在集群上分发配置好的 Hadoop 配置文件


[hadoop@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/

5)去 103 和 104 上查看文件分发情况


[hadoop@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[hadoop@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

群起集群

1)配置 workers


[hadoop@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

在该文件中增加如下内容:


hadoop102
hadoop103
hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

同步所有节点配置文件


[hadoop@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc

2)启动集群

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


[hadoop@hadoop102 ~]$ hdfs namenode -format

(2)启动 HDFS


[hadoop@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

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


[hadoop@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

(4)Web 端查看 HDFS 的 NameNode

  • (a)浏览器中输入:http://hadoop102:9870
  • (b)查看 HDFS 上存储的数据信息

(5)Web 端查看 YARN 的 ResourceManager

  • (a)浏览器中输入:http://hadoop103:8088
  • (b)查看 YARN 上运行的 Job 信息

配置历史服务器

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

1)配置 mapred-site.xml


[hadoop@hadoop102 hadoop]$ vim 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>

2)分发配置


[hadoop@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

3)在 hadoop102 启动历史服务器


[hadoop@hadoop102 hadoop]$ mapred --daemon start historyserver

4)查看历史服务器是否启动


[hadoop@hadoop102 hadoop]$ jps

5)查看 JobHistory

http://hadoop102:19888/jobhistory

Hadoop 运行模式-最码农
Hadoop 运行模式-最码农
Hadoop 运行模式-最码农

配置日志的聚集

日志聚集概念:

应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。

日志聚集功能好处:

可以方便的查看到程序运行详情,方便开发调试。

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

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

1)配置 yarn-site.xml


[hadoop@hadoop102 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://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
 <name>yarn.log-aggregation.retain-seconds</name>
 <value>604800</value>
</property>

2)分发配置


[hadoop@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

3)关闭 NodeManager 、ResourceManager 和 HistoryServer


[hadoop@hadoop103 ~]$ stop-yarn.sh
[hadoop@hadoop102 ~]$ mapred --daemon stop historyserver

4)启动 NodeManager 、ResourceManage 和 HistoryServer


[hadoop@hadoop103 ~]$ start-yarn.sh
[hadoop@hadoop102 ~]$ mapred --daemon start historyserver

5)删除 HDFS 上已经存在的输出文件


[hadoop@hadoop102 ~]$ hadoop fs -rm -r /output

6)执行 WordCount 程序


[hadoop@hadoop102 ~]$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

7)查看日志

http://hadoop102:19888/jobhistory

编写 hadoop 集群常用脚本

1)查看三台服务器 java 进程脚本:jpsall


[hadoop@hadoop102 ~]$ cd /home/atguigu/bin
[hadoop@hadoop102 ~]$ vim jpsall

然后输入


# !/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps $@ | grep -v Jps
done

保存后退出,然后赋予脚本执行权限


[hadoop@hadoop102 bin]$ chmod +x jpsall

2)hadoop 集群启停脚本(包含 hdfs,yarn,historyserver):myhadoop.sh


[hadoop@hadoop102 ~]$ cd /home/atguigu/bin
[hadoop@hadoop102 ~]$ 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

保存后退出,然后赋予脚本执行权限


[hadoop@hadoop102 bin]$ chmod +x myhadoop.sh

3)分发/home/atguigu/bin 目录,保证自定义脚本在三台机器上都可以使用


[hadoop@hadoop102 ~]$ xsync /home/hadoop/bin/
Hadoop目录及资料
Hadoop 教程 配置
赞赏 赞(0) 收藏(0)
Hadoop 运行环境搭建
上一篇
Hadoop 编译源码
下一篇
再想想
暂无评论
随 机 推 荐
基于Layui的兽音译者加密页面
Hadoop 小文件优化方法
Hadoop2.x 和 Hadoop3.x 的新特性
MapReduce框架原理-InputFormat数据输入
Hadoop概论(一)—— 开篇词
Hadoop HDFS(二)
Hadoop HA 高可用
Hadoop 数据压缩
  • 0
  • 0
介绍

我们致力于打造一个原创的计算机相关技术的博客网站,旨在为访客提供一个优质的计算机技术教程交流平台。网站开辟了很多于计算机相关的栏目,并且收集了不少实用资源,同时也鼓励欢迎访客一起分享、交流、学习。

灵魂推荐
Veer图库 数码荔枝
栏目标题
首页 动态广场 精选栏目 闲言碎语 左邻右里 笔记屋
Copyright © 2021-2023 最码农. 苏ICP备20033168号
  • 首页
  • 动态广场
  • 精选栏目
  • 闲言碎语
  • 左邻右里
  • 笔记屋
# 教程 # # Hadoop # # HDFS # # 人工智能 # # 算法 #
Cosy
即使世界毁灭,也总有回光返照的那一刻
90
文章
3
评论
425
喜欢