软件清单

虚拟机软件:Workstation 16 Pro for Windows
SSH 连接工具:PUTTY
SSH 多窗口优化工具:MTPUTTY
文件传输工具:WinSCP
Linux 系统镜像:CentOS 7-64

主机设置

防火墙设置(使虚拟机和主机连通)

原帖参考:win10在不关闭防火墙的情况下实现与本地虚拟机之间通信
具体步骤:
修改防火墙高级设置
修改防火墙高级设置
新建入站规则
编辑入站规则
自定义规则
自定义规则
默认选择所有程序
所有程序
默认选择任何协议
任何协议
添加虚拟机 IP 到远程连接白名单,这里图省事,添加了整个私有 IP 域
IP 白名单
默认选择允许连接
允许连接
默认全选
全选
自定义规则名称
自定义规则名称
刷新列表,添加成功
入站规则列表

添加虚拟机 IP 到主机 hosts 文件(使主机能解释 HDFS 文件下载地址和 YARN 历史日志入口地址)

主机 hosts 文件地址 C:\Windows\System32\drivers\etc
末尾添加 虚拟机IP 虚拟机主机名
如:192.168.1.150 CentOS-7-64-1
注:请在设置完虚拟机静态 IP 后再修改主机 hosts 文件

安装虚拟机

在 VMware Workstation Pro 中创建新的虚拟机
默认选择典型
推荐安装
选择稍后安装系统,从而能够自定义安装内容并决定是否创建普通用户,也就是说这样可以只创建一个 root 用户,不创建普通用户
安装来源
选择 Linux 和想要安装的发行版本
选择系统
命名虚拟机,定义虚拟机文件储存位置,后续虚拟机名可重命名
命名虚拟机
按需分配磁盘空间,不建议太大,默认20G就够用,选择拆分为多个文件
分配磁盘
自定义硬件,按需设置内存和处理器个数,网络选择桥接模式
自定义硬件
最终的结果展示界面
最终结果
等创建完成后,先编辑虚拟机设置,选择下载好的镜像文件
选择镜像
启动虚拟机
开机

安装 CentOS 7

启动虚拟机,进入开始页面,选择第一项,敲一下回车
开始界面
进入加载过程,此过程不要按回车,防止进入默认安装模式
加载过程
进入系统安装向导,选择语言
语言选择
进入安装设置界面,确定安装源为本地介质
安装设置
可以按需选择想要安装的软件,注意:最小安装没有图形界面和多余软件,比如使用 ifconfig 时依赖的 network-tools 就需要之后手动安装才能使用,由于后续基本通过 SSH 登录操作,不使用图形界面,所以这里我选择最小安装,也可根据电脑配置随意勾选安装玩玩,大不了就删掉重来嘛
软件选择
选择磁盘,选择自动配置分区
安装位置
关闭 kdump,避免不必要的内存占用,若需要此功能可以启用
kdump
配置网络和主机名,首先修改主机名(也可后续使用命令修改),然后打开网卡,记录分配到的 IP、子网掩码、默认路由、DNS,最后打开右下角网卡配置
网络配置
常规-勾选自动连接
网卡配置
IPv4设置-选择手动,即静态 IP;添加之前分配得到的 IP、子网掩码、网关(默认路由)、DNS;记住此时配置的 IP 地址,后面有用!
网卡配置
安装设置完成,点击开始安装
安装设置
设置 root 密码(越简单越好,过简单时注意双击完成才可设置),不必创建普通用户(若有需求也可创建)
系统安装
安装完成,点击重启进入系统
安装完成
系统安装成功,敲击回车进入系统
系统选择

安装 Java、Hadoop

此处省略 MTPuTTY 与 PuTTY 关联步骤,应该能自行搞定,基本就是选择 PuTTY 路径,默认路径为 C:\Program Files\PuTTY
在 MTPuTTY 中新建服务(Add server)
Server name 为虚拟机 IP
Port 为端口号,设置为 22
Display name 为在左侧快捷栏展示的连接名,可随便改
User name 为登录用户名,设置 root
Passward 为用户的密码,即 root 密码
登录 SSH
设置完成后启动服务,成功远程登录
在这里插入图片描述
关闭防火墙和防火墙开机自启
systemctl stop firewalld
systemctl disable firewalld
在这里插入图片描述
测试网络,注意:Linux 使用 Ctrl+C 终止 ping 连接
外网连接 ping www.baidu.com
主机连接 ping 主机 IP
节点连接 ping 其他节点 IP
在这里插入图片描述
通过 WinSCP 导入 JDK、Hadoop 压缩包,注意选择导入到根目录下的 opt 文件夹(该文件夹已由系统创建,不是自己创建的,找不到的请在上方下拉菜单进入根目录寻找)
在这里插入图片描述
注:在 Linux 下写路径以 /开头表示从系统根目录找起
进入 opt 文件夹 cd /opt
解压缩
tar -zxvf jdk-8u144-linux-x64.tar.gz
tar -zxvf hadoop-2.7.2.tar.gz
查看文件 ll
在这里插入图片描述
配置环境变量:写 .sh 文件
vi /etc/profile.d/java.sh
java.sh 内容为

export JAVA_HOME=/opt/jdk1.8.0_144
export PATH=$PATH:/opt/jdk1.8.0_144/bin

vi /etc/profile.d/hadoop.sh
hadoop.sh 内容为

export HADOOP_HOME=/opt/hadoop-2.7.2
export PATH=$PATH:/opt/hadoop-2.7.2/bin
export PATH=$PATH:/opt/hadoop-2.7.2/sbin

重启配置文件 source /etc/profile

测试环境变量
引用 JAVA_HOME 地址 echo $JAVA_HOME
调用 Java 指令 java -version
安装成功
在这里插入图片描述
引用 HADOOP_HOME 地址 echo $HADOOP_HOME
调用 Hadoop 指令 hadoop version
安装成功
在这里插入图片描述

本地运行模式

字符串正则匹配

进入 Hadoop 目录 cd /opt/hadoop-2.7.2
创建 input 文件夹
mkdir input
导入配置文件作为原始数据(也可随便导入些什么作为数据,也可以自己写些乱七八糟的文件来做数据),这里使用的路径就是相对路径,不是根目录下的那个 etc 文件夹
cp etc/hadoop/*.xml input
使用 grep 匹配正则表达式
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
在这里插入图片描述
查看 hadoop-2.7.2 文件夹 ll
在这里插入图片描述
查看新生成的 output 文件夹 ll -a output/
.crc 为验证文件,part-r-00000 为结果文件,_SUCCESS 为成功标志
output 文件夹
查看匹配结果 cat output/part-r-00000
在这里插入图片描述

WordCount

还是使用 字符串匹配时导入到 input 文件夹内的配置文件做原始数据,使用 wordcount 统计单词,结果输出到 wcoutput 文件夹
进入 Hadoop 目录 cd /opt/hadoop-2.7.2
使用 WordCount
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount input wcoutput
在这里插入图片描述
查看结果 cat wcoutput/part-r-00000
在这里插入图片描述

清理文件

后续不再使用本地运行,删除 input、output、wcoutput 文件夹
rm -rf input/ output/ wcoutput/

伪分布式运行模式

环境搭建

注:此部分复制文件内容时可以不复制 <configuration></configuration> 标签,方便粘贴,Linux 鼠标左键按下拖动选中即复制,点击右键即可在光标处粘贴

进入配置文件夹 cd /opt/hadoop-2.7.2/etc/hadoop

修改 core-site.xml vi core-site.xml
core-site.xml 内容为

<configuration>

<!--指定HDFS中NameNode的地址-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://localhost:9000</value>
</property>

<!--指定Hadoop运行时产生文件的存储路径-->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/hadoop-2.7.2/data/tmp</value>
</property>

</configuration>

修改 hdfs-site.xml vi hdfs-site.xml
hdfs-site.xml 内容为

<configuration>

<!--指定HDFS副本的数量-->
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>

<!--指定Hadoop Secondary NameNode配置-->
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>0.0.0.0:50090</value>
</property>

<!--NameNode的Web端地址-->
<property>
  <name>dfs.http.address</name>
  <value>0.0.0.0:50070</value>
</property>

</configuration>

修改 yarn-site.xml vi yarn-site.xml
yarn-site.xml 内容为

<configuration>

<!-- Site specific YARN configuration properties -->

<!--Reducer获取数据的方式-->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>

<!--YARN的ResourceManager的地址-->
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>localhost</value>
</property>

<!--YARN的ResourceManager的Web端地址-->
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>0.0.0.0:8088</value>
</property>

<!--日志聚合功能使能-->
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<!--日志保留时间,设置为七天-->
<property>
  <name>yarn.log-aggregation.retain</name>
  <value>604800</value>
</property>

</configuration>

通过模板生成 mapred-site.xml 文件 cp mapred-site.xml.template mapred-site.xml
修改 mapred-site.xml vi mapred-site.xml
mapred-site.xml 内容为

<configuration>

<!--指定MapReduce运行在Yarn上-->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

<!--历史服务器端地址-->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>localhost:10020</value>
</property>

<!--历史服务器Web端地址-->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>0.0.0.0:19888</value>
</property>

</configuration>

修改 hadoop-env.sh vi hadoop-env.sh
hadoop-env.sh 内容为

# The java implementation to use.
export JAVA_HOME=/opt/jdk1.8.0_144

修改 yarn-env.sh vi yarn-env.sh
yarn-env.sh 内容为

# some Java parameters
export JAVA_HOME=/opt/jdk1.8.0_144

修改 mapred-env.sh vi mapred-env.sh
mapred-env.sh 内容为

export JAVA_HOME=/opt/jdk1.8.0_144

启动服务
首次启动时格式化 NameNode hdfs namenode -format
在这里插入图片描述

注:重新格式化步骤
停止所有节点上的 NameNode 和 DataNode 进程
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop datanode
进入 Hadoop 文件夹
cd /opt/hadoop-2.7.2
删除所有节点的 data 和 logs 文件夹
rm -rf data/ logs/
格式化 NameNode
hdfs namenode -format

启动 NameNode DataNode SecondaryNameNode(不能连写,必须分三条语句依次执行)
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start secondarynamenode
在这里插入图片描述
启动 ResourceManager NodeManager
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
启动 JobHistory
mr-jobhistory-daemon.sh start historyserver
在这里插入图片描述
查看 JPS jps
在这里插入图片描述
查看 Web UI 虚拟机IP 端口号
NameNode 端口 50070
SecondaryNameNode 端口 50090
YARN 端口 8088
JobHistory 端口 19888

NameNode
在这里插入图片描述
SecondaryNameNode 在这里插入图片描述
YARN
在这里插入图片描述
JobHistory 在这里插入图片描述

运行测试

运行 WordCount
创建 input 目录 hdfs dfs -mkdir -p /user/root/input
上传文件 hdfs dfs -put /opt/hadoop-2.7.2/etc/hadoop/*.xml /user/root/input
进入 Hadoop 目录 cd /opt/hadoop-2.7.2
运行 WordCount 命令 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/root/input /user/root/output
查看 HDFS
网页展示文件系统
在这里插入图片描述
查看 YARN(YARN 重启会清空之前的记录)
在这里插入图片描述
查看 JobHistory
在这里插入图片描述
查看日志聚合
如果不是按照上文的这一套流程进行的话。启动日志聚合功能之前应重启 ResourceManager NodeManager 和 JobHistory
在这里插入图片描述

下载和跳转问题

若要下载 HDFS Web 界面展示的文件、实现 YARN 界面向 History 界面跳转,需要执行两步操作:修改虚拟机主机名(不能是 localhost)、将虚拟机 IP 与修改后的主机名添加到主机 hosts 文件中

注:在安装 CentOS 时已经修改了主机名的可以忽略这一步,直接添加进 hosts 文件
修改虚拟机主机名(例如修改为 CentOS-7-64,主机名不能有空格,也可以自己起一个喜欢的名字,执行代码的时候别粘贴错了就行)
修改 hostname vi /etc/hostname
hostname 内容为

CentOS-7-64

重启虚拟机 reboot(开机后记得开启 Hadoop 各个组件)

修改主机 hosts 文件
主机 hosts 文件地址 C:\Windows\System32\drivers\etc
末尾添加 虚拟机IP 虚拟机主机名

添加了好多虚拟机的主机 hosts 文件,# 表示注释,可忽略
在这里插入图片描述
也可不下载,直接在虚拟机查看结果 hdfs dfs -cat /user/root/output/part-r-00000

完全分布式运行模式

这里我选择重新创建一台最小化安装的下虚拟机(安装用时 2m30s),重新安装 Java Hadoop,进行完全分布式配置,之后用这台虚拟机作为 node0 去克隆其他节点 node1 node2 node3。这样可以不残留伪分布式的配置,不易出现未知错误,且便于后期做测试或扩展或替换节点
当然你也可以直接克隆已经配置好的这台伪分布式,但要注意 NameNode 要执行重新格式化步骤

配置模板机

此处省略上文已经写过的创建虚拟机、登录 SSH、安装 CentOS Java Hadoop 步骤

配置 rsync 脚本

安装 rsync yum install -y rsync
创建 xsync 脚本 vi /usr/local/bin/xsync
xsync 内容为

#!/bin/bash

if [[ -x $(command -v rsync) ]]; then
  echo yes > /dev/null
else
  echo no rsync found!
  exit 1
fi

#1 获取输入参数的个数;如果没有参数,直接退出
pcount=$#
if ((pcount==O)); then
  echo no args!
  exit
fi

#2 获取文件名称
p1=$1
fname=$(basename $p1)
echo fname=$fname

#3 获取文件绝对路径
pdir=$(cd -P $(dirname $p1); pwd)
echo pdir=$pdir

#4 获取当前用户名称
usr=$(whoami)

#5 循环体
for ((host=2; host<4; host++)); do
  echo ---node${host}---
  rsync -rvl $pdir/$fname ${usr}@node${host}:${pdir}
done

循环体从从节点 2 开始遍历发送,所以应在 node1 上运行该脚本,若有需要自行修改
循环体最后一句 @ 后是节点主机名,这也就隐含着节点名要设置成 node1 node2 node3 这种可以被循环处理的样式,改成什么样式脚本就要对应修改,主机名不宜太复杂(例:三个节点名为 CentOS-7-1 CentOS-7-2 CentOS-7-3 循环体最后一句就应改为 rsync -rvl $pdir/$fname ${usr}@CentOS-7-${host}:${pdir}

修改权限 chmod +x xsync

配置 SSH 免密登录

设置允许 ROOT 用户登录 vi /etc/ssh/sshd_config
第 38 行取消注释(底部命令 :set nu 显示行号)PermitRootLogin yes

配置 Hadoop

节点规划表,配置文件按照此表设置

node1node2node3
HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNode
YARNNodeManagerResourceManager NodeManagerNodeManager
JobHistoryJobHistory

注:配置文件内会写入节点主机名,我设置的节点主机名为 node1 node2 node3 此外 node0 为模板机不作为节点使用,配置时请一定改为自己设置的主机名

进入配置文件夹 cd /opt/hadoop-2.7.2/etc/hadoop

修改 core-site.xml vi core-site.xml
core-site.xml 内容为

<configuration>

<!--指定HDFS中NameNode的地址-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://node1:9000</value>
</property>

<!--指定Hadoop运行时产生文件的存储路径-->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/hadoop-2.7.2/data/tmp</value>
</property>

</configuration>

修改 hdfs-site.xml vi hdfs-site.xml
hdfs-site.xml 内容为

<configuration>

<!--指定HDFS副本的数量-->
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>

<!--指定Hadoop Secondary NameNode配置-->
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>node3:50090</value>
</property>

<!--NameNode的Web端地址-->
<property>
  <name>dfs.http.address</name>
  <value>0.0.0.0:50070</value>
</property>

</configuration>

修改 yarn-site.xml vi yarn-site.xml
yarn-site.xml 内容为

<configuration>

<!-- Site specific YARN configuration properties -->

<!--Reducer获取数据的方式-->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>

<!--YARN的ResourceManager的地址-->
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>node2</value>
</property>

<!--YARN的ResourceManager的Web端地址-->
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>0.0.0.0:8088</value>
</property>

<!--日志聚合功能使能-->
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<!--日志保留时间,设置为七天-->
<property>
  <name>yarn.log-aggregation.retain</name>
  <value>604800</value>
</property>

</configuration>

通过模板生成 mapred-site.xml 文件 cp mapred-site.xml.template mapred-site.xml
修改 mapred-site.xml vi mapred-site.xml
mapred-site.xml 内容为

<configuration>

<!--指定MapReduce运行在Yarn上-->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

<!--历史服务器端地址-->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>node3:10020</value>
</property>

<!--历史服务器Web端地址-->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>0.0.0.0:19888</value>
</property>

</configuration>

修改 hadoop-env.sh vi hadoop-env.sh
hadoop-env.sh 内容为

# The java implementation to use.
export JAVA_HOME=/opt/jdk1.8.0_144

修改 yarn-env.sh vi yarn-env.sh
yarn-env.sh 内容为

# some Java parameters
export JAVA_HOME=/opt/jdk1.8.0_144

修改 mapred-env.sh vi mapred-env.sh
mapred-env.sh 内容为

export JAVA_HOME=/opt/jdk1.8.0_144

修改 slaves vi slaves
slaves 内容为(一定不许有空格空行,直接复制会有空行,注意删除!!)

node1
node2
node3

安装 ntpdate

用于集群时间同步 yum install -y ntpdate

克隆节点

关闭 node0
右键虚拟机-管理-克隆
默认选择当前状态
在这里插入图片描述
选择创建完整克隆
在这里插入图片描述
修改虚拟机名称(这可不是虚拟机主机名!)
在这里插入图片描述
完成
在这里插入图片描述
继续克隆 node2 node3(请忽略图中无关虚拟机,为了写文档不知道创建了多少个机子了,呜呜呜)
在这里插入图片描述

配置节点

启动 node1 node2 node3 三台虚拟机

另:也可以一次开一台虚拟机,使用 MTPUTTY 中之前创建的 node0 服务来配置,优点是方便粘贴命令,缺点是配置时同一时间只能有一台虚拟机开启,因为克隆出来的节点的 IP 相同,网络配置完成后 node0 服务立刻断线,需要重新创建服务

在 VMware Workstation Pro 中登录 root 用户,在输入时不要使用小键盘!!!
在这里插入图片描述

配置网络

修改网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33
第 16 行修改 IP 地址最后一个网段为 101(底部命令 :set nu 显示行号)IPADDR=192.168.1.101
注:只改最后一个网段,不要改为 1 或 255 等奇怪的数字,连接 NEFU-WIFI 时前两个网段不是 192.168,不用管,也是只改最后一个就可以
在这里插入图片描述
重启网络 systemctl restart network

另外两个节点最后一个网段分别改为 102 103,重启网络 systemctl restart network

使用 MTPUTTY 添加服务,SSH 登录

修改主机名

例如修改为 node1,主机名不能有空格
修改 hostname vi /etc/hostname
hostname 内容为

node1

重启虚拟机 reboot

另外两个节点修改为 node2 node3,重启虚拟机 reboot

配置 SSH 免密登录(注意步骤顺序)

修改 node1 的 hosts 文件 vi /etc/hosts
hosts 内容为

虚拟机IP node1
虚拟机IP node2
虚拟机IP node3

在这里插入图片描述
修改主机 hosts 文件
主机 hosts 文件地址 C:\Windows\System32\drivers\etc
末尾添加 虚拟机IP 虚拟机主机名
在这里插入图片描述

node1 生成密钥对 ssh-keygen -t rsa
在这里插入图片描述
node1 分发公钥,要分发给自己一份,要先修改 hosts 文件再分发公钥,否则无法识别节点名
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
在这里插入图片描述
分发 node1 的 hosts 文件 xsync /etc/hosts
在这里插入图片描述

另外两个节点
生成密钥对 ssh-keygen -t rsa
分发公钥,都是分发三份
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3

启动集群

在 node1(NameNode 节点)启动 HDFS
格式化 NameNode hdfs namenode -format
在这里插入图片描述
启动 HDFS start-dfs.sh
在这里插入图片描述
在 node2(ResourceManager 节点)启动 YARN start-yarn.sh
在这里插入图片描述
在 node3(JobHistory 节点)启动 JobHistory mr-jobhistory-daemon.sh start historyserver
在这里插入图片描述
进入 HDFS Web 界面 node1:50070,配置了 hosts 文件即可通过 主机名:端口号 跳转访问
查看到三个 DataNode 节点,恭喜你,你成功了!
在这里插入图片描述
接下来,请参照常见命令跑一个 WordCount 试试吧!

配置集群时间同步

选择一个节点做时间服务器,我选择 node1

设置时间服务器

在时间服务器上安装 ntp yum install -y ntp

修改 ntp 配置
修改 ntp.conf 文件vi /etc/ntp.conf
第 17 行取消注释(底部命令 :set nu 显示行号),修改为集群所在的网段(前三个网段与集群 IP 相同,最后一个网段为 0,子网掩码与集群相同)
注释掉第 21-24 行
在文件最后添加两行,启动本地时间同步功能
server 127.127.1.0
fudge 127.127.1.0 stratum10
在这里插入图片描述
在这里插入图片描述

修改 ntpd 文件vi /etc/sysconfig/ntpd
添加 SYNC_HWCLOCK=yes
在这里插入图片描述

重启 ntp 服务 systemctl restart ntpd
设置开机启动 systemctl enable ntpd
查看状态 systemctl status ntpd
在这里插入图片描述

设置其他主机

在 node2 node3 上编辑 crontab 任务编辑
编辑任务 crontab -e(记得安装 ntpdate yum install -y ntpdate

*/10 * * * * /usr/sbin/ntpdate node1

测试时 10 可以改为 1,表示每 1 分钟都向服务器对时,注意修改 node1 为时间服务器的主机名
查看任务 crontab -l
在这里插入图片描述
修改时间 date -s "20200101 1:1:30"
查看时间 date
在这里插入图片描述
记得关闭定时任务 crontab -r 取消自动对时
查看任务 crontab -l
在这里插入图片描述

编译源码

通过完全分布式中配置的模板机克隆一台新的虚拟机,命名为 hadoop_src
修改 hadoop_src 配置,分配多一些内存和处理器,但不要超过 VMware Workstation Pro 给的最大值提示,否则有内存交换风险

配置网络,仅修改 IP 最后一个网段即可,SSH 登录

通过 WinSCP 导入(jdk 之前已经存在了,就不用导入了)
在这里插入图片描述
在这里插入图片描述

进入 opt 文件夹 cd /opt

删除已存在的 Hadoop 文件夹和压缩包
rm -rf hadoop-2.7.2
rm -f hadoop-2.7.2.tar.gz

JDK 之前已经解压配置完成了,这里就不用管了

解压其他压缩包
tar -zxvf apache-ant-1.9.9-bin.tar.gz
tar -zxvf apache-maven-3.0.5-bin.tar.gz
tar -zxvf hadoop-2.7.2-src.tar.gz
tar -zxvf protobuf-2.5.0.tar.gz
查看文件 ll
在这里插入图片描述

安装依赖
yum install -y epel-release
yum install -y glibc-headers gcc-c++ make cmake openssl-devel ncurses-devel htop

进入 protobuf 文件夹 cd /opt/protobuf-2.5.0
依次执行设置、构建、动态链接库管理
设置
./configure
构建
make
make check
make install
动态链接库管理
ldconfig

配置环境变量:写 .sh 文件
vi /etc/profile.d/maven.sh
maven.sh 内容为

export MAVEN_HOME=/opt/apache-maven-3.0.5
export PATH=$PATH:${MAVEN_HOME}/bin

vi /etc/profile.d/ant.sh
ant.sh 内容为

export ANT_HOME=/opt/apache-ant-1.9.9
export PATH=$PATH:${ANT_HOME}/bin

vi /etc/profile.d/protobuf.sh
protobuf.sh 内容为

export LD_LIBRARY_PATH=/opt/protobuf-2.5.0
export PATH=$PATH:${LD_LIBRARY_PATH}

重启配置文件 source /etc/profile
验证配置
mvn -version
ant -version
protoc --version
在这里插入图片描述

给 maven 添加阿里云镜像
编辑配置 vi /opt/apache-maven-3.0.5/conf/settings.xml
第 158 行的注释后面添加 mirror 标签

  <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
    <!--添加阿里云镜像-->
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>

  </mirrors>

进入源码包 cd /opt/hadoop-2.7.2-src
编译吧!!!mvn package -Pdist,native -DskipTests -Dtar

现在可以开另一个终端,输入 htop 查看进程和 CPU 和内存占用了
泡杯茶,安静的享受这花花绿绿的代码的快乐吧!

进入编译结果目录 cd /opt/hadoop-2.7.2-src/hadoop-dist/target
查看文件夹 ll
hadoop-2.7.2.tar.gz 即为编译后的打包文件
在这里插入图片描述

2 核 2G 成绩 15m52s
在这里插入图片描述

常用命令

修改主机名 vi /etc/hostname
重启虚拟机 reboot

修改网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33
重启网络 systemctl restart network

解决网卡消失,无法 SSH 登录问题
按顺序执行以下命令

systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl start network.service
service network restart

主机 hosts 文件地址 C:\Windows\System32\drivers\etc

Web UI 端口号
NameNode 端口 50070
SecondaryNameNode 端口 50090
YARN 端口 8088
JobHistory 端口 19888

分布式运行 WordCount
创建 input 目录 hdfs dfs -mkdir -p /user/root/input
上传文件 hdfs dfs -put /opt/hadoop-2.7.2/etc/hadoop/*.xml /user/root/input
进入 Hadoop 目录 cd /opt/hadoop-2.7.2
运行 WordCount 命令 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/root/input /user/root/output

HDFS 常用命令
创建目录 hdfs dfs -mkdir -p /user/root/input
删除目录 hdfs dfs -rm -r /user/root/output
查看多级目录 hdfs dfs -ls -R /
查看文件 hdfs dfs -cat 文件地址
如:hdfs dfs -cat /user/root/input/core-site.xml
上传文件 hdfs dfs -put 本地源地址 目的地址
如:hdfs dfs -put /opt/hadoop-2.7.2/etc/hadoop/*.xml /user/root/input

清屏 clear

鸣谢

感谢大佬指点,大佬博客指路 —> Do1phln