01数仓平台 Hadoop介绍与安装

Hadoop概述

Hadoop 是数仓平台的核心组件。

在 Hadoop1.x 时代,Hadoop 中的 MapReduce 同时处理业务逻辑运算和资源调度,耦合性较大。在 Hadoop2.x 时代,增加了 Yarn。Yarn 只负责资源的调度,MapReduce 只负责运算。Hadoop3.x 在架构上没有变化。

HDFS架构概述

Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。包含NameNode(NN)、DataNode(DN)和Secondary NameNode(2NN)。

  • NameNode: 存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
  • DataNode:在本地文件系统存储文件块数据,以及块数据的校验和。
  • secondary NameNode:周期性的对NameNode元数据备份。

YARN架构概述

Yet Another Resource Negotiator(YARN)是资源管理协调调度工具,是Hadoop的资源管理器。

MapReduce 架构概述

MapReduce 是对数据进行计算的架构,分为 Map 和 Reduce2 个阶段。

  • Map阶段并行处理输入数据
  • Reduce阶段对 Map结果进行汇总

Hadoop job 执行逻辑

Hadoop 完全分布式运行模式(开发重点)

复制代码
1)准备3台客户机(关闭防火墙、静态IP、主机名称)
2)安装JDK
3)配置环境变量
4)安装Hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置ssh
9)群起并测试集群

配置3台服务器免密与分发脚本

免密配置

  1. 3台服务器上生成公钥和私钥,这里用 hadoop101 举例
    [logan@hadoop101 hadoop-3.1.3]$ ssh-key-gen -t rsa

  2. 将公钥拷贝到 3 台服务器上

    [logan@hadoop101 hadoop-3.1.3] ssh-copy-id hadoop101 [logan@hadoop101 hadoop-3.1.3] ssh-copy-id hadoop102
    [logan@hadoop101 hadoop-3.1.3]$ ssh-copy-id hadoop103

  3. 重复在 hadoop102 上生成公钥和私钥,并进行拷贝

  4. 重复在 hadoop103 上生成公钥和私钥,并进行拷贝

编写集群分发脚本

  1. 在 home 目录下创建bin 文件夹[logan@hadoop101 ~]$ mkdir bin

  2. 在创建的 bin 目录下创建 xsync 脚本

    [logan@hadoop101 ~] cd /home/logan/bin/ [logan@hadoop101 bin] vim xsync

3.编写脚本内容如下

复制代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
 echo Not Enough Arguement!
 exit;
fi

#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103
do
 echo ==================== $host ====================
 #3. 遍历所有目录,挨个发送
 for file in $@
 do
 #4. 判断文件是否存在
 if [ -e $file ]
 then
 #5. 获取父目录
 pdir=$(cd -P $(dirname $file); pwd)
 #6. 获取当前文件的名称
 fname=$(basename $file)
 ssh $host "mkdir -p $pdir"
 rsync -av $pdir/$fname $host:$pdir
 else
 echo $file does not exists!
 fi
 done
done

JDK准备

  1. 卸载 3 台服务器上的 JDK

    [logan@hadoop101 bin]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

    [logan@hadoop102 bin]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

    [logan@hadoop103 bin]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

  2. 使用 sftp 上传或者下载 jdk1.8

  3. 解压jdk 文件

    [logan@hadoop101 module]tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

  4. 配置JDK 环境变量[logan@hadoop101 module]$ sudo vim /etc/profile.d/my_env.sh,增加以下内容

    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    export PATH=PATH:JAVA_HOME/bin

  5. 刷新环境变量source /etc/profile

  6. 检查Java 是否正常安装java -version

  7. 分发 JDK xsync /opt/module/jdk1.8.0_212/

  8. 更新 hadoop102 和 103 上的配置文件, 检查 Java 是否正常安装

    [logan@hadoop102 module] source /etc/profile [logan@hadoop103 module] source /etc/profile

Hadoop部署

1)集群部署规划

注意:NameNode和SecondaryNameNode不要安装在同一台服务器

注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

2)将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面

3)进入到Hadoop安装包路径下
[logan@hadoop101 ~]$ cd /opt/software/

4)解压安装文件到/opt/module下面
[logan@hadoop101 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

5)查看是否解压成功
ls /opt/module/hadoop-3.1.3

6)将Hadoop添加到环境变量

  1. 获取Hadoop安装路径

    [logan@hadoop101 hadoop-3.1.3]$ pwd
    /opt/module/hadoop-3.1.3

  2. 打开/etc/profile.d/my_env.sh文件

    sudo vim /etc/profile.d/my_env.sh

  3. 在profile文件末尾添加JDK路径:(shitf+g)

    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-3.1.3
    export PATH=PATH:HADOOP_HOME/bin
    export PATH=PATH:HADOOP_HOME/sbin

  4. 保存后退出:wq

  5. 分发环境变量文件sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh

  6. 各服务器上`source /etc/profile生效

Hadoop 核心配置

1)转到配置目录

复制代码
[logan@hadoop101 hadoop]$ cd /opt/module/hadoop-3.1.3/etc/hadoop

2)配置core-site 文件vim core-site.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- 指定 NameNode 的地址 -->
 <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop101:8020</value>
 </property>
 <!-- 指定 hadoop 数据的存储目录 -->
 <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-3.1.3/data</value>
 </property>
 <!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
 <property>
    <name>hadoop.http.staticuser.user</name>
    <value>logan</value>
 </property>
</configuration>

3)HDFS 配置文件vim hdfs-site.yml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
 <name>dfs.namenode.http-address</name>
 <value>hadoop101:9870</value>
</property>
<!-- 2nn web 端访问地址-->
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>hadoop103:9868</value>
 </property>
<property>
    <name>dfs.namenode.handler.count</name>
    <value>10</value>
</property>
</configuration>

4)配置yarn-site 文件vim yarn-site.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- 指定 MR 走 shuffle -->
 <property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
 </property>
 <!-- 指定 ResourceManager 的地址-->
 <property>
 <name>yarn.resourcemanager.hostname</name>
 <value>hadoop102</value>
 </property>
 <!-- 环境变量的继承 -->
 <property>
 <name>yarn.nodemanager.env-whitelist</name>
 
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
 </property>

5)MapReduce配置文件 vim mapred-site.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>
<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
</configuration>

6)配置 workers vim workers

复制代码
hadoop101
hadoop102
hadoop103

配置历史服务器

  1. 配置vim mapred-site.xml,在文件中新增如下内容

    <property> <name>mapreduce.jobhistory.address</name> <value>hadoop101:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop101:19888</value> </property>

配置日志聚集

注意:开启日志聚集功能,需要重启NodeManager、ResourceManager和 HistoryManager。

  1. 配置yarn-site.xml

    <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>http://hadoop101:19888/jobhistory/logs</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> </configuration>

分发 Hadoop

复制代码
[logan@hadoop101 hadoop]$ xsync /opt/module/hadoop-3.1.3/

群起集群

  1. 第一次启动集群,需要在hadoop101上格式化 NameNode(格式化之前需要停止所有 NameNode 和 DataNode进程,然后删除data 和 log 数据)hdfs namenode -format
  2. 启动 HDFS start-dfs.sh
  3. 启动 YARN start-yarn.sh
  4. Web 端查看 HDFS进行校验 http://hadoop101:9870
  5. Web端查看SecondaryNameNode http://hadoop103:9868

Hadoop 集群启动脚本

  1. vim 创建/home/logan/bin/hdp.sh脚本

    #!/bin/bash
    if [ # -lt 1 ] then echo "No Args Input..." exit ; fi case 1 in
    "start")
    echo " =================== 启动 hadoop集群 ==================="

    复制代码
         echo " --------------- 启动 hdfs ---------------"
         ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
         echo " --------------- 启动 yarn ---------------"
         ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
         echo " --------------- 启动 historyserver ---------------"
         ssh hadoop101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"

    ;;
    "stop")
    echo " =================== 关闭 hadoop集群 ==================="

    复制代码
         echo " --------------- 关闭 historyserver ---------------"
         ssh hadoop101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
         echo " --------------- 关闭 yarn ---------------"
         ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
         echo " --------------- 关闭 hdfs ---------------"
         ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"

    ;;
    *)
    echo "Input Args Error..."
    ;;
    esac

  2. 增加执行权限 chmod +x /home/logan/bin/hdp.sh

相关推荐
2501_943695336 小时前
高职大数据技术专业,怎么参与开源数据分析项目积累经验?
大数据·数据分析·开源
Dxy12393102167 小时前
别再让 ES 把你拖垮!5 个实战技巧让搜索性能提升 10 倍
大数据·elasticsearch·搜索引擎
2501_943695338 小时前
大专市场调查与统计分析专业,怎么辨别企业招聘的“画饼”岗位?
大数据
七夜zippoe8 小时前
CANN Runtime跨进程通信 共享设备上下文的IPC实现
大数据·cann
威胁猎人8 小时前
【黑产大数据】2025年全球电商业务欺诈风险研究报告
大数据
十月南城8 小时前
Hadoop基础认知——HDFS、YARN、MapReduce在现代体系中的位置与价值
hadoop·hdfs·mapreduce
L543414468 小时前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
证榜样呀8 小时前
2026 大专计算机专业必考证书推荐什么
大数据·前端
LLWZAI8 小时前
让朱雀AI检测无法判断的AI公众号文章,当创作者开始与算法「躲猫猫」
大数据·人工智能·深度学习
難釋懷8 小时前
分布式锁的原子性问题
分布式