《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 extendsMapper<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 extendsReducer<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.mzph.cn/news/214638.shtml

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

相关文章

云降水物理基础

云降水物理基础 云的分类 相对湿度变化方程 由相对湿度的定义&#xff0c;两边取对数之后可以推出 联立克劳修斯-克拉佩龙方程&#xff08;L和R都为常数&#xff09; 由右式看出&#xff0c;增加相对湿度的方式&#xff1a;增加水汽&#xff08;de增大&#xff09;和降低…

开源好用EasyImages简单图床源码

源码介绍 开源好用EasyImages简单图床源码分享&#xff0c;虽然它是开源程序&#xff0c;但功能一点也不弱&#xff0c;不仅支持多文件上传、文字/图片水印、支持API和鉴黄、还能自定义代码&#xff0c;最重要的是它不强制使用数据库运行&#xff0c;这就给我们的部署和维护带…

人工智能的技术演进与未来趋势

人工智能的技术演进与未来趋势 一、引言 人工智能&#xff08;AI&#xff09;已经成为当今科技领域的热门话题&#xff0c;其在各个行业的应用越来越广泛。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居系统到医疗诊断&#xff0c;AI技术已经深入到我们的日常生活。在…

OpenVINS学习2——VIRAL数据集eee01.bag运行

前言 周末休息了两天&#xff0c;接着做上周五那个VIRAL数据集没有运行成功的工作。现在的最新OpenVINS需要重新写配置文件&#xff0c;不像之前那样都写在launch里&#xff0c;因此需要根据数据集情况配置好estimator_config.yaml还有两个标定参数文件。 VIRAL数据集 VIRAL…

WooCommerce商城个人微信支付网关 适合个人微信收款

点击获取WooCommerce商城个人微信支付网关 适合个人微信收款原文https://gplwp.eastfu.com/product/woocommerce-ge-ren-wei-xin-zhi-fu-wang-guan-shi-he-ge-ren/ 个人微信支付网关接口&#xff0c;无需提现&#xff0c;100%资金安全&#xff0c;官方清算&#xff0c;金额无限…

XCube——用于超高分辨率 3D 形状和场景的生成模型!

他们的方法在稀疏体素网格的层次结构上训练潜在扩散模型的层次结构。他们在稀疏结构 VAE 的潜在空间上进行扩散&#xff0c;它为层次结构的每个级别学习紧凑的潜在表示。 XCube 是稀疏体素层次上的分层潜在扩散模型&#xff0c;即从粗到细的 3D 稀疏体素网格序列&#xff0c;使…

智能优化算法之粒子群模型(含python案例代码)

粒子群优化模型概述 粒子群优化&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种基于群体智能的优化算法&#xff0c;最早由美国社会心理学家James Kennedy和Russell Eberhart于1995年提出。PSO的灵感来自鸟群和鱼群等自然界群体行为的观察。 PS…

Linux驱动入门——编写第一个驱动

目录 前言 驱动入门知识 1.APP 打开的文件在内核中如何表示 2.打开字符设备节点时&#xff0c;内核中也有对应的 struct file 编写 Hello 驱动程序步骤 1.流程介绍 2.驱动代码&#xff1a; 3.应用层代码&#xff1a; 4.本驱动程序的 Makefile 内容&#xff1a; 5.上机…

4fiddler抓包工具的使用

一、定义 1.1 抓包的定义 说明&#xff1a;客户端向服务器发送请求以及服务器响应客户端的请求&#xff0c;都是以数据包来传递的。 抓包(packet capture)&#xff1a;通过工具拦截客户端与服务器交互的数据包 1.2 fiddler的介绍 Fiddler是一个http协议调试代理工具&#…

市场全局复盘 20231208

一、板块成交额排名&#xff1a; 资金流入前三个板块K 线&#xff1a; 行业成交额排名&#xff1a; 个股资金流入排名&#xff1a; select 成交额排名 ,近日指标提示 ,短线主题 ,涨停分析,CODE,名称,DDE大单净量,现价,量比,连板天,周涨停,月涨停,年涨停天,连涨天,…

【每日一题】—— B. StORage room(Codeforces Round 912 (Div. 2))(位操作符)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

使用阿里云国际CDN加速后网站无法访问的排查步骤

使用阿里云国际CDN加速后网站无法访问的排查步骤&#xff0c;下面是一些常见的问题&#xff0c;以&#xff1a;www.c.9he.com为例&#xff0c;如果解决不了来信服务器厂商解决。 检查CDN访问异常是CDN节点的问题还是源站问题 如果是源站访问异常&#xff0c;请直接排查源站服务…

Faster R-CNN

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作推理速度在GPU上达到5fps(包括候选区域的生成)&#xff0c;准确率为网络的backbone&#xff0c;也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。 算法流程 右边这部分和Fa…

算法Day27 身材管理(三维背包)

身材管理&#xff08;三维背包&#xff09; Description Input Output Sample 代码 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt(); // 输入n的值int money sca…

KaiOS 运营商相关文件operator_variant_manager.js代码功能和调试

gaia/apps/system/js/operator_variant_manager.js at master mozilla-b2g/gaia GitHub js文件接口功能 No 接口/常量 功能 1 OperatorVariantManager var OperatorVariantManager function(core) 2 OperatorVariantManager.IMPORTS OperatorVariantManager.I…

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

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; &…

【Marp】基于Markdown-Marp快速制作PPT

【Marp】基于Markdown-Marp快速制作PPT 文章目录 【Marp】基于Markdown-Marp快速制作PPT零、参考资料一、Marp基本语法&#xff08;创建分页&#xff0c;排版图片&#xff0c;更换主题&#xff0c;Marp扩展指令修改样式&#xff09;1、创建新的PPT页面2、插入图片 & 排版图…

解决删除文件后 WSL2 磁盘空间不释放的问题

查看 Linux distributions 打开 PowerShell 并执行如下命令&#xff1a; wsl -l -v 搜索并找到 ext4.vhdx 文件 我的 ext4.vhdx 文件如下&#xff1a; C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx 由于…

软件开发流程分析

软件开发流程分析 相关概念1 原型设计2 产品设计3 交互设计4 代码实现详细步骤 相关概念 前端&#xff1a;自研API&#xff0c;调用第三放API 后端&#xff1a;自研API&#xff0c;第三方API 数据库&#xff1a;Mysql&#xff0c;数据采集&#xff0c;数据迁移 服务器&#xf…

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

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