前言:MapReduce是一种分布式并行编程模型,是Hadoop核心子项目之一。实验前需确保搭建好Hadoop 3.3.5环境、安装好Eclipse IDE
1 Hadoop是什么
2.虚拟机 安装
在学习过程中,一般情况下我们都是在本机通过安装虚拟机来完成 Hadoop 完全分布式的安装。在安装完虚拟机后,我们来设置虚拟机,安装镜像等操作。
系统安装
第一步:
选择自定义,点击下一步。
选择稍后安装操作系统,点击下一步。
选择虚拟机的版本(我使用的是 CentOS 7),点击下一步。
击下一步,设置虚拟机名称和安装位置。
点击下一步,设置系统参数。请结合自身电脑的性能来进行设置(在任务管理器中的性能一栏中查看):
内存:因为我们要搭建完全分布式(一台主机两台从机),所以我们将内存总容量除 4 得到的就是每台虚拟机可设置的内存容量。我的内存是 16 G,所以在这里设置为 4G。
处理器:设置为和本机数量一致,不能大于。
网络适配器:设置为 NAT 模式。
一直点击下一步,设置虚拟机磁盘容量,根据自身的实际情况来,建议设置为 50G,避免其它应用安装不了。并不是给多少就会在本地占用多少硬盘,而是用多少占用多少。
一直点击下一步,直到完成。编辑虚拟机,为其添加镜像文件
点击确定,我们就可以开启虚拟机,等待安装完成。
点击安装位置,选择我要配置分区。
开启网络
上述设置完成后,点击开始安装,设置 ROOT 密码,顺便添加一个用户,等待系统安装完成。
网络设置
系统安装完成后,我们来设置虚拟机的网络,点击左上角编辑——虚拟网络编辑器
设置网络基础信息
设置网关
点击确定,保存退出。
设置本地网络,点击控制面板,进入网络适配器界面,选择 vm8
注意:需要和虚拟机中设置的网络信息保持一致。
进入到系统中,打开终端,设置为静态 ip ,添加 ip 地址、网关和域名。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
重启网络服务
systemctl restart network
使用 ifconfig
命令检查是否设置成功。
到此为止,我们的虚拟机网络设置完成。
2.环境、免密设置
前置环境设置
1.修改主机名称为 “master” (你可以取其它的名字)与 hosts
文件,方便后续进行集群之间的映射。
# 修改主机名称
vi /etc/hostname
# 或者
hostnamectl set-hostname master
修改 hosts
文件,提前添加映射,注意保存退出。
2.关闭防火墙
# 临时关闭防火墙
systemctl stop firewalld
# 永久关闭防火墙
systemctl disable firewalld
3.安装相关软件
# 安装下载库
yum install -y epel-release
4关机,克隆两台虚拟机,作为从机使用。
右击创建好的虚拟机,选择管理——克隆——点击下一页,完整克隆。
克隆完成后,启动两台克隆机器(注意不要同时启动,一台一台启动,不然会造成 IP 冲突,修改完 IP 后再启动其它机器)。打开终端,修改主机名称,设置为静态 ip ,添加 ip 地址、网关和域名,注意与主节点 master 中的 hosts 文件保持一致。设置完成后,重启网络,检查是否设置成功。
免密登录设置
为了后期使用方便,我们为集群机器之间设置免密登录,这里使用 Xshell 工具使用远程登录连接操作,可以在官网免费下载 Xshell 官网,顺便也下载 Xftp 工具,方便后期传输文件和安装包。
打开 Xshell 工具,点击左上角文件——新建,在弹出框中设置名称和 ip 地址,然后点击连接,随后输入 root 账号密码完成连接。
如果连接不上请检查你的虚拟机是否启动或者 ip 地址是否填写有误。
三台机子都连接成功之后,开始设置免密登录。我这里给出 master
主节点免密登录其它两台从机的示例,从机免密登录主机就照葫芦画瓢吧。
# 生成公钥与私钥(三次回车)
ssh-keygen
# 向目标主机发送公钥(输入密码)
ssh-copy-id slave1
ssh-copy-id slave2
# 也需要对自己设置免密哦
ssh-copy-id master
# 免密登录,输入 exit 退出登录
ssh slave1
...
为其它两台从机设置好免密登录。
集群安装规划
为了合理的分配资源,我们需要对集群进行节点规划
节点解析
3.安装 Hadoop 完全分布式
1.上传安装包 和 JDK1.8
我这里的 Hadoop 安装包是 hadoop-3.1.3 版本,根据自身需求来。在主节点 master 中的 /opt 目录下新建两个文件夹 module(存放数据) 和 sofeware (存放安装包)。使用 Xftp 工具将 Hadoop 安装包 和 JDK上传到 sofeware 文件夹下,便于后期管理。
2.配置环境变量
vi /etc/profile
# 在文件末尾添加,将路径更改为你的安装路径
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出后执行命令 source /etc/profile
,使用配置的环境变量立即生效。
输入命令 java -version
验证 JDK 是否安装成功
配置 Hadoop 重要文件
在 Hadoop 中有四个重要的配置文件,位于 $HADOOP_HOME/etc/hadoop 目录下,分别是:
核心配置文件 —— core-site.xml
HDFS 配置文件 —— hdfs-site.xml
YARN 配置文件 —— yarn-site.xml
MapReduce 配置文件 —— mapred-site.xml
根据集群规划,配置文件:
- core-site.xml
<configuration> <!-- 指定 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://master: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> <!-- 设置集群用户权限 --> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> </configuration>
- yarn-site.xml
<configuration> <!-- 指定 MR 走 shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 ResourceManager 的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>slave1</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> <!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://master:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为 7 天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <!-- 是否开启虚拟内存检查 如果一个容器的虚拟内存使用量超过了预先配置的限制, NodeManager 会采取措施来处理这种情况,通常是终止或杀死该容器。 --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
6.配置 workers/slaves 文件
在 Hadoop 的 2.x 版本中
workers
文件叫slaves
。该文件位于
$HADOOP_HOME/etc/hadoop
目录下,用于指定集群运行的所有主机。 -
vi $HADOOP_HOME/etc/hadoop/workers # 添加你的主机 master slave1 slave2
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
7.文件分发
我们上面的操作都只是在主节点
master
中进行,现在我们需要把所有文件分发给从机slave1
和slave2
。# 分发环境变量 rsync -r /etc/profile slave1:/etc/profile rsync -r /etc/profile slave2:/etc/profile # 分发 JDK 和 Hadoop scp -r /opt/module slave1:/opt scp -r /opt/module slave2:/opt
分发完成后,进入两台从机,刷新分发的环境变量,立即生效。
-
source /etc/profile
-
8.启动集群如果集群是第一次启动,则需要先格式化 NameNode 节点。
-
hdfs namenode -format
- 格式化正确则如下所示:
启动时如果发生如下错误:
请在
/etc/profile
文件末尾添加如下参数
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
添加完成后分发到其它节点,并使其立即生效。
启动完成后,输入 jps
命令检查各节点是否正常:
master
主节点
slave1
节点
slave2
节点
在本地浏览器中查看 Hadoop web 界面:192.168.10.10:9870
(这里请修改为你的主机IP)
到此为止,我们的 Hadoop 完全分布式就已经搭建完成啦!