Hadoop运行模式

时间:2022-12-21 16:55:15

一. Hadoop运行模式

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

1.1 本地运行模式(官方wordcount)

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

[atbigdata@hadoop102 hadoop-3.1.3]$ mkdir wcinput

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

[atbigdata@hadoop102 hadoop-3.1.3]$ cd wcinput

3)编辑word.txt文件

[atbigdata@hadoop102 wcinput]$ vim word.txt

在文件中输入如下内容

hadoop yarn
hadoop mapreduce
atbigdata
atbigdata
保存退出::wq

4)回到Hadoop目录/opt/module/hadoop-3.1.3
5)执行程序

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

6)查看结果

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

看到如下结果:

atbigdata 2
hadoop  2
mapreduce       1
yarn    1

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

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

1.2.1 虚拟机准备

点击此处

1.2.2 编写集群分发脚本xsync

1)scp(secure copy)安全拷贝
(1)scp定义:
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
(2)基本语法


```scala
scp    -r          $pdir/$fname              $user@hadoop$host:$pdir/$fname

命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
(3)案例实操
前提:在 hadoop102 hadoop103 hadoop104 都已经创建好的 /opt/module
/opt/software 两个目录, 并且已经把这两个目录修改为

atbigdata:atbigdata
			sudo chown atbigdata:atbigdata -R /opt/module

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

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

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

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

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

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

2)rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)基本语法

rsync    -av       $pdir/$fname              $user@hadoop$host:$pdir/$fname

命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
选项参数说明
选项 功能
-a 归档拷贝
-v 显示复制过程
(2)案例实操
(a)把hadoop102机器上的/opt/software目录同步到hadoop103服务器的/opt/software目录下

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

3)xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync命令原始拷贝:

rsync  -av     /opt/module  		 root@hadoop103:/opt/

(b)期望脚本:
xsync要同步的文件名称
(c)说明:在/home/atbigdata/bin这个目录下存放的脚本,atbigdata用户可以在系统任何地方直接执行。
(3)脚本实现
(a)在/home/atbigdata/bin目录下创建xsync文件

[atbigdata@hadoop102 opt]$ cd /home/atbigdata
[atbigdata@hadoop102 ~]$ mkdir bin
[atbigdata@hadoop102 ~]$ cd bin
[atbigdata@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 具有执行权限

[atbigdata@hadoop102 bin]$ chmod +x xsync

(c)将脚本复制到/bin中,以便全局调用

[atbigdata@hadoop102 bin]$ sudo cp xsync /bin/
(d)测试脚本
[atbigdata@hadoop102 ~]$ xsync /home/atbigdata/bin
[atbigdata@hadoop102 bin]$ sudo xsync /bin/xsync

1.2.3 SSH无密登录配置

1)配置ssh
(1)基本语法
ssh另一台电脑的ip地址
(2)ssh连接时出现Host key verification failed的解决方法

[atbigdata@hadoop102 ~]$ ssh hadoop103

出现:

The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)? 

(3)解决方案如下:直接输入yes
2)无密钥配置
(1)免密登录原理

(2)生成公钥和私钥:

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

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

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

注意:
还需要在hadoop103上采用atbigdata账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
还需要在hadoop104上采用atbigdata账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
3).ssh文件夹下(~/.ssh)的文件功能解释
known_hosts 记录ssh访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥

1.2.4 集群配置

1)集群部署规划
注意:NameNode和SecondaryNameNode不要安装在同一台服务器
注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

hadoop102 	hadoop103	hadoop104
HDFS
	NameNode
DataNode	
DataNode	SecondaryNameNode
DataNode
YARN	
NodeManager	ResourceManager
NodeManager	
NodeManager

2)配置文件说明
Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
要获取的默认文件 文件存放在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

(2)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
(3)常用端口号说明

Daemon	App	Hadoop2 	Hadoop3
NameNode Port	Hadoop HDFS NameNode	8020 / 9000	9820
 	Hadoop HDFS NameNode HTTP UI	50070	9870
Secondary NameNode Port	Secondary NameNode	50091	9869
 	Secondary NameNode HTTP UI	50090	9868
DataNode Port	Hadoop HDFS DataNode IPC	50020	9867
 	Hadoop HDFS DataNode	50010	9866
 	Hadoop HDFS DataNode HTTP UI	50075	9864

3)配置集群
(1)核心配置文件

配置core-site.xml
[atbigdata@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atbigdata@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网页登录使用的静态用户为atbigdata -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>atbigdata</value>
</property>

<!-- 配置该atbigdata(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.atbigdata.hosts</name>
        <value>*</value>
</property>
<!-- 配置该atbigdata(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.atbigdata.groups</name>
        <value>*</value>
</property>
<!-- 配置该atbigdata(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.atbigdata.groups</name>
        <value>*</value>
</property>
</configuration>

(2)HDFS配置文件

配置hdfs-site.xml
[atbigdata@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
[atbigdata@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_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_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>4096</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
[atbigdata@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配置文件

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

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

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

1.2.5 群起集群

1)配置workers
[atbigdata@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

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

hadoop102
hadoop103
hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件

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

(2)启动HDFS

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

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

[atbigdata@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信息

3)集群基本测试

(1)上传文件到集群
上传小文件

[atbigdata@hadoop102 ~]$ hadoop fs -mkdir /input
[atbigdata@hadoop102 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
上传大文件
[atbigdata@hadoop102 ~]$ hadoop fs -put  /opt/software/jdk-8u212-linux-x64.tar.gz  /

(2)上传文件后查看文件存放在什么位置
(a)查看HDFS文件存储路径

[atbigdata@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

(b)查看HDFS在磁盘存储文件内容

[atbigdata@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce 
atbigdata
atbigdata

(3)拼接

-rw-rw-r--. 1 atbigdata atbigdata 134217728 523 16:01 blk_1073741836
-rw-rw-r--. 1 atbigdata atbigdata   1048583 523 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 atbigdata atbigdata  63439959 523 16:01 blk_1073741837
-rw-rw-r--. 1 atbigdata atbigdata    495635 523 16:01 blk_1073741837_1013.meta
[atbigdata@hadoop102 subdir0]$ cat blk_1073741836>>tmp.tar.gz
[atbigdata@hadoop102 subdir0]$ cat blk_1073741837>>tmp.tar.gz
[atbigdata@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz

(4)下载

[atbigdata@hadoop104 software]$ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./

(5)执行wordcount程序

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