NWNU-Sun | 技术沉思录

代码是诗,bug是谜

   ::  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  77 随笔 :: 49 文章 :: 6 评论 :: 40763 阅读

Hadoop原生分布式搭建

1. 基本环境

JDK版本:JDK8 版本

集群:使用 vmware 虚拟机虚拟三台 linux节点,linux操作系统: Centos7

虚拟机环境准备三台虛拟机(静态iP、关闭防火墙、修改主机名、配置兔密登录、集群时间同步)

首先创建一台虚拟机配置好 hadoop环境变量后分别克隆出 slave1、slave2节点

关闭防火墙(所有节点)

systemctl stop firewall 

配置NTP 同步

修改主机名

hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

修改主机名映射(master节点)

192.168.2.21 master
192.168.2.22 slave1
192.168.2.23 slave3

配置root免密并分发(master节点)

只在master节点的root用户下配置,用于分发master节点的环境变量

ssh-keygen -t rsa ##一路回车
ssh-copy-id master ##回车,输入yes,填入密码
ssh-copy-id slave1
ssh-copy-id slave2

scp -r /etc/hosts slave1:/etc
scp -r /etc/hosts slave2:/etc

新建hadoop用户,并在该用户下配置hadoop免密

useradd hadoop
passwd hadoop

#配置免密(所有节点都需执行)
ssh-keygen -t rsa 
ssh-copy-id master/slave1/slave2

创建目录(所有节点)

mkdir -p /opt/soft --软件安装包
mkdir -p /opt/module --软件安装目录
修改权限
chown -R hadoop:hadoop  /opt/module

安装JDK1.8

#上传jdk包到/opt/soft,并解压到/opt/module
tar -zxvf  jdk-8u211-linux-x64.tar.gz  -C /opt/module  
#修改环境变量
vi  /etc/profile 
export JAVA_HOME=/opt/module/jdk1.8.0_211
export PATH=$PATH:$JAVA_HOME/bin
#刷新环境变量
source /etc/profile

分发JDK和环境变量

scp -r /opt/jdk1.8.0_211  slave1:/opt/module
scp -r /opt/jdk1.8.0_211  slave2:/opt/module
scp -r /etc/profile slave1:/etc
scp -r /etc/profile slave2:/etc
#记得在slave1、slave2刷新环境变量

2. 集群规划

组件 master slave1 slave2
IP 192.168.2.21 192.168.2.22 192.168.2.23
HDFS 3.1.1 NameNode DataNode DataNode Secondary NameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager
HIVE 3.1.2 Matestore HIVESERVER2
软件 master slave1 slave2
Hadoop
Mysql
Hive

3.开始安装

分发之前的所有步骤只在master节点执行,后续scp分发

下载 Hadoop

下载 Hadoop 到 /opt/soft

wget -P /opt/module https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz

解压 Hadoop 到 /opt/module

tar -zxvf /opt/soft/hadoop-3.3.2.tar.gz -C /opt/module

配置环境变量

添加环境变量到vim /etc/profile

# HADOOP
export HADOOP_HOME=/opt/module/hadoop-3.1.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

使环境变量生效

source /etc/profile

使用 hadoop version 检查配置是否正常

目录结构

drwxr-xr-x bin -- 对 hadoop 操作相关命令(.cmd为windows用)
drwxr-xr-x etc -- 配置文件目录
drwxr-xr-x include -- jar包和lib一样 
drwxr-xr-x lib -- hadoop本地库,存放jar包
drwxr-xr-x libexec -- 本地系统依赖库 
-rw-r--r-- LICENSE.txt
-rw-r--r-- NOTICE.txt 
-rw-r--r-- README.txt -- 描述文件 
drwxr-xr-x sbin -- 命令(hadoop停止启动等)
drwxr-xr-x share -- 一些hadoop相关jar包及官方案例

修改核心配置文件

cd /opt/module/hadoop-3.1.1/etc/hadoop
---HDFS---
core-site.xml
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://master:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/module/hadoop-3.1.1/data/tmp</value>
</property>
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_211
hdfs-site.xml
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>
<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>slave2:50090</value>
</property>
---YARN---
yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_211
yarn-site.xml
<!-- Reducer 获取数据的方式 -->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>slave1</value>
</property>
---MR---
mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_211
mapred-site.xml
<!-- 指定 MR 运行在 Yarn 上 -->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
---DataNode && NodeManager 从节点---

hadoop3.0 以后 slaves 更名为 workers 了

一般在集群中你唯一地选择一台机器作为 NameNode ,一台机器作为 ResourceManager,这是 master (主)。

那么 ,集群中剩下的机器作为 DataNode 和 NodeManager。这些是 slaves (从)。

works
master
slave1
slave2

分发

scp -r /opt/module/hadoop-3.1.1  slave1:/opt/module
scp -r /opt/module/hadoop-3.1.1  slave2:/opt/module
scp -r /opt/module/hadoop-3.1.1  slave3:/opt/module

4. 集群启动

如果已经单节点方式启动了 Hadoop,可以先停止之前的启动的 NameNode 与 DataNode 进程。如果之前 NameNode 没有执行格式化这里需要执行格式化,千万不要重复执行!!

如果集群是第一次启动,需要格式化 NameNode(注意格式化之前,一定要先停 止上次启动的所有 namenode 和 datanode 进程,然后再删除 data 和 log 数据)

非第一次不用执行格式化 NameNode 操作!如果多次格式化会造成无法启动!

# master节点执行命令
hadoop namenode -format

格式化成功后会在 /opt/module/hadoop-3.1.1/data/tmp 目录创建文件

启动hdfs(master)
sbin/start-dfs.sh  或者 start-dfs.sh(配置环境变量后)
启动yarn(slave1)
sbin/start-yarn.sh 或者 start-yarn.sh

注意:NameNode 和 ResourceManger 如果不是同一台机器,不能在 NameNode 上启动 YARN,应该在 ResouceManager 所在的机器上启动 YARN

脚本启动
#!/bin/bash

if [ $# -lt 1 ]
then
    echo "请输入命令参数![start|stop|init]"
    exit
fi

case $1 in
"start")
    echo "===================启动hadoop集群==================="
    echo "===============启动HDFS==================="
    ssh master "/opt/module/hadoop-3.1.1/sbin/start-dfs.sh"

    echo "================启动YARN=================="
    ssh slave1 "/opt/module/hadoop-3.1.1/sbin/start-yarn.sh"
;;
"stop")
    echo "===================关闭hadoop集群==================="
    echo "===============关闭YARN==================="
    ssh slave1 "/opt/module/hadoop-3.1.1/sbin/stop-yarn.sh"

    echo "================关闭HDFS=================="
    ssh master "/opt/module/hadoop-3.1.1/sbin/stop-dfs.sh"
;;
"init")

    read -p "你正在进行集群的初始化操作!此操作将删除集群内的所有数据!是否确定?[yes/no]:" check
    if [ "$check" = "yes" ]
    then
        echo "=================关闭Hadoop集群==================="
        echo "==============关闭YARN==================="
        ssh slave1 "/opt/module/hadoop-3.1.1/sbin/stop-yarn.sh"

        echo "==============关闭HDFS==================="
        ssh master "/opt/module/hadoop-3.1.1/sbin/stop-dfs.sh"

        echo "====================删除Hadoop集群数据======================"
        ssh master "rm -rf /opt/module/hadoop-3.1.1/data /opt/module/hadoop-3.1.1/logs "
        ssh slave1 "rm -rf /opt/module/hadoop-3.1.1/data /opt/module/hadoop-3.1.1/logs "
        ssh slave2 "rm -rf /opt/module/hadoop-3.1.1/data /opt/module/hadoop-3.1.1/logs "
        echo "========================集群数据删除完毕================================"

        ssh master "/opt/module/hadoop-3.1.1/bin/hdfs namenode -format"
    fi
;;
*)
    echo "参数错误,可允许的参数:[start|stop|init]"
;;
esac

5. 单节点启动

建议使用集群群起

HDFS单节点启动

启动 master 的 NameNode 和 Datanode

hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode

启动 slave1 和 slave2 的 Datenode

hadoop-daemon.sh start datanode

启动 NameNode 后可以在浏览器打开控制台

http://master:50070/ 主节点:50070

Yarn 集群单节点启动

建议使用集群群起

启动 Yarn 主节点

Yarn集群放在了 slave1 上。所以需要在 slave1 进行操作

yarn-daemon.sh start resourcemanager

启动 NodeManager 从节点

master 、slave1、slave2 都启用从节点

yarn-daemon.sh start nodemanager

6. 核查

Yarn 集群控制面板

控制面板安装在 resourceManager 的节点

http://slave1:8088/cluster

历史日志服务器

在 Yarn 中运行的任务产生的日志数据不能查看,为了查看程序的历史运行情况,需要配置一下历史日志服务器。

配置日志服务器

master节点

配置 mapred-site.xml

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

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

分发 mapred-site.xml 到其他节点

scp -r  /opt/module/hadoop-3.1.1/etc/hadoop/mapred-site.xml  slave1:/opt/module/hadoop-3.1.1/etc/hadoop
scp -r  /opt/module/hadoop-3.1.1/etc/hadoop/mapred-site.xml  slave2:/opt/module/hadoop-3.1.1/etc/hadoop

master 启动历史服务器

 mr-jobhistory-daemon.sh start historyserver

访问历史服务器
http://master:19889

配置日志的聚集

日志聚集:应用(job)运行完成以后,将应用运行日志信息从各个 task 汇总上传到 HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager、 ResourceManager和 HistoryManager

配置 yarn-site.xml

<!-- 日志聚集功能使能 -->
<property>
	<name>yarn.log-aggregation-enable</name>
	<value>true</value>
</property>
<!-- 日志保留时间设置 7 天 -->
<property>
	<name>yarn.log-aggregation.retain-seconds</name>
	<value>604800</value>
</property>

分发 yarn-site.xml 到其他节点

停止 yarn 集群,slave1 节点

stop-yarn.sh

重启 JobHistoryServer,master

mr-jobhistory-daemon.sh stop historyserver
mr-jobhistory-daemon.sh start historyserver

启动 yarn 集群,slave1 节点

start-yarn.sh
posted on   匿名者nwnu  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示