1. 环境准备

linux-centos7 集群环境搭建

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
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐