《PySpark大数据分析实战》-02.了解Hadoop

news2024/12/26 21:16:37

📋 博主简介

  • 💖 作者简介:大家好,我是wux_labs。😜
    热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。
    通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP)、TiDB数据库认证SQL开发专家(PCSD)认证。
    通过了微软Azure开发人员、Azure数据工程师、Azure解决方案架构师专家认证。
    对大数据技术栈Hadoop、Hive、Spark、Kafka等有深入研究,对Databricks的使用有丰富的经验。
  • 📝 个人主页:wux_labs,如果您对我还算满意,请关注一下吧~🔥
  • 📝 个人社区:数据科学社区,如果您是数据科学爱好者,一起来交流吧~🔥
  • 🎉 请支持我:欢迎大家 点赞👍+收藏⭐️+吐槽📝,您的支持是我持续创作的动力~🔥

《PySpark大数据分析实战》-02.了解Hadoop

  • 《PySpark大数据分析实战》-02.了解Hadoop
    • 前言
    • 了解Hadoop
      • 分布式文件系统HDFS
      • 分布式计算框架MapReduce
      • 资源调度管理框架YARN
    • 结束语

《PySpark大数据分析实战》-02.了解Hadoop

前言

大家好!今天为大家分享的是《PySpark大数据分析实战》第1章第2节的内容:了解Hadoop。

了解Hadoop

2002年,Hadoop之父Doug Cutting和Mike Cafarella等人决定开创一个优化搜索引擎算法的平台,重新打造一个网络搜索引擎,于是一个可以运行的网页爬取工具和搜索引擎系统Nutch就面世了。Nutch项目是基于Doug Cutting的文本搜索系统Apache Lucene的,Nutch本身也是Lucene的一部分。后来,开发者认为Nutch的灵活性不够,不足以解决数十亿网页的搜索问题,刚好谷歌于2003年发表的关于GFS的论文以及GFS的架构可以解决他们对于网页爬取和索引过程中产生的超大文件的需求。2004年他们开始实现开源版本的Nutch分布式文件系统(NDFS)。2005年,Nutch的开发人员基于谷歌关于MapReduce的论文在Nutch上实现了一个MapReduce系统,并且将Nutch的主要算法全部移植,使用NDFS和MapReduce来运行。2006年,开发人员将NDFS和MapReduce移出Nutch形成一个Lucene的子项目,并用Doug Cutting的小孩的毛绒象玩具的名字Hadoop进行命名,至此,Hadoop便诞生了,其核心便是Hadoop分布式文件系统HDFS和分布式计算框架MapReduce,集群资源调度管理框架是YARN。

分布式文件系统HDFS

HDFS提供了在廉价服务器集群中进行大规模文件存储的能力,并且具有很好的容错能力,还能兼容廉价的硬件设备。HDFS采用了主从模型,一个HDFS集群包括一个NameNode和若干个DataNode,NameNode负责管理文件系统的命名空间和客户端对文件的访问,DataNode负责处理文件系统客户端的读写请求,在NameNode的统一调度下进行数据块(Block)的创建、删除、复制等操作。HDFS的容错能力体现在可以对数据块保存至少3份以上的副本数据,并且同时分布在相同机架和不同机架的节点上,即便一个数据块损坏,也可以从其他副本中恢复数据。HDFS的体系结构如图所示。

当客户端需要向HDFS写入文件的时候,首先需要跟NameNode进行通信,以确认可以写文件并获得接收文件的DataNode,然后客户端按顺序将文件按数据块逐个传递给DataNode,由接收到数据块的DataNode向其他DataNode复制指定副本数的数据块。HDFS文件的写入流程如图所示。

当客户端需要从HDFS读取文件的时候,客户端需要将文件的路径发送给NameNode,由NameNode返回文件的元数据信息给客户端,客户端根据元数据信息中的数据块号、数据块位置等找到相应的DataNode逐个获取文件的数据块并完成合并从而获得整个文件。从HDFS读取文件的流程如图所示。

分布式计算框架MapReduce

一个存储在HDFS的大规模数据集,会被切分成许多独立的小数据块,并分布在HDFS的不同的DataNode上,这些小数据块可以被MapReduce中的多个Map任务并行处理。MapReduce框架会为每个Map任务输入一个数据子集,通常是一个数据块,并且在数据块所在的DataNode节点上启动Map任务,Map任务生成的结果会继续作为Reduce任务的输入,最终由Reduce任务输出最后的结果到HDFS。MapReduce的设计理念是移动计算而不是移动数据,也就是说,数据在哪个节点就将在哪个节点上执行计算任务,而不是将一个节点的数据复制到另一个计算节点上,因为移动数据需要大量的网络传输开销,在大规模数据的环境下,这种开销太大,移动计算比移动数据要经济实惠。
使用MapReduce框架编程,简单实现一些接口就可以完成一个分布式程序,这个分布式程序就可以分布到大量廉价的PC机器运行。以经典的WordCount程序为例,统计一个文件中每个单词出现的次数,准备一个文本文件words.txt。文件内容如下:

Hello Python
Hello Spark You
Hello Python Spark
You know PySpark

Map任务对读取的文件进行单词拆分,StringTokenizer按照空格、制表符、换行符等将文本拆分成一个一个的单词,循环迭代对拆分的每个单词赋予初始计数为1,并将结果以键值对的形式组织用于Map任务的输出。Map任务的代码如下:

public class WordMapper extends
                Mapper<Object, Text, Text, IntWritable>{

  private final static IntWritable one = new IntWritable(1);
  private Text word = new Text();

  public void map(Object key, Text value, Context context
                  ) throws IOException, InterruptedException {
    StringTokenizer itr = new StringTokenizer(value.toString());
    while (itr.hasMoreTokens()) {
      word.set(itr.nextToken());
      context.write(word, one);
    }
  }
}

经过对Map输出的键值对按照键分组,相同键的数据在同一个分组。Reduce任务对分组后的数据进行迭代,取出Map任务中赋予的初始值1进行累加,最终得到单词出现的次数。Reduce任务代码如下:

public class WordReducer extends
                Reducer<Text,IntWritable,Text,IntWritable> {
  private IntWritable result = new IntWritable();

  public void reduce(Text key, Iterable<IntWritable> values,
                     Context context
                     ) throws IOException, InterruptedException {
    int sum = 0;
    for (IntWritable val : values) {
      sum += val.get();
    }
    result.set(sum);
    context.write(key, result);
  }
}

在主任务中,需要将Map任务和Reduce任务串联起来,并指定Map任务的输入文件和Reduce任务的输出,主任务代码如下:

public class WordCount {
  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "WordCount");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(WordMapper.class);
    job.setReducerClass(WordReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path("words.txt"));
    FileOutputFormat.setOutputPath(job, new Path("count"));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

将程序打包、提交运行,运行结束后在count目录下生成最终的结果,结果如下:

Hello 3
Python 2
Spark 2
You 2
know 1
PySpark 1

MapReduce的工作流程如图所示。

资源调度管理框架YARN

Hadoop的两个组件HDFS和MapReduce是由批量处理驱动的,JobTracker必须处理任务调度和资源管理,这容易导致资源利用率低或者作业失败等问题。由于数据处理是分批完成的,因此获得结果的等待时间通常会比较长。为了满足更快速、更准确的处理数据的需求,YARN诞生了。YARN代表的是Yet Another Resource Negotiator,最初被命名为MapReduce2,是Hadoop的主要组件之一,用于分配和管理资源。YARN整体上属于Master/Slave模型,采用3个主要组件来实现功能,第1个是ResourceManager,是整个集群资源的管理者,负责对整个集群资源进行管理;第2个是NodeManager,集群中的每个节点都运行着1个NodeManager,负责管理当前节点的资源,并向ResourceManager报告节点的资源信息、运行状态、健康信息等;第3个是ApplicationMaster,是用户应用生命周期的管理者,负责向ResourceManager申请资源并和NodeManager交互来执行和监控具体的Task。YARN不仅做资源管理,还提供作业调度,用户的应用在YARN中的执行过程如图所示。

:在YARN集群中,NodeManager定期向ResourceManager汇报节点的资源信息、任务运行状态、健康信息等。

1:客户端程序向ResourceManager提交应用并请求一个ApplicationMaster实例。

2:ResourceManager根据集群的资源情况,找到一个可用的节点,在节点上启动一个Container,在Container中启动ApplicationMaster。

3:ApplicationMaster启动之后,反向向ResourceManager进行注册,注册之后客户端通过ResourceManager就可以获得ApplicationMaster的信息。

4:ResourceManager根据客户端提交的应用的情况,为ApplicationMaster分配Container。

5:Container分配成功并启动后,可以与ApplicationMaster交互,ApplicationMaster可以检查它们的状态,并分配Task,Container运行Task并把运行进度、状态等信息汇报给ApplicationMaster。

6:在应用程序运行期间,客户端可以和ApplicationMaster交流获得应用的运行状态、进度信息等。

7:一旦应用程序执行完成,ApplicationMaster向ResourceManager取消注册然后关闭,ResourceManager会通知NodeManager进行Container资源的回收、日志清理等。

结束语

好了,感谢大家的关注,今天就分享到这里了,更多详细内容,请阅读原书或持续关注专栏。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PC 机与单片机通信(RS232 协议)

PC 机与单片机通信(RS232 协议) 目录&#xff1a; 1、单片机串口通信的应用 2、PC控制单片机IO口输出 3、单片机控制实训指导及综合应用实例 4、单片机给计算机发送数据&#xff1a; [实验任务] 单片机串口通信的应用&#xff0c;通过串口&#xff0c;我们的个人电脑和单…

智能优化算法应用:基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阴阳对算法4.实验参数设定5.算法结果6.参考文…

搜集怎么绘制三维曲线和曲面?

1、针对函数对象是单一变量、两个函数的情况。用plot3函数&#xff1b;&#xff08;三维曲线&#xff09; 看一下matlab官方的例子&#xff1a; t 0:pi/50:10*pi; st sin(t); ct cos(t); plot3(st,ct,t) 绘制出来的曲线&#xff1a; 几个比较关键的点&#xff1a; &…

手把手教你玩转ESP8266(原理+驱动)

在嵌入式开发中&#xff0c;无线通信的方式有很多&#xff0c;其中 WIFI 是绕不开的话题。说到 WIFI 通信&#xff0c;就不得不提 ESP8266了。 ESP8266 是一款高性能的 WIFI 串口模块&#xff0c;实现透明传输。只要有一定的串口知识&#xff0c;不需要知道 WIFI 原理就可以上…

数据结构:第13关:查找两个单词链表共同后缀的起始结点

任务描述编程要求 输入输出测试说明来源 任务描述 本关任务&#xff1a;假定采用带头结点的单链表保存单词&#xff0c;当两个单词有相同的后缀时&#xff0c;则可共享相同的后缀空间。 例如&#xff0c;“loading”和“being”的存储映像如下图所示&#xff1a; 设str1和str2…

论文阅读《Domain Generalized Stereo Matching via Hierarchical Visual Transformation》

论文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/html/Chang_Domain_Generalized_Stereo_Matching_via_Hierarchical_Visual_Transformation_CVPR_2023_paper.html 概述 立体匹配模型是近年来的研究热点。但是&#xff0c;现有的方法过分依赖特定数据集上…

使用 PyTorch FSDP 微调 Llama 2 70B

通过本文&#xff0c;你将了解如何使用 PyTorch FSDP 及相关最佳实践微调 Llama 2 70B。在此过程中&#xff0c;我们主要会用到 Hugging Face Transformers、Accelerate 和 TRL 库。我们还将展示如何在 SLURM 中使用 Accelerate。 完全分片数据并行 (Fully Sharded Data Paral…

游戏中小地图的制作__unity基础开发教程

小地图的制作 Icon标识制作制作摄像机映射创建地图UI效果“不一样的效果” 在游戏中经常可以看到地图视角的存在&#xff0c;那么地图视角是如何让实现的呢&#xff1f; 这一期教大家制作一个简易的小地图。 &#x1f496;点关注&#xff0c;不迷路。 老样子&#xff0c;我们还…

使用MfgTool烧写前需准备的文件

一. 简介 本文我们就来学习&#xff0c;如何将我们编译的 uboot&#xff0c;zImage&#xff08;内核镜像&#xff09;&#xff0c;xxx.dtb设备树文件&#xff0c;还有制作的根文件系统&#xff0c;这四个文件烧写到开发板中&#xff0c;最后 开发板能正常启动。 本文这里使用…

Linux实用操作篇-下篇

Linux实用操作篇-上篇&#xff1a;Linux实用操作-上篇-CSDN博客 一、网络传输 1.1 ping命令 网络是否可联通 可以通过ping命令&#xff0c;检查指定的网络服务器是否是可联通状态 语法: ping [-c num] ip或主机名 选项&#xff1a;-c&#xff0c;检查的次数&#xff0c;…

# 一些视觉-激光、加速度传感器类的铣削振动测试方法案例

一些视觉-激光类的铣削振动测试方法 1. 基于激光测振仪的振动测试2. 切削加工的 加速度传感器实测信号2.1 x轴向信号2.2 Y轴向信号2.3 第二次廊坊实验3. 关于数值频域积分1. 基于激光测振仪的振动测试 【1】舜宇LDV|激光测振—机床铣刀寿命预测 新刀具为100hz主频 旧刀具为800…

多源异构数据融合是什么,在进行故障预测、诊断、辨识的时候有什么有优点和缺点!

文章目录 1、多源异构数据融合是什么2、多源异构数据融合的优点主要包括&#xff1a;3、多源异构数据融合进行故障辨识的缺点 1、多源异构数据融合是什么 多源异构数据融合是将来自于不同设备、传感器、系统或网络等多个数据源的数据进行整合并综合分析处理的一种技术。这种数…

AcWing 95. 费解的开关(递推)

题目链接 活动 - AcWing 本活动组织刷《算法竞赛进阶指南》&#xff0c;系统学习各种编程算法。主要面向有一定编程基础的同学。https://www.acwing.com/problem/content/97/ 题解 只要第一行开关的状态确定&#xff0c;则所有开关的状态都可以被推出来。第一行开关总共有种操…

了解 git rebase

了解 git rebase 大多数人习惯使用 git merge 将更改从功能分支合并到主分支&#xff0c;但还有其他方法。我们是否曾经遇到过 git rebase 这个术语并想知道它是什么&#xff1f;或者我们可能听说过 rebase 和 merge &#xff0c;但不确定何时使用哪个&#xff1f;不用担心&am…

Axure的安装及基本功能介绍

目录 一. Axure概述 二. Axure安装 2.1 安装包下载 2.2 安装步骤 三. Axure功能介绍​ 3.1 工具栏介绍 3.1.1 复制&#xff0c;剪切及粘贴 3.1.2 选择模式和连接 3.1.3 插入形状 3.1.4 点&#xff08;编辑控点&#xff09; 3.1.5 置顶和置底 3.1.6 组合和取消组合 …

论文笔记:A review on multi-label learning

一、介绍 传统的监督学习是单标签学习&#xff0c;但是现实中一个实例可能对应多个标签。这篇文章介绍了多标签分类的定义和评价指标、多标签学习的算法还有其他相关的任务。 二、问题相关定义 2.1 多标签学习任务 假设 X R d X R^d XRd&#xff0c;表示d维的输入空间&am…

LabVIEW开发矿井排水监控系统

LabVIEW开发矿井排水监控系统 针对矿井水害对煤矿安全生产构成的威胁&#xff0c;设计了一种基于嵌入式PLC和LabVIEW的矿井排水监控系统。该系统结合了PLC的可靠控制与单片机的应用灵活性&#xff0c;有效克服了传统排水方法中的不足&#xff0c;如测量不准确、效率低下等问题…

Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现

0x01 产品简介 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中&#xff0c;针对网络流量的信息进行日志留存&#xff0c;可对用户上网行为进行审计&#xff0c;逐渐形成大数据采集、 大数据分析、 大数据整合的工作模式…

PairLIE论文阅读笔记

PairLIE论文阅读笔记 论文为2023CVPR的Learning a Simple Low-light Image Enhancer from Paired Low-light Instances.论文链接如下&#xff1a; openaccess.thecvf.com/content/CVPR2023/papers/Fu_Learning_a_Simple_Low-Light_Image_Enhancer_From_Paired_Low-Light_Instan…

IO函数及应用

1.实现登录功能。自定义- -个usr.txt,手动输入账户密码&#xff0c;格式如下:账户密码 例如: zhangsan 12345 lisi abcde wangwu abc123 需求如下: a.从终端获取账户密码&#xff0c;与文件中的账户密码比较 b.若终端输入的账户不存在&#xff0c;则输出账户不存在 c.若终端输入…