1. 环境准备
2. 下载软件
https://dlcdn.apache.org/hadoop/common/
找到自己想要的版本下载,上传文件到服务器的 /opt/software 目录(放在哪里可以自己斟酌,这里随意一个目录就可以)
3. 上传解压
将软件解压到 /opt/module 目录
tar -zxvf hadoop-3.2.4.tar.gz -C /opt/module
cd /opt/module
mv hadoop-3.2.4 hadoop
4. 配置环境变量
# 创建并编辑环境变量文件
sudo vim /etc/profile.d/my_env.sh
文件中新增以下内容
# HADOOP
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
读取文件并测试是否安装成功
source /etc/profile.d/my_env.sh
5. 完全分布式集群搭建
5.1. 修改 hosts 文件
三台服务器都要修改
sudo vim /etc/hosts
# 添加以下内容,使得服务器之间可以通过域名互相访问
192.168.200.102 mitchell-101
192.168.200.103 mitchell-102
192.168.200.104 mitchell-103
5.2. hadoop 相关配置
5.2.1. env 配置
由于我们在学习阶段资源优先,自己部署大数据非常占用资源,我们这里将集群的启动内存调小,从而节省我们的资源,正式环境不需要配置
cd /opt/module/hadoop/etc/hadoop/
vim hadoop-env.sh
在文档末尾添加下方内容
# 配置 JAVA 程序的堆内存,相当于 Xmx 和 Xms,单位默认为 MB
export HADOOP_HEAPSIZE_MAX=64
export HADOOP_HEAPSIZE_MIN=64
# 设置启动用户为 ROOT,如果不使用 ROOT 启动可以不配置
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
5.2.2. core 配置
vim core-site.xml
<configuration>
<!-- 指定 NameNode 的内部通讯地址,这里推荐使用 8020 端口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mitchell-101:8020</value>
</property>
<!-- 指定数据储存目录,默认是在 /tmp 路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data</value>
</property>
<!-- 指定 hdfs 网页登入的静态用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>mitchell</value>
</property>
</configuration>
5.2.3. hdfs 配置
vim hdfs-site.xml
<configuration>
<!-- 指定 NameNode 的 WEB 访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>mitchell-101:9870</value>
</property>
<!-- 2NN WEB 访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>mitchell-103:9868</value>
</property>
</configuration>
5.2.4. yarn 配置
vim yarn-site.xml
<configuration>
<!-- 指定 MR 走的 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManger 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>mitchell-102</value>
</property>
<!-- 指定 类路径 -->
<property>
<name>yarn.application.classpath</name>
<value>/opt/module/hadoop/etc/hadoop:/opt/module/hadoop/share/hadoop/common/lib/*:/opt/module/hadoop/share/hadoop/common/*:/opt/module/hadoop/share/hadoop/hdfs:/opt/module/hadoop/share/hadoop/hdfs/lib/*:/opt/module/hadoop/share/hadoop/hdfs/*:/opt/module/hadoop/share/hadoop/mapreduce/*:/opt/module/hadoop/share/hadoop/yarn:/opt/module/hadoop/share/hadoop/yarn/lib/*:/opt/module/hadoop/share/hadoop/yarn/*</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志聚集服务地址,注入到历史服务器 -->
<property>
<name>yarn.log.server.url</name>
<value>http://mitchell-101:19888/jobhistory/logs</value>
</property>
<!-- 日志的保留天数(单位秒) -->
<property>
<name>yarn.log-aggregation-seconds</name>
<value>604800</value>
</property>
</configuration>
5.2.5. mapred 配置
vim mapred-site.xml
<configuration>
<!-- 指定 MR 程序运行在 yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器内部地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>mitchell-101:10020</value>
</property>
<!-- 历史服务器 WEB 地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>mitchell-101:19888</value>
</property>
</configuration>
5.2.6. worker 配置
vim workers
# 加入以下内容
mitchell-101
mitchell-102
mitchell-103
5.2.7. 以上配置说明
由于 NameNode、YARN、2NN、JobHistory 四个组件都是比较耗内存的,所以我们一般讲他们分开安装到不同的服务器上
通过以上配置我们启动后 三台服务器分别存在的服务如下:
服务器 | 服务1 | 服务2 | 服务3 | 服务4 |
---|---|---|---|---|
mitchell-101 | NameNode | JobHistoryServer | DataNode | NodeManager |
mitchell-102 | ResourceManager(YARN) | DataNode | NodeManager | |
mitchell-103 | SecondaryNameNode | DataNode | NodeManager |
5.2.8. 集群分发
将 haddop 以及修改的配置文件分发到其他机器
cd /opt/module/hadoop
mkdir data
cd ../
xsync.sh /opt/module/hadoop
5.3. 启动集群
5.3.1. 常用的启动命令
# 【101】初始化,只需要执行一次,后续可以直接启动
hdfs namenode -format
# 【101】启动 和 关闭 hdfs
start-dfs.sh
stop-dfs.sh
# 【102】启动 和 关闭 yarn
start-yarn.sh
stop-yarn.sh
# 【101】启动 和关闭 历史服务器
mapred --daemon start historyserver
mapred --daemon stop historyserver
hdfs web 访问地址:http://mitchell-101:9870/
yarn web 访问地址:http://mitchell-102:8088/
5.3.2. 启动脚本
如果用上方的命令启动集群,不管启动还是关闭每次都需要输入三个命令,不是很方便
我们可以创建一个脚本,封装集群的启动和关闭,方便操作
cd /home/mitchell/bin/
vim myhadoop.sh
chmod +x myhadoop.sh
脚本内容如下
#!/bin/bash
if [ $# -lt 1 ]
then
echo "NO Args Input"
exit;
fi
case $1 in
"start")
echo "=============================== 启动 hadoop 集群 ==============================="
echo "------------------------------- 启动 hdfs -------------------------------"
ssh mitchell-101 "/opt/module/hadoop/sbin/start-dfs.sh"
echo "------------------------------- 启动 yarn -------------------------------"
ssh mitchell-102 "/opt/module/hadoop/sbin/start-yarn.sh"
echo "------------------------------- 启动 historyserver -------------------------------"
ssh mitchell-101 "/opt/module/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")
echo "=============================== 关闭 hadoop 集群 ==============================="
echo "------------------------------- 关闭 historyserver -------------------------------"
ssh mitchell-101 "/opt/module/hadoop/bin/mapred --daemon stop historyserver"
echo "------------------------------- 关闭 yarn -------------------------------"
ssh mitchell-102 "/opt/module/hadoop/sbin/stop-yarn.sh"
echo "------------------------------- 关闭 hdfs -------------------------------"
ssh mitchell-101 "/opt/module/hadoop/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
5.3.4. 测试集群
先准备一个文件
cd /opt/module/hadoop
mkdir wcinput
cd wcinput
vim word.txt
# word.txt 文件中写入一些单词。如
haha hello name
nihao sima wo
haha cls
cks haha cls
文件上传到集群,并且做文件分析
# 创建文件夹:其中 /input 为相对于 hdfs 的文件路径
hadoop fs -mkdir /hadoop_input
# 上传文件:其中 wcinput/word.txt 磁盘下文件,/input 为上一步创建的相对 hsfs 的路径
# 我们在 word.txt 中写入一些单词,单词和单词之间用 空格隔开
hadoop fs -put wcinput/word.txt /hadoop_input
# 测试 MR
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount /hadoop_input /hadoop_output