前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >电商数仓6.0组件之虚拟机搭建Hadoop3.X

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

原创
作者头像
弟大翻着洗
修改2024-09-11 20:20:54
740
修改2024-09-11 20:20:54
举报
文章被收录于专栏:大数据组件部署

介绍

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:\Windows\System32\drivers\etc目录下的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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • Hadoop 的作用
      • Hadoop 的核心组件及其关系
        • 组件间的运行机制
          • 生活中的类比
          • 环境准备
          • 虚拟机设置网络配置
          • 主机配置网络
          • 准备搭建
          • 切换到Hadoop核心配置目录
          • core-site.xml
          • hdfs-site.xml
          • mapred-site.xml
          • yarn-site.xml
          • workers
          • 在目录下创建一键启动脚本
          • 添加脚本权限
          • HDFS web 交互界面
          • Web端查看SecondaryNameNode
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档