- 一、流程分析
- 二、虚拟机准备
- 三、拷贝 JDK、Hadoop 目录:scp 命令
- 四、分发环境变量配置:编写集群分发脚本 xsync
- 五、SSH 免密登录
- 六、集群配置
- 七、群起测试
(1)配置一台客户机,如主机名为 hadoop102(关闭防火墙,配置IP),创建目录 /opt/software、/opt/module,并修改这两个目录的属主和属组都为当前用户,如用户 zlc;
(2)再拷贝出两台客户机,如主机名为 hadoop103,hadoop104;
(3)只在 hadoop102 客户机上:安装 JDK、Hadoop,安装包路径为 /opt/software,解压路径为 /opt/module,并配置二者的环境变量;
(4)将 hadoop102 上的 JDK、Hadoop 目录及配置拷贝到另外两台客户机 hadoop103、hadoop104 上
(5)配置集群
(6)单点启动
(7)配置 ssh
(8)群起并测试集群
二、虚拟机准备1、配置一台客户机,如主机名为 hadoop102(关闭防火墙,配置IP),创建目录 /opt/software、/opt/module
2、再拷贝出两台客户机,如主机名为 hadoop103,hadoop104;
3、只在 hadoop102 客户机上:安装 JDK、Hadoop,安装包路径为 /opt/software,解压路径为 /opt/module,并配置二者的环境变量;
三、拷贝 JDK、Hadoop 目录:scp 命令1、因为在 hadoop102 上,已经安装好了 JDK、Hadoop,因此,hadoop103、hadoop104 不必再安装一遍了,可以直接使用 scp 命令,将 hadoop102 上的 JDK、Hadoop 目录及配置拷贝到另外两台客户机上。
2、需要用到 scp 安全拷贝命令,该命令可以实现服务器与服务器之间的数据拷贝,基本语法:scp -r 要拷贝的文件路径/名称 目的地用户@主机:目的路径/名称,例如
# 拷贝 hadoop102 的 jdk 到 hadoop103 scp -r /opt/module/jdk1.8.0_212 zlc@hadoop103:/opt/module # 拷贝 hadoop102 的 hadoop 到 hadoop103 scp -r hadoop-3.1.3/ zlc@hadoop103:/opt/module/
(注:scp 不仅支持从源机器到目的机器的推送式拷贝,也支持从目的机器到源机器的拉取式拷贝,即可以在hadoop102中,将文件拷贝给hadoop103,也可以在hadoop103上拉取hadoop102的文件。另外,也可以在 hadoop103上,将hadoop102的文件拷贝到 hadoop104)
3、下图为在 hadoop102 中,将 JDK 拷贝给 hadoop103:
同理在 hadoop102 中,将 Hadoop 拷贝给 hadoop103。
4、在 hadoop103上,将hadoop102的文件拷贝到 hadoop104:
扩展补充
远程同步工具:rsync 命令
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
语法:rsync -av 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
例如:
# 删除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/ zlc@hadoop103:/opt/module/hadoop-3.1.3/四、分发环境变量配置:编写集群分发脚本 xsync
1、编写 xsync 脚本:用于集群分发脚本,循环复制文件到所有节点的相同目录下,
期望脚本在任何路径都能使用,因此脚本要放在声明了全局环境变量的路径下:
因此,可在 /home/zlc/bin 路径下创建脚本 xsync
内容如下(学习自尚硅谷的 Hadoop 教程):
#!/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
但目前并没有可执行权限,可使用命令:chmod 777 xsync,赋予其 execute 权限
2、利用 xsync 脚本 将 /home/zlc/bin 下的 xsync 脚本,也就是它自己,同步到另外的两台客户机上(hadoop103、hadoop104)
hadoop103 上:
hadoop104 上:
3、将自定义的环境变量配置文件同步到另外两台客户机的相同目录下(此处需要用管理员权限才能进行配置文件目录的写入):
4、在另外两台客户机上(即hadoop103、hadoop104)进行配置文件目录的更新,并进行检验:
1、先用 hadoop102 ssh 访问 hadoop 103
这样,在 hadoop102 的 ~ 目录下就会有一个 .ssh 隐藏目录,
同样,在 hadoop103 的 ~ 目录下也会有一个 .ssh 隐藏目录,
2、进入 hadoop102 的 .ssh 目录下,执行
ssh-keygen -t rsa
生成 hadoop102 客户机的公钥和私钥
3、将 hadoop102 的公钥发给 hadoop103 、 hadoop104(也可配置自己免密访问自己)
被免密连接的一方将会生成 authorized_keys 认证文件,因此此处是配置 hadoop102 免密访问自己,因此,也是在本机下生成 authorized_keys 认证文件
4、同理,我们在 hadoop103、hadoop104 上也重复上述配置
5、进行分发测试,在 hadoop102 客户机上分发文件到 hadoop103、hadoop104
1、集群配置规划:NameNode 和 SecondaryNameNode 不要安装在同一台服务器
ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。例如,我的集群配置规划为:
2、配置文件说明:Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
-
默认配置文件:
-
自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
3、配置集群:
核心配置文件 core-site.xml
各文件自定义内容如下:
核心配置文件 core-site.xml
fs.defaultFS hdfs://hadoop102:8020 hadoop.tmp.dir /opt/module/hadoop-3.1.3/data hadoop.http.staticuser.user atguigu
HDFS 配置文件 hdfs-site.xml
dfs.namenode.http-address hadoop102:9870 dfs.namenode.secondary.http-address hadoop104:9868
YARN 配置文件 yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop103 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
MapReduce配置文件 mapred-site.xml
mapreduce.framework.name yarn
4、在集群上分发配置好的Hadoop配置文件:
5、去 hadoop103 和 hadoop104 上查看文件分发情况:
1、配置 workers (注意,不要有多余的空格或空行)
2、分发此文件到集群的所有结点
3、启动集群:
(1)如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode
初始化完成后,会在 hadoop 目录下生成 data、logs 目录
(2)启动 HDFS
在 hadoop102 中:
在 hadoop103 中:
在 hadoop104 中:
对比一下上面的集群配置规划表,HDFS 一行是正确的:
也可以在网页图形化界面中进行 hadoop 可视化管理:
http://hadoop102:9870
(3)在配置了 ResourceManager 的节点(hadoop103)启动 YARN
在 hadoop102 中:
在 hadoop103 中:
在 hadoop104 中:
对比一下上面的集群配置规划表,两行都是正确的:
也可以在网页图形化界面中进行 YARN 可视化管理:
http://hadoop103:8088
4、集群基本测试
(1)创建目录
在 hadoop104 中创建目录
在 hadoop102 中的 hdfs 的图形化管理页面查看
(2)上传客户机的本地文件到 hdfs 中
可在可视化页面中看到
(3)上传客户机的本地大文件到 hdfs 中
(4)查看 HDFS 文件存储路径
上传文件后查看文件存放在什么位置
(5)查看 HDFS 文件的备份情况
在 hadoop102 中:
在 hadoop103 中:
在 hadoop104 中:
(6)下载 HDFS 文件:例如 JDK
方法一:可直接在物理文件中读出来
解压 JDK 压缩包
方法二:也可以利用命令 hadoop fs -get 源 目的
(7)执行程序
执行 mapreduce 的一个用于计数单词的例子(注意最后两个参数表示的源路径与目的路径,是基于 hdfs 中的路径
任务在执行过程中,可以在 yarn 的图形化页面中看到:
上述命令的执行图解:
已将统计的结果输出到了 wcoutput 目录的数据文件中



