第三章 Hadoop 运行模式
Hadoop运行模式包括三种模式
- 本地模式(local)
- 单机运行 只是用来演示一下官方的案例
- 伪分布式模式
- 也是单机运行,但是具备集群的功能,一台服务器模拟一个分布式环境,可用于测试
- 完全分布式模式
- 多个服务器组成的集群 生成环境使用
3.1 本地模式(官方wordcount)
-
准备一个测试文件 在文件中写入一下数据
vim wcinput hadoop yarn hadoop mapreduce a b c a
-
执行测试用例
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
-
查看结果
cat wcoutput/part-r-00000
看到如下结果: hadoop 2 mapreduce 1 yarn` 1 a 2 b 1 c 1
3.2 完全分布式运行模式
基本流程
- 准备 3 台客户机(关闭防火墙、静态 IP、主机名称)
- 安装 JDK
- 配置环境变量
- 安装 Hadoop
- 配置环境变量
- 配置集群
- 单点启动
- 配置 ssh
- 集群起动并测试集群
3.2.1 虚拟机准备
3.2.2 编写集群分发脚本 xsync
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更
新。scp 是把所有文件都复制过去
-
xsync 集群分发脚本
-
需求:循环复制文件到所有节点的相同目录下
-
需求分析:
-
rsync 命令原始拷贝:
rsync -av /opt/module admin@hadoop103:/opt/
-
期望脚本:
-
期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[admin@hadoop102 ~]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atgu igu/.local/bin:/home/admin/bin:/opt/module/jdk1.8.0_212/bi n
-
-
脚本实现
-
在/home/admin/bin 目录下创建 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 具有执行权限
chmod +x xsync
-
测试脚本
[atguigu@hadoop102 ~]$ xsync /home/atguigu/bin
-
将脚本复制到/bin 中,以便全局调用
[atguigu@hadoop102 bin]$ sudo cp xsync /bin/
-
同步环境变量配置(root 所有者)
sudo ./bin/xsync /etc/profile.d/my_env.sh
注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。
-
让环境变量生效
source /etc/profile
-
3.2.3 SSH无密登录配置
-
配置ssh
-
基本语法
ssh 另一台电脑的ip地址
-
ssh连接时候出现hostkey verification failed的解决办法
-
退出ssh 连接
exit
-
-
无秘钥配置
-
免密登录的原理
- 服务器a和服务器b
- 在a上使用ssh-key-gen生成秘钥对,一个公钥和一个私钥
- 将a上的公钥拷贝到需要免密登录的服务器b上,
- 通过ssh访问b是通过a中的私钥加密访问的b,
- 接受到数据后,去授权key(Authorized_keys)中查找a的公钥,并解密数据
- 采用a公钥加密的数据放回给a
-
生成公钥和私钥
cd ~/.ssh ssh-keygen -t ras
-
将公钥拷贝到要免密登录的目标服务器上
ssh -copy-id hadoop02 ssh -copy-id hadoop03
注意:;
- 还需要在hadoop103 hadoop104上采用admin账号配置一下无密登录到hadoop102,hadoop103,hadoop104
- 还需要在hadoop102上使用root账号配置无密登录到hadoop102,hadoop103,hadoop104
-
-
.ssh文件夹的文件功能解释
- knows_host 记录ssh访问过计算机的公钥(public key)
- id_rsa 生成的私钥
- id_rsa.pub 生成的公钥
- authorized_keys 存放授权访问过的无密登录服务器的公钥
-