【Hadoop】

Hadoop是一个开源的分布式离线数据处理框架,底层是用Java语言编写的,包含了HDFS、MapReduce、Yarn三大部分。

组件配置文件启动进程备注
Hadoop HDFS需修改需启动
NameNode(NN)作为主节点
DataNode(DN)作为从节点
SecondaryNameNode(SNN)主节点辅助
分布式文件系统
Hadoop YARN需修改需启动
ResourceManager(RM)作为集群资源管理者
NodeManager(NM)作为单机资源管理者
ProxyServer代理服务器提供安全性
JobHistoryServer历史服务器记录历史信息和日志
分布式资源调度
Hadoop MapReduce需修改无需启动任何进程
MapReduce程序运行在YARN容器内
分布式数据计算

Hadoop集群 = HDFS集群 + YARN集群
图中是三台服务器,每个服务器上运行相应的JAVA进程
在这里插入图片描述

HDFS集群对应的web UI界面:http://namenode_host:9870(namenode_host是namenode运行所在服务器的ip地址)
YARN集群对应的web UI界面:http://resourcemanager_host:8088(resourcemanager_host是resourcemanager运行所在服务器的ip地址)

在这里插入图片描述


一、HDFS

1.1 HDFS简介

  • HDFS的全称为Hadoop Distributed File System,是用来解决大数据存储问题的,分布式说明其是横跨多台服务器上的存储系统
  • HDFS使用多台服务器存储文件,提供统一的访问接口,使用户像访问一个普通文件系统一样使用分布式文件系统
  • HDFS集群搭建完成后有个抽象统一的目录树,可以向其中放入文件,底层实际是分块存储(物理上真的拆分成多个文件,默认128M拆分成一块)在HDFS集群的多个服务器上,具体位置是在hadoop的配置文件中所指定的
  • HDFS只支持对文件进行移动,读取、删除、追加操作,不支持任意修改文件。(一次写入,多次读取。只能追加,不能修改。)

1.2 HDFS shell命令行

  • 命令行界面(command-line interface,缩写:cli),指用户通过指令进行交互
  • Hadoop操作文件系统shell命令行语法:hadoop fs [generic options]
  • 大部分命令与linux相同
hadoop fs -ls file:///  # 操作本地文件系统
hadoop fs -ls hdfs://node1:8020/ # 操作HDFS文件系统,node1:8020是NameNode运行所在的机器和端口号
hadoop fs -ls / #直接根目录,没有指定则默认加载读取环境变量中fs.defaultFS的值,作为要读取的文件系统

上传文件到HDFS指定目录下

hadoop fs -put [-f] [-p] <localsrc> <dst>
# 将本地文件传到HDFS文件系统中
# -f 覆盖目标文件
# -p 保留访问和修改时间,所有权和权限
# <localsrc>本地文件系统中的文件(客户端所在机器),<dst>HDFS文件系统的目录

下载HDFS文件

hadoop fs -get [-f] [-p] <src> <localdst>
# 将本地文件传到HDFS文件系统中
# -f 覆盖目标文件
# -p 保留访问和修改时间,所有权和权限
# <src>HDFS文件系统中的文件,<localdst>本地文件系统的目录

追加数据到HDFS文件中

hadoop fs -appendToFile <localsrc>...<dst>
# <localsrc>本地文件系统中的文件,<dst>HDFS文件系统的文件(没有文件则自动创建)
# 该命令可以用于小文件合并

1.3 HDFS架构

HDFS包含3个进程NameNode、DataNode、SecondaryNameNode
(都是Java进程,可以在服务器上运行jps查看正在执行的java进程)

HDFS是主从模式(Master - Slaves),基础架构如下:
在这里插入图片描述

  • NameNode: 维护和管理文件系统元数据,包括HDFS目录树结构,文件和块的存储位置、大小、访问权限等信息。NameNode是访问HDFS的唯一入口
  • DataNode: 负责具体的数据块存储,定期向NameNode汇报心跳(默认每10分钟)信息
  • SecondNameNode: 是NameNode的辅助节点,但不能替代NameNode。主要是进行元数据文件(FsImage和EditsLog)的合并并推送给NameNode。
  • NameNode不持久化存储每个文件中各个块所在的DataNode的位置信息,这些信息在系统启动时从DataNode重建
  • NameNode是Hadoop集群中的单点故障
  • NameNode所在机器通常配置大内存(RAM),因为元数据都存在内存中,定时进行持久化存到磁盘中。
  • DataNode所在机器通常配置大硬盘空间,因为数据存在DataNode中

HDFS集群部署举例:
node1、node2、node3表示三台服务器,形成一个集群:
在这里插入图片描述
node1服务器性能比较高,因此在node1上运行三个进程:NameNode、DataNode、SecondaryNameNode
在node2及node3上只运行DataNode进程

1.4 HDFS写数据流程

在这里插入图片描述

  1. HDFS客户端创建对象实例DistributeFileSystem(Java类的对象),该对象中封装了与HDFS文件系统操作的相关方法。
  2. 调用DistributeFileSystem对象的create()方法,通过RPC请求NameNode创建文件,NameNode执行各种检查判断:目标文件是否存在,客户端是否有权限等。检查通过后返回FSDataOutputStream输出流对象给客户端用于写数据。
  3. 客户端用FSDataOutputStream开始写数据
  4. 客户端写入数据时,将数据分成一个个数据包(packet 默认64k),内部组件DataStreamer请求NameNode挑选出适合存储数据副本的一组DataNode地址,默认是3副本存储(即3个DataNode)。DataStreamer将数据包流式传输(每一个packet 64k传输一次)到pipeline的第一个DataNode,第一个DataNode存储数据后传给第二个DataNode,第二个DataNode存储数据后传给第三个DataNode。
  5. 传输的反方向上,会通过ACK机制校验数据包传输是否成功
  6. 客户端完成数据写入后,在FSDataOutputStream输出流上调用close()方法关闭。
  7. DistributeFileSystem告诉NameNode文件写入完成。

二、Yarn

2.1 Yarn简介

Yarn是一个通用资源管理系统调度平台,可为上层应用提供统一的资源管理和调度。

通用: 不仅支持MapReduce程序,理论上支持各种计算程序,YARN只负责分配资源,不关心用资源干什么。
资源管理系统: 集群的硬件资源,和程序运行相关,比如内存、cpu
调度平台: 多个程序同时申请计算资源如何分配,调度的规则

2.2 Yarn架构

Yarn与HDFS一样,也是主从模式,包含以下4个进程

  • ResourceManager:管理整个群集的资源,负责协调调度各个程序所需的资源。(申请资源必须找RM)
  • NodeManager:管理单个服务器的资源,负责调度单个服务器上的资源提供给应用程序使用。

NodeManager通过创建Container容器来分配服务器上的资源
应用程序运行在NodeManager所创建的容器中。
一个服务器上可以创建多个Container容器,各Container容器之间相互独立,实现了一个服务器上跑多个程序。
Container容器是具体运行 Task(如 MapTask、ReduceTask)的基本单位。
一个NodeManager上会运行多个Container。

  • ProxyServer代理服务器: ProxyServer默认继承在ResourceManager中,可以通过配置分离出来单独启动,可以提高YARN在开放网络中的安全性。
  • JobHistoryServer历史服务器: 记录历史程序运行信息和日志,开放web ui提供用户通过网页访问日志。

YARN架构图:
在这里插入图片描述
ApplicationMaster(App Mstr): 应用程序内的“老大”,负责程序内部各阶段的资源申请,管理整个应用。(当YARN上没有程序运行,则没有这个组件)

一个应用程序对应一个ApplicationMaster。
ApplicationMaster 运行在 Container 中,是应用程序的第一个Container,之后会请求ResourceManager要更多的Container,来运行应用的各个任务(比如 MapTask、ReduceTask)。
YARN 中运行的每个应用程序都有一个自己独立的 ApplicationMaster。(以MapReduce为例,其中的MRAppMaster就是对应的具体实现,管理整个MapReduce程序)

YARN集群部署举例:
node1、node2、node3表示三台服务器,形成一个集群:
在这里插入图片描述
node1性能高,因此在node1上运行四个进程:ResourceManager、NodeManager、ProxyServer、JobHistoryServer
在node2及node3上只运行NodeManager进程

2.3 Yarn调度器和调度算法

Hadoop作业调度器主要有三种:FIFO Scheduler(先进先出调度器)、Capacity Scheduler(容量调度器)和Fair Scheduler(公平调度器)
Apache Hadoop 3.1.3默认的资源调度器是CapacityScheduler。

  • FIFO Scheduler:单队列,根据提交作业的先后顺序,依次执行
  • Capacity Scheduler:多队列,每个队列配置一定的资源,每个队列内部采用FIFO策略
  • Fair Scheduler:资源在每个用户之间公平共享,充分利用资源
  • 在这里插入图片描述

三、MapReduce

MapReduce只能用来做离线计算,不能做实时计算。
MapReduce程序在运行时有三类进程:

  • MRAppMaster:负责整个MR程序的过程调度及状态协调
  • MapTask: 负责map阶段的整个数据处理流程
  • ReduceTask: 负责reduce阶段的整个数据处理流程,一个ReduceTask输出一个文件,多个ReduceTask则会输出多个文件
  1. 在一个MR程序中MRAppMaster只有一个,MapTask和ReduceTask可以有一个也可以有多个
  2. 在一个MR程序中只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段
  3. 在整个MR程序中,数据都是以kv键值对的形式流转

MapReduce整体执行流程图:
左边是maptask,右边是reducetask,红框里是shuffle过程(shuffle包含了map和reduce)
在这里插入图片描述

2.1 map阶段执行过程(2次排序,溢出之前进行排序(快速排序),所有溢出文件合并后排序(归并排序))

  • 第一阶段: 把所要处理的文件进行逻辑切片(默认是每128M一个切片),每一个切片由一个MapTask处理。

hdfs中文件存储的block默认也是128M,是物理切片,真的将文件拆开
mapreduce的切片是逻辑切片,并不会将文件拆开
例如mapreduce设置切片为100M,一个文件512M,HDFS上存储为4个block,逻辑切片为6个,开启6个MapTask执行计算

  • 第二阶段: 按行读取切片中的数据,返回<key,value>对,key对应行数,value是本行的文本内容
  • 第三阶段: 调用Mapper类中的map方法处理数据,每读取解析出来一个<key,value>,调用一次map方法
  • 第四阶段(默认不分区): 对map输出的<key,value>对进行分区partition。默认不分区,因为只有一个reducetask,分区的数量就是reducetask运行的数量。
  • 第五阶段: Map输出数据写入内存缓冲区,达到比例溢出到磁盘上。溢出spill之前会根据key按照字典序(a~z)对每个溢出文件内部进行排序sort(这一步会溢出很多排序好的小文件)
  • 第六阶段: 对所有溢出的文件进行最终的merge合并,合并后再次排序,形成一个文件(即确保一个maptask只输出一个文件)

2.2 reduce阶段执行过程(1次排序,所有maptask输出的文件合并后进行排序(归并排序))

  • 第一阶段: ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据
  • 第二阶段: 把拉取来的数据,全部进行合并merge,即把分散的数据合并成一个大的数据,再对合并后的数据进行排序
  • 第三阶段: 对排序后的<key,value>调用reduce方法,key相同<key,value>调用一次reduce方法。最后把输出的键值对写入到HDFS中

2.3 shuffle机制

  • shuffle指的是将map端的无规则输出变成具有一定规则的数据,便于reduce端接收处理。
  • 一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称为Shuffle
  • Shuffle过程是横跨map和reduce两个阶段的,分别称为Map端的ShuffleReduce端的Shuffle
  • Shuffle中频繁涉及到数据在内存、磁盘之间的多次往复,是导致mapreduce计算慢的原因
  • 分组、排序、Combiner、分组

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

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

相关文章

C# 图解教程 第5版 —— 第18章 泛型

文章目录 18.1 什么是泛型18.2 C# 中的泛型18.3 泛型类18.3.1 声明泛型类18.3.2 创建构造类型18.3.3 创建变量和实例18.3.4 使用泛型的示例18.3.5 比较泛型和非泛型栈 18.4 类型参数的约束18.4.1 Where 子句18.4.2 约束类型和次序 18.5 泛型方法18.5.1 声明泛型方法18.5.2 调用…

c++ qt 窗口开发中 俩按钮组合 配合 显影 已解决

在日常项目中&#xff0c;有这么需求&#xff0c;还想窗口移动&#xff0c;还想 右侧关闭 还能tab栏点击显影的需求&#xff0c;不得使用 qt模拟点击事件 进行功能优化 特大杯 大杯 控制 窗口显影&#xff0c; 咖啡 按钮 显示窗口 可乐 豆浆 不显示窗口 四个按钮的 互斥关…

【网络安全】-Linux操作系统—操作系统发展历史与Linux

文章目录 操作系统发展历史初期的操作系统分时操作系统个人计算机操作系统 Linux的诞生UNIX与GNU项目Linux内核的创建 Linux的特点开放源代码多样性社区支持 Linux的应用服务器和超级计算机嵌入式系统桌面系统 总结 操作系统发展历史 操作系统&#xff08;Operating System&am…

YOLOv5改进 | 2023 | CARAFE提高精度的上采样方法(助力细节长点)

一、本文介绍 本文给大家带来的CARAFE&#xff08;Content-Aware ReAssembly of FEatures&#xff09;是一种用于增强卷积神经网络特征图的上采样方法。其主要旨在改进传统的上采样方法&#xff08;就是我们的Upsample&#xff09;的性能。CARAFE的核心思想是&#xff1a;使用…

饥荒Mod 开发(十一):修改物品堆叠

饥荒Mod 开发(十)&#xff1a;制作一把AOE武器 饥荒Mod 开发(十二)&#xff1a;一键制作 饥荒中物品栏有限&#xff0c;要拾取的物品有很多&#xff0c;经常装不下要忍痛丢掉各种东西&#xff0c;即使可以将物品放在仓库但是使用不方便&#xff0c;所以可以将物品的堆叠个数设…

17.Oracle中instr()函数查询字符位置

1、instr()函数的格式 &#xff08;俗称&#xff1a;字符查找函数&#xff09; 格式一&#xff1a;instr( string1, string2 ) // instr(源字符串, 目标字符串) 格式二&#xff1a;instr( string1, string2 [, start_position [, nth_appearance ] ] ) // instr(源字符…

软件开发人员,参加各种行业技术大会有意义么?

参加行业技术大会对于软件开发人员来说&#xff0c;是一个获取新知识、拓展视野、结交同行的宝贵机会。 1、知识更新&#xff1a;技术大会通常涵盖最新的技术趋势和工具。对于软件开发人员来说&#xff0c;这是了解新技术并将其应用到日常工作中的好机会。 2、拓宽视野&#x…

springMVC-@RequestMapping

基本介绍 RequestMapping注解可以指定控制器/处理器的某个方法的请求的url, 示例 &#xff08;结合springMVC基本原理理解&#xff09; Controller public class UserHandler {RequestMapping(value "/login")public String login() {System.out.println("登…

【数据结构】八大排序之直接插入排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 一.直接插入排序简介及思路 直接插入排序(Straight Insertion Sort)是一种简单直观的插入排序算法. 它的基本操作是: 将一个数据插入到已经排好的有序表中,从而得到一个新的,数…

LED恒流调节器FP7125,应用LED街道照明、调光电源、汽车大灯、T5T8日光灯

目录 一、FP7125概述 二、FP7125功能 三、应用领域 近年来&#xff0c;随着人们环保意识的不断增强&#xff0c;LED照明产品逐渐成为照明行业的主流。而作为LED照明产品中的重要配件&#xff0c;LED恒流调节器FP7125的出现为LED照明带来了全新的发展机遇。 一、FP7125概述 FP…

Re58:读论文 REALM: Retrieval-Augmented Language Model Pre-Training

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称&#xff1a;REALM: Retrieval-Augmented Language Model Pre-Training 模型名称&#xff1a;Retrieval-Augmented Language Model pre-training (REALM) 本文是2020年ICML论文&#xff0c;作者来自…

ElasticSearch学习篇8_Lucene之数据存储(Stored Field、DocValue、BKD Tree)

前言 Lucene全文检索主要分为索引、搜索两个过程&#xff0c;对于索引过程就是将文档磁盘存储然后按照指定格式构建索引文件&#xff0c;其中涉及数据存储一些压缩、数据结构设计还是很巧妙的&#xff0c;下面主要记录学习过程中的StoredField、DocValue以及磁盘BKD Tree的一些…

C语言函数

写一个函数将数组的全部内容变成 -1 #include<iostream> using namespace std;void print1_arr(int arr[10], int sz1) {for (int i 0; i < sz1; i){printf("%d ", arr[i]);}printf("\n"); }void print2_arr(int arr[10], int sz1) {for (int…

在 linux上运行 Scratch,找到了更github 的项目地址,而且找到了scratch的官方项目。

1&#xff0c;关于Scratch Scratch 是麻省理工学院的“终身幼儿园团队”发布的一种图形化编程工具&#xff0c; 主要面对全球青少年开放&#xff0c;所有人都可以在软件中创作自己的程序。 2&#xff0c;在linux 上面还真有个默认的 scratch 版本 但是太老旧了。 于是找了下…

UART协议——FPGA代码篇

一.串口&#xff08;UART&#xff09;协议简介 UART 串口通信有几个重要的参数&#xff0c;分别是波特率、起始位、数据位、停止位和奇偶检验位&#xff0c;对于两个使用UART 串口通信的端口&#xff0c;这些参数必须匹配&#xff0c;否则通 起始位&#xff1a;表示数据传输的开…

大数据机器学习与深度学习—— 生成对抗网络(GAN)

GAN概述 在讲GAN之前&#xff0c;先讲一个小趣事&#xff0c;你知道GAN是怎么被发明的吗&#xff1f;据Ian Goodfellow自己说&#xff1a; 之前他一直在研究生成模型&#xff0c;可能是一时兴起&#xff0c;有一天他在酒吧喝酒时&#xff0c;在酒吧里跟朋友讨论起生成模型。然…

【网络安全】-Linux操作系统—CentOS安装、配置

文章目录 准备工作下载CentOS创建启动盘确保硬件兼容 安装CentOS启动安装程序分区硬盘网络和主机名设置开始安装完成安装 初次登录和配置更新系统安装额外的软件仓库安装网络工具配置防火墙设置SELinux安装文本编辑器配置SSH服务 总结 CentOS是一个基于Red Hat Enterprise Linu…

和鲸科技CEO范向伟受邀出席港航数据要素流通与生态合作研讨会,谈数据资产入表的战略机会

近日&#xff0c;由上海虹口数字航运创新中心、龙船&#xff08;北京&#xff09;科技有限公司&#xff08;下简称“龙船科技”&#xff09;、华东江苏大数据交易中心联合举办的“港航数据要素流通与生态合作研讨会”圆满落幕&#xff0c;来自港航领域的近百名企业代表共同参与…

Spring 原理(一)

Spring 原理 它是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点 轻量级控制反转面向切面容器框架集合 Spring 核心组件 Spring 常用模块 Spring 主要包 Spring 常用注解 bean …

软件测试职业规划

软件测试人员的发展误区【4】 公司开发的产品专业性较强&#xff0c;软件测试人员需要有很强的专业知识&#xff0c;现在软件测试人员发展出现了一种测试管理者不愿意看到的景象&#xff1a; 1、开发技术较强的软件测试人员转向了软件开发(非测试工具开发)&#xff1b; 2、业务…