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
  1. 重复在 hadoop102 上生成公钥和私钥,并进行拷贝
  2. 重复在 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 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103
doecho ==================== $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:$pdirelseecho $file does not exists!fidone
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
  1. 使用 sftp 上传或者下载 jdk1.8
  2. 解压jdk 文件
[logan@hadoop101 module]tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
  1. 配置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
  1. 刷新环境变量source /etc/profile
  2. 检查Java 是否正常安装java -version
  3. 分发 JDK xsync /opt/module/jdk1.8.0_212/
  4. 更新 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
  1. 打开/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
  1. 在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
  1. 保存后退出:wq
  2. 分发环境变量文件sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh
  3. 各服务器上`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>
<!-- 历史服务器 web 端地址 -->
<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>
<!-- 设置日志保留时间为 7 天 -->
<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 ]
thenecho "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
  1. 增加执行权限 chmod +x /home/logan/bin/hdp.sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/232274.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java SSM框架+Vue实现病人跟踪治疗信息系统项目【项目源码+论文说明】

基于java的SSM框架Vue实现病人跟踪治疗信息系统演示 摘要 病人跟踪治疗信息管理系统采用B/S模式&#xff0c;促进了病人跟踪治疗信息管理系统的安全、快捷、高效的发展。传统的管理模式还处于手工处理阶段&#xff0c;管理效率极低&#xff0c;随着病人的不断增多&#xff0c;…

SpringCloud原理】OpenFeign之FeignClient动态代理生成原理

大家好&#xff0c;前面我已经剖析了OpenFeign的动态代理生成原理和Ribbon的运行原理&#xff0c;这篇文章来继续剖析SpringCloud组件原理&#xff0c;来看一看OpenFeign是如何基于Ribbon来实现负载均衡的&#xff0c;两组件是如何协同工作的。 一、Feign动态代理调用实现rpc流…

Apache Flink(三):Flink核心特性及应用场景

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

分享几种 Java8 中通过 Stream 对列表进行去重的方法

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 1. Stream 的 distinct…

Python生产、消费Kafka

如果想通过docker安装kafka&#xff0c;可参考 Docker安装Kafka 生产者 import json import time import tracebackfrom datetime import datetime from kafka import KafkaProducer from kafka.errors import kafka_errorsproducer KafkaProducer(bootstrap_servers[localho…

[论文阅读]CT3D——逐通道transformer改进3D目标检测

CT3D 论文网址&#xff1a;CT3D 论文代码&#xff1a;CT3D 简读论文 本篇论文提出了一个新的两阶段3D目标检测框架CT3D,主要的创新点和方法总结如下: 创新点: (1) 提出了一种通道注意力解码模块,可以进行全局和局部通道聚合,生成更有效的解码权重。 (2) 提出了建议到点嵌…

C++ AVL 树

AVL树的概念 当数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;此时二叉搜索树的搜索效率低下 解决方法&#xff1a;AVL树&#xff08;降低树的高度&#xff0c;从而减少平均搜索长度) 一棵AVL树或者是空树&#xff0c;或者是具有以下性质的二叉搜索树&#xff1…

webpack如何处理浏览器的样式兼容问题postcss

一、准备工作 css/index.css添加样式 .word {color: red;user-select: none; } 为了兼容不同的浏览器我们需要添加前缀比如&#xff1a; -webkit-user-select: none; 这个工作可以通过postcss的插件postcss-preset-env处理 二、安装依赖 pnpm i -D postcss postcss-loader…

BatchOutput PDF for Mac(PDF 批量处理软件)

BatchOutput PDF是一款适用于 Mac 的 PDF 批量处理软件。它可以帮助用户将多个 PDF 文件进行异步处理&#xff0c;提高工作效率。 BatchOutput PDF 可以自动化执行许多任务&#xff0c;包括 PDF 文件的打印、转换、分割、压缩、加密、重命名等&#xff0c;而且它还可以将自定义…

《数据结构、算法与应用C++语言描述》-优先级队列-大根堆的C++实现

优先级队列 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_25Priority queue 定义 优先级队列&#xff08;priority queue&#xff09;是0个或多个元素的集合&#xff0c;每个元素都有一个优先权或值&#xff0c;对优先级队列执行…

Web安全漏洞分析-XSS(上)

随着互联网的迅猛发展&#xff0c;Web应用的普及程度也愈发广泛。然而&#xff0c;随之而来的是各种安全威胁的不断涌现&#xff0c;其中最为常见而危险的之一就是跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;。XSS攻击一直以来都是Web安全领…

android开发:用IDEA建立你的第一个APP

主要是记录一下各种小坑。 IDEA目前是第一流行的java开发工具&#xff0c;同时也支持android开发&#xff0c;可以替代安卓官方的andriod studio&#xff0c;不过仍然要依赖android sdk。 本例指导你完成第一个app&#xff0c;需要一台Windows PC和一部android手机。 目录 一…