电商数仓6.0组件之虚拟机搭建Hadoop3.X

2024-09-11 20:20:54 浏览数 (2)

介绍

Hadoop 的作用

Hadoop 是一个开源的框架,主要用于处理海量数据。它能在分布式环境中存储和处理数据,具有高容错性、可扩展性和高性能等优点。Hadoop 可以处理结构化、半结构化和非结构化数据,适用于数据挖掘、机器学习、大数据分析等多种场景。

Hadoop 的核心组件及其关系

  1. Hadoop Distributed File System (HDFS):
    • NameNode: 负责管理文件系统的元数据(如文件名、权限、块位置)。它记录每个文件被分割成的块及其存放在 DataNode 的信息。
    • DataNode: 负责实际存储数据的节点。数据被切分成块,存储在多个 DataNode 上。DataNode 会定期向 NameNode 发送心跳信号,报告其状态和存储的块信息。
  2. Yet Another Resource Negotiator (YARN):
    • ResourceManager: 是 YARN 的主控节点,负责管理集群的资源(如 CPU、内存等)。它协调各个应用程序的资源分配。
    • NodeManager: 是每个工作节点的资源管理器,负责管理和监控节点上的资源使用情况,向 ResourceManager 报告状态。NodeManager 启动并监控应用程序的容器。
  3. MapReduce:
    • Hadoop 的计算框架,负责处理存储在 HDFS 中的数据。作业被分为两个阶段:Map 和 Reduce。
    • Mapper: 处理输入数据并生成中间键值对。
    • Reducer: 处理 Mapper 生成的中间结果,生成最终输出。

组件间的运行机制

  1. 数据存储:
    • 用户将数据上传到 HDFS,NameNode 记录文件的元数据并将数据切分成块,分配给多个 DataNode 存储。
  2. 任务调度与资源管理:
    • 用户提交计算任务到 YARN,ResourceManager 接收任务并根据集群的资源情况分配任务所需的资源。
    • NodeManager 在每个节点上监控运行的任务状态,确保资源得到合理利用。
  3. 数据处理:
    • 当任务执行时,Mapper 开始处理存储在 HDFS 中的数据块,并生成中间结果。
    • 这些中间结果被发送到 Reducer 进行最终计算,生成最终输出并存储回 HDFS。

生活中的类比

想象一个大型餐厅的运营:

  • HDFS: 餐厅的厨房,存放食材(数据)。
    • NameNode是厨房的总管理员,记录每种食材的种类、数量和存放位置,但不存储实际食材。
    • DataNode是各个储藏室,实际存放食材。如果某个储藏室缺少某种食材,管理员会调整并从其他储藏室调配食材。
  • YARN: 餐饮服务的调度员。
    • ResourceManager是调度员,负责分配餐厅的资源(如厨师、餐具、桌子)。
    • NodeManager是每个服务区域的负责人,管理区域内的资源使用,并向调度员报告区域的状态。
  • MapReduce: 厨师的工作流程。
    • Mapper是准备食材的厨师,按照菜品需求将食材处理成初步成品。
    • Reducer是最终制作菜品的厨师,将初步成品组合并完成最终菜品。

环境准备

需要掌握Linux基础

需要先准备三台centos服务器,每台硬盘50G,内存分配为4G , 2G ,2G,先创建一台即可,后续两台用克隆来进行创建

创建root用户

最终需要三台主机 ===> hadoop102 , hadoop103 , hadoop104

该笔记所有组件都是在/opt/module目录下

每搭建完一个组件要细心检查是否是多节点,如果是,那么是否需要修改某些配置

每搭建完一个组件需要配置并且source环境变量

虚拟机设置网络配置

在此处设置网段,这里我设置为10

主机配置网络

代码语言:shell复制
# 导入依赖
sudo yum ‐y install vim

# 每台虚拟机终端配置IP地址
vim /etc/sysconfig/network‐scripts/ifcfg‐ens33
BOOTPROTO="static"
IPADDR=192.168.10.102
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=8.8.8.8

# 重启网络
service network restart 

# hosts映射
vim /etc/hosts
192.168.10.102 hadoop102 
192.168.10.103 hadoop103 
192.168.10.104 hadoop104 

# 创建组件存放目录
mkdir ‐p /opt/module/

准备搭建

这里需要先下载jdk和Hadoop对应压缩包,并通过tar命令解压到 /opt/module/

jdk采用1.8(jdk-8u212-linux-x64.tar.gz)hadoop采用3.3.4 (hadoop-3.3.4.tar.gz)

代码语言:shell复制
# 配置jdk、hadoop环境变量
# 这里解压完后习惯性使用mv命令去掉版本号

vim /etc/profile
# JAVA_HOME
export JAVA_HOME=/opt/module/jdk
export PATH=:$JAVA_HOME/bin:$PATH
# HADOOP_HOME
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
export HADOOP_HOME=/opt/module/hadoop
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

source /etc/profile

切换到Hadoop核心配置目录

代码语言:shell复制
cd /opt/module/hadoop/etc/hadoop

vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk

core-site.xml

代码语言:shell复制
vim core-site.xml

<configuration>
	<!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop/data</value>
</property>

<!-- 配置HDFS网页登录使用的静态用户为root-->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
</property>

<!-- 配置该root(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
</property>
<!-- 配置该root(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
</property>
<!-- 配置该root(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.root.users</name>
        <value>*</value>
</property>
</configuration>

hdfs-site.xml

代码语言:shell复制
vim hdfs-site.xml

<configuration>
	<!-- nn web端访问地址-->
	<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop102:9870</value>
    </property>
    
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>
    
    <!-- 测试环境指定HDFS副本的数量1 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

mapred-site.xml

代码语言:shell复制
vim mapred-site.xml

<configuration>
	<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>

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

yarn-site.xml

代码语言:shell复制
vim 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>hadoop103</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>
    
    <!--yarn单个容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>
    
    <!-- yarn容器允许管理的物理内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
    
    <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>

<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>

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

</configuration>

workers

代码语言:shell复制
vim workers

hadoop102
hadoop103
hadoop104

以上操作进行完毕之后关闭虚拟机创建完整克隆两个,分别为hadoop103和hadoop104。

克隆完毕之后全部开启,然后进行以下操作

代码语言:shell复制
# 进入虚拟机修改ip地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 (对照hosts配置)

# 修改主机名:
hostnamectl set-hostname hadoop103~104 # (这里根据情况写103或104)
bash

# 防火墙关闭
systemctl stop firewalld.service 
systemctl disable firewalld.service 

# ssh免密登录hadoop102上操作即可
# 生成公钥私钥 (一直回车)
ssh-keygen
# hadoop102上配置免密登录到hadoop102 hadoop103 hadoop104
# 这里选择yes以及输入root用户密码进行确认
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

# 互信测试成功之后进行以下操作
# 如果需要重新格式化Hadoop需要对于Hadoop的core-site.xml的hadoop.tmp.dir属性把对应的tmp文件删除掉

# hadoop102下格式化namenode
hdfs namenode -format

在目录下创建一键启动脚本

输入echo $PATH , 最后一个路径就是用户可以在系统任何地方直接执行

创建/root/bin/目录

代码语言:shell复制
# 一键启动
vim allstart.sh
#!/bin/bash
 
# 启动 DFS  
start-dfs.sh

# 启动 YARN ResourceManager  
ssh hadoop103 "source /etc/profile;/opt/module/hadoop/sbin/yarn-daemon.sh start resourcemanager"

# 启动 YARN NodeManagers  
for node in hadoop102 hadoop103 hadoop104; do  
    ssh $node "source /etc/profile;/opt/module/hadoop/sbin/yarn-daemon.sh start nodemanager"
done  

echo "---------所有服务启动完成---------"
代码语言:shell复制
# 一键查看进程
vim xcall

#!/bin/bash  

# 定义机器列表  
machines=("hadoop102" "hadoop103" "hadoop104")  

# 设置 Java 安装路径  
JAVA_HOME="/opt/module/jdk"  # 请将此路径替换为实际的 Java 安装路径  
export PATH="$JAVA_HOME/bin:$PATH"  

# 遍历机器并执行 jps 命令  
for machine in "${machines[@]}"; do  
    echo "---------- $machine ----------"  
    ssh "$machine" "export PATH=$JAVA_HOME/bin:$PATH; jps"  
    echo ""  
done

添加脚本权限

代码语言:shell复制
chmod 777 /root/bin/*

输入xcall回车 , 会有以下进程

hadoop102

NodeManager NameNode Jps DataNode

hadoop103

NodeManager ResourceManager jps DataNode

hadoop104

SecondaryNameNode DataNode Jps NodeManager

HDFS web 交互界面

浏览器输入访问地址 ===> http://hadoop102:9870/

要通过映射则需要在你本机的C:WindowsSystem32driversetc目录下的hosts进行映射

192.168.10.102 hadoop102

192.168.10.103 hadoop103

192.168.10.104 hadoop104

如不进行映射则需要通过ip来进行访问:http://192.168.10.102:9870/

Web端查看SecondaryNameNode

http://hadoop104:9868/status.html

0 人点赞