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

📋 博主简介

  • 💖 作者简介:大家好,我是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.mfbz.cn/a/237497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter:web项目跨域问题解决

前后端解决系列 文章目录 一、Flutter web客户端解决本地环境调试跨域问题二、Flutter web客户端解决线上环境跨域问题 一、Flutter web客户端解决本地环境调试跨域问题 就一句命令【--web-browser-flag "--disable-web-security"】&#xff0c;用来屏蔽浏览器域名请…

axios 基础的 一次封装 二次封装

一、平常axios的请求发送方式 修改起来麻烦的一批 代码一大串 二、axios的一次封装 我们会在src/utils创建一个request.js的文件来存放我们的基地址与拦截器 /* 封装axios用于发送请求 */ import axios from axios/* (1)request 相当于 Axios 的实例对象 (2)为什么要有reque…

件夹和文件比较软件VisualDiffer mac功能介绍

VisualDiffer mac是一款运行在MacOS上的文件夹和文件快速比较工具。VisualDiffer可以对不同文件夹中文件或文档做出比较或者比较两个文件的路径。还可以通过UNIS diff命令快速、标准和可靠的比较出各类不同的文件夹和文件结果&#xff0c;使用不同的颜色直观地显示。 VisualDif…

西南科技大学数字电子技术实验四(基本触发器逻辑功能测试及FPGA的实现)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) (1)D触发器 特征方程: Q…

事务的四个特性、四个隔离级别以及数据库的常用锁

事务的四个特性、四个隔离级别以及数据库的常用锁 四大特性 事务的四大特性&#xff0c;通常被称为ACID特性&#xff0c;是数据库管理系统&#xff08;DBMS&#xff09;确保事务处理的关键属性。这四大特性分别是&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#x…

微服务-理论 分布式事务

一、分布式事务理论模型 分布式事务问题也叫分布式数据一致性问题&#xff0c;简单来说就是如何在分布式场景中保证多个节点数据的一致性。分布式事务产生的核心原因在于存储资源的分布性&#xff0c;比如多个数据库&#xff0c;或者MySQL和Redis两种不同存储设备的数据一致性…

安装ThingBox Eclipse Plugin

1. ChatGPT问 The latest version of the ThingBox Eclipse Plugin requires Eclipse IDE 2021-06 or later. 2. PTC官网下载 MED-61378-CD-092_F000_Eclipse-Plugin-9-0-1.zip文件, 和 MED-61098-CD-085_F000_ThingWorx-Extension-SDK-8-5-0&#xff08;需要账号&#xff09…

04-Nacos中负载均衡规则的配置

负载均衡规则 同集群优先 默认的ZoneAvoidanceRule实现并不能根据同集群优先的规则来实现负载均衡,Nacos中提供了一个实现叫NacosRule可以优先从同集群中挑选服务实例 当服务消费者在本地集群找不到服务提供者时也会去其他集群中寻找,但此时会在服务消费者的控制台报警告 第…

day33-37-SpringBootV12(整合Spring,SpringMVC,Mybatis,日志,api测试等框架)

ssm spring --> applicationContext.xml配置文件 springmvc --> springmvc.xml配置文件 mybatis —> mybatis-config.xml配置文件 —> springboot优化了之前的框架配置,思想是约定大于配置 一、引言 1.1 初始化配置 为了使用SSM框架去开发&#xff0c;准备SSM…

mysql数据库学习笔记(1)

今天开始学mysql数据库&#xff0c;为什么要学这个呢&#xff0c;因为数据库可结构化存储大量的数据信息&#xff0c;方便用户进行有效的检索和访问。数据库可有效地保持数据信息的一致性、完整性、降低数据冗余。数据库可满足应用的共享和安全方面的要求&#xff0c;把数据放在…

WPF仿网易云搭建笔记(4):信息流控制之消息订阅

文章目录 专栏和Gitee仓库前言消息订阅最简单的案例简单用例父组件订阅子组件回调 结果 消息订阅机制消息token是A还是B?传递消息的载体。双重token重复订阅问题 结论 专栏和Gitee仓库 WPF仿网易云 Gitee仓库 WPF仿网易云 CSDN博客专栏 前言 上一篇文章中&#xff0c;我们简单…

【三维重建】对极几何

极几何描述了同一场景或者物体的两个视点图像间的几何关系 可以发现&#xff30;在左右相机的投影点一定在各自的极线上&#xff0c;如果求出极线就能缩小求解对应点的范围。 本质矩阵对规范化摄像机拍摄的两个视点图像间的极几何关系进行代数描述 规范化相机指的是相机的内参…

专栏十五:omicverse在单细胞分析中的实际使用体验和小改动

写一些自己的理解吧,一些小步骤,正在更新中。。。 安装 原作者写的很清楚了 大部分直接抄 个别地方:去选择下载适合自己的pytorch版本PyTorch, 比如我的是cuda12,下载命令实际是 pip3 install torch torchvision torchaudio 查看cuda版本命令 nvidia-smi 当然还有个命…

YB9225是一种固定工作频率的高效率电流模式升压转换器。

YB9225B 1.2 MHz。峰值5A 电流&#xff0c;升压转换器 概述 &#xff1a; YB9225是一种固定工作频率的高效率电流模式升压转换器。YB9225集成了一个非常低的 Rds-on NMOSFTET&#xff0c;以减少功率损耗和实现高效率。最高效率可达93% 。功率 MOSFET 的峰值电流限制在5 A。1.…

大模型应用_ChatGPT-Next-Web

1 用后感 这个工具&#xff0c;我也是用了好长时间&#xff0c;就是感觉如果不点亮一颗星&#xff0c;自己就不是人了的那种。 一开始在国内用 ChatGPT 非常麻烦&#xff0c;就买了一个套壳的服务&#xff0c;他使用的界面就是 ChatGPT-Next-Web&#xff0c;我和朋友们都觉得这…

DevEco Studio将编辑器整体文本改为简体中文

我们打开编辑器 随便进入一个项目 这里 我们左上角目录 选择 File下面菜单中的 Settings… 打开配置界面 然后在设置窗口左侧导航栏中 选择 Plugins 插件 然后上方导航栏中 选择 Installed 参考下图 然后 找到这个Chinese(Simplified) Chinese是什么应该不用我多说吧 我们把…

第二百零二回 介绍一个三方包bluetooth_enable_fork

文章目录 1. 概念介绍2. 使用方法2.1 自定义主题2.2 覆盖父主题 3. 示例代码 我们在上一章回中介绍了图片缩放相关的内容&#xff0c;本章回中将介绍如使用主题.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的主题包含两方面的内容&#xff1a;…

`int(1)` 和 ‘int(10)‘

1 困惑 最近遇到个问题&#xff0c;有个表的要加个user_id字段&#xff0c;user_id字段可能很大&#xff0c;于是我提mysql工单alter table xxx ADD user_id int(1)。领导看到我的sql工单&#xff0c;于是说&#xff1a;这int(1)怕是不够用吧&#xff0c;接下来是一通解释。 …

网络测试工具:tcping-测试端口连接

网络测试工具&#xff1a;tcping-测试端口连接 平常使用的ping&#xff0c;是通过icmp协议去测试网络连通性的&#xff0c;tcping是通过tcp三次握手测试端口的连通性。总的来说&#xff0c;ping测试的是L3的连通性&#xff0c;tcping测试的是L4的连通性。 tcping工具下载 htt…

基于轻量级神经网络GhostNet开发构建光伏太阳能电池缺陷图像识别分析系统

工作中经常会使用到轻量级的网络模型来进行开发&#xff0c;所以平时也会常常留意使用和记录&#xff0c;在前面的博文中有过很多相关的实践工作&#xff0c;感兴趣的话可以自行移步阅读即可。 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobil…