至今为止我们做好的准备:
1)准备 3 台客户机(关闭防火墙、静态 IP、主机名称)√
2)安装 JDK √ (Hadoop101)
3)配置系统环境变量 √ (Hadoop101)
4)安装 Hadoop √ (Hadoop101)
5)配置 ssh 和分发脚本
6)配置Hadoop环境变量
7)配置集群
8)启动并测试集群
SSH无密钥登陆的配置
首先,为什么需要配置虚拟机之间的无密钥登录,这是因为我们对设置文件的配置,要在各个节点之间统一,所以要频繁进行通信,ssh无密钥登录为配置文件分发脚本服务。
无密钥的原理是加密中的非对称加密,node1连接node2,需要node1生成公钥和密钥对,然后node1将公钥传输给node2,这样在node1用ssh连接node2时,node2将一段验证文用公钥加密,然后传输给node1,而node1用私钥对其进行解密,传输给node2,node2收到解密后的验证后和自己发送的验证进行对比,如果一样这样就唯一确定了node1的身份,就可以直接连接。
- 生成公钥和私钥
进入
目录,
ssh-keygen -t rsa
三次回车,
生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
- 将公钥拷贝到要免密登录的目标机器上
ssh-copy-id [user@]hadoop101
ssh-copy-id [user@]hadoop102
ssh-copy-id [user@]hadoop103
ssh -v [user@]hadoop101 #测试
- 在另外两台机器上也同时配置一下ssh无密钥登录。
编写集群分发脚本 xsync
SCP
-
scp(secure copy)安全拷贝可以实现服务器与服务器之间的数据拷贝。
-
基本语法
-
实际操作
将Hadoop101虚拟机上的/opt下的module拷贝到另外两台虚拟机,也就是java和hadoop软件包。
scp -r /opt/module/* root@hadoop102:/opt/module scp -r /opt/module/* root@hadoop103:/opt/module
rsync 远程同步工具
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更 新。scp 是把所有文件都复制过去。
- 基本语法
自己编写xsync 集群分发脚本(尚硅谷)
vim /usr/bin/xync
脚本内容不做解释
#!/bin/bash
#1 arguments count
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2.foreach files
for host in hadoop101 hadoop102 hadoop103
do
echo ==================== $host ====================
#3.foreach dir
for file in $@
do
#4. file if exit
if [ -e $file ]
then
#5. get father dir
pdir=$(cd -P $(dirname $file); pwd)
#6.get file name
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
修改权限
chmod +x xsync
测试脚本
xsync /usr/bin
同步之前的环境变量配置
xsync /etc/profile.d/my_env.sh
在Hadoop102和103上重新加载环境变量
source /etc/profile
全分布式配置
全部脚本和环境已经准备好,这样我们再三台虚拟机上就都有了java和hadoop环境,都可以单机模式运行,但我们要配置的为全分布式模式,要配置完全分布式模式需要我们对集群的具体hadoop环境部署进行规划,在本例中采用以下的规划方法。
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | NodeManager | ResourceManager、NodeManager | NodeManager |
配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
默认配置文件:
默认配置文件的内容也可以在官网的文档中获取。
自定义配置文件 :
core-site.xml、 hdfs-site.xml、 yarn-site.xml、 mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上, 用户可以根据项目需求重新进行修改配置。
配置集群
-
配置 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://hadoop101:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
- 配置 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>hadoop101:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9868</value>
</property>
</configuration>
- 配置 yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>指定 MR 走 shuffle</description>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
<description>指定 ResourceManager 的地址</description>
</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>
<description>环境变量的继承</description>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
<description>为每个容器请求分配的最小内存限制资源管理器(512M)</description>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
<description>为每个容器请求分配的最大内存限制资源管理器(4G)</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>虚拟内存比例,默认为2.1,此处设置为4倍</description>
</property>
</configuration>
- 配置 mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>执行MapReduce的方式:yarn/local</description>
</property>
<!-- 不配置在报错-->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
</configuration>
-
配置workers
# 删除第一行localhost,然后添加以下三行
hadoop101
hadoop102
hadoop103
分发配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
查看分发情况,确保配置文件被修改成功。
发起集群
启动集群
- 如果集群是第一次启动,需要在 hadoop101 节点格式化 NameNode。(注意: 格式化 NameNode, 会产生新的集群 id, 导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。 如果集群在运行过程中报错,需要重新格式化 NameNode 的话, 一定要先停止 namenode 和 datanode 进程, 并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。 )
hdfs namenode -format
- 进入/opt/module/hadoop-3.1.3目录,启动 HDFS
sbin/start-dfs.sh
会发现报错
这是因为我们使用的root用户启动,所以把sbin下的start-dfs.sh、stop-dfs.sh添加如下内容。
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
同时也在sbin下的start-yarn.sh、stop-yarn.sh添加如下内容。
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
分发脚本
xsync ./sbin/
再次启动dfs,成功。
- 在配置了 ResourceManager 的节点(hadoop102) 启动 YARN
sbin/start-yarn.sh
启动成功。
- Web 端查看 HDFS 的 NameNode
(a)浏览器中输入: http://hadoop101:9870
(b)查看 HDFS 上存储的数据信息 - Web 端查看 YARN 的 ResourceManager
(a)浏览器中输入: http://hadoop102:8088
(b)查看 YARN 上运行的 Job 信息
查看进行,启动信息符合前面的表格设计。
集群基本测试
- 普通命令测试
#上传文件 1.txt是单机测试用例中的字符文本
hadoop fs -put 1.txt /
hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz /
#统计字数测试
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /1.txt /output
- 启动写入基准测试
#测试10个文件,每个文件50M,一共500M
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 50MB
- 测试读取速度
#测试10个文件,每个文件50M,一共500M
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 50MB
- 测试期间,会在HDFS集群上创建 /benchmarks目录,测试完毕后,我们可以清理该目录。
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean
百度网盘资料包
链接:https://pan.baidu.com/s/1fa7sHVFdeS6bzzNeEfmnqQ
提取码:0xgs