1. 本地运行模式
单机运行,只是用来演示一下官方案例。
生产环境不用,测试偶尔会用一下,数据存储在linux本地。
1.示例
1) 创建文件夹 test-input 创建文件 word.txt
利用命令 mkdir test-input 创建文件夹。
利用命令cd test-input 进入该文件夹。
利用命令 vim word.txt 创建文件夹并编辑,保存并退出。
2) 统计文件中词频
进入hadoop所在目录。
执行命令 bin/hadoop jar share/hadoop/mapreduce/ +
hadoop-mapreduce-examples-3.1.3.jar +
wordcount test-input/ ./test-output
wordcount 表示统计词频的指令
test-input/ 表示输入文件
./test-output 表示输出文件
3) 查看结果
进入test-output文件夹,利用命令cat part-r-00000可查看结果
结果如下
2.完全分布式模式(Fully-Distributed Mode)
完全分布式模式也称为集群模式,是真正的分布式的、由3个及以上的实体机或者虚拟机组成的集群,是将Hadoop运行在多台主机中,各个主机按照相关配置运行相应的Hadoop守护进程。完全分布式模式是真正的分布式环境,用于实际的生产环境。
企业中大量使用,数据存储在HDFS/多台服务器工作。
2.1 scp&rsync命令讲解
1. scp(secure copy)安全拷贝
1)scp定义:scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
2)基本语法:scp -r /pdir/fname user@hadoop:pdir/fname
3)解释:命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
2. rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp的区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更 新。scp是把所有文件都复制过去。
1)基本语法:rsync -av $pdir/$fname $user@$host:$pdir/$fname
2)解释:命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
3)选项参数说明:-r 递归,-v 显示复制过程,-l 拷贝符号连接 -a 归档拷贝
3. xsync分发脚本
1)需求:循环复制文件到所有节点的相同目录下
2)需求分析
(a)rsync命令原始拷贝:rsync -rvl /opt/module root@hadoop103:/opt/
(b)期望脚本:xsync要同步的文件名称
(c)说明:在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统的任 何地方直接执行。
3)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
这段脚本是一个 Bash 脚本,用于将指定的文件分发到集群中的多台机器上。
下面是对脚本的详细解析:
-
首先,脚本使用
$#
来判断传入的参数个数是否小于1,如果是,则输出"Not Enough Argument!"并退出脚本。 -
接下来,使用
for
循环遍历集群中的每台机器,这里的机器名是"hadoop102"、"hadoop103"和"hadoop104",可以根据实际情况进行修改。 -
在每台机器上的循环内部,使用
for
循环遍历传入的参数列表$@
,这些参数是要发送的文件。 -
在每个文件循环内部,使用
-e
选项判断文件是否存在。如果文件存在,则执行以下操作:-
获取文件的父目录:通过
cd -P $(dirname $file); pwd
命令获取当前文件的父目录,并将其赋值给pdir
变量。 -
获取文件的名称:通过
basename $file
命令获取当前文件的名称,并将其赋值给fname
变量。 -
在远程机器上创建父目录:使用
ssh $host "mkdir -p $pdir"
命令在远程机器上创建文件的父目录。 -
使用
rsync
命令将文件复制到远程机器:使用rsync -av $pdir/$fname $host:$pdir
命令将当前文件复制到远程机器的相应目录中。
-
-
如果文件不存在,则输出"$file does not exists!"。
脚本通过循环遍历集群中的每台机器,并在每台机器上的循环内部遍历要发送的文件,将文件复制到相应的目录中。可以根据实际需求进行修改和定制。
2.2 SSH 免密登录
1、配置ssh:ssh另一台电脑的ip地址。
2、无密钥配置
(1)免密登录原理
(2)生成公钥和私钥:ssh-keygen -t rsa
(3)将公钥拷贝到要免密登录的目标机器上:
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
注意:还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、103、 104;在hadoop103上采用atguigu账号配置一下无密登录到hadoop102、103、104。
3、.ssh文件夹下(~/.ssh)的文件功能解释
known_hosts:记录ssh访问过计算机的公钥(public key)
id_rsa:生成的私钥
id_rsa.pub:生成的公钥
authorized_keys:存放授权过得无密登录服务器公钥