热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spark并行计算内容总结

(一)并行计算的简介并行计算: 简单来讲,并行计算就是同时使用多个计算资源来解决一个计算问题,具有以下特点:一个问题被分解成为一系列可以并发执行的离散部分;每个部分可以进一步被分解
(一)并行计算的简介

并行计算: 简单来讲,并行计算就是同时使用多个计算资源来解决一个计算问题,具有以下特点:

一个问题被分解成为一系列可以并发执行的离散部分;

每个部分可以进一步被分解成为一系列离散指令;

来自每个部分的指令可以在不同的处理器上被同时执行;

需要一个总体的控制/协作机制来负责对不同部分的执行情况进行调度。

《Spark并行计算内容总结》 并行计算示意图

这里的计算资源可以是分布式的计算机,也可以是多核CPU或多处理器的计算机。而计算的问题需要可以分解成可并发执行的的离散片段,并且不同离散片段可以在任意时间被执行。因此对于并行计算需要关心两方面的内容:计算资源的并行组织与.并行程序的设计。

(二)计算资源的并行组织

1.分布式架构的结构

以分布式集群为例,并行计算任务中,最常用的是主从架构方案,具体根据功能的不同抽象为两种角色:

一类负责整体的资源调度,存储地址的管理等,不执行具体的任务,称为集群的主节点;另一类则只负责分配到的任务的具体执行和数据的实际存储,称为从节点。主从节点各司其职,配合完成并行计算任务。下面介绍主从节点的具体配置。

2.分布式架构的配置

(1)网络互通、SSH免密登录

对于分布式集群来说,首先要保证不同计算单元可以相互通信,可以是物理的连接也可以是通过网络的连接。配置网络保证ping通,并且为了后期访问的方便,安装SSH服务,相互传递公钥,保证可以相互免密码登录。

(2)配置JDK、Scala

Hadoop,Spark是运行在JAVA虚拟机上面的,所以要对所有的节点配置JDK环境,Spark为Scala语言原生编写,并且Scala的函数式编程更合适进行并行计算,所以安装Scala。

(3)配置Hadoop

《Spark并行计算内容总结》 hadoop架构图

分布式计算必然涉及分布式储存的问题,Hadoop的HDFS分布式文件系统,Hbase分布式数据库,Hive分布式数据仓库等组件是一个比较好的解决方案。安装配置Hadoop。

HDFS分布式文件系统和MapReduce计算框架为Hadoop的两个个核心设计。

HDFS的架构图如下,采用主从架构(master/slave)。一个典型的HDFS集群包含一个NameNode节点和多个DataNode节点。NameNode节点负责整个HDFS文件系统中的文件的元数据保管和管理,集群中通常只有一台机器上运行NameNode实例,DataNode节点保存文件中的数据,集群中的机器分别运行一个DataNode实例。在HDFS中,NameNode节点被称为名称节点,DataNode节点被称为数据节点。DataNode节点通过心跳机制与NameNode节点进行定时的通信。

《Spark并行计算内容总结》 HDFS架构图

(4)配置Spark

最初采用Hadoop自有MapReduce计算框架可以解决大多数问题,但相比Spark计算框架就略逊一筹。Spark框架相比MR来说更加的高效,有如下几个原因:

1.相对于Hadoop的MR计算,Spark支持DAG,能缓存中间数据,减少数据落盘数,Spark基于内存的计算更高效

2.可以支持使用多线程启动task,更轻量,启动速度快;

3.API高度抽象,开发效率高,功能不局限于MapReduce的传统模式,可以根据实际的需求设计程序。

《Spark并行计算内容总结》 Spark+HDFS架构

但Spark没有自带的文件系统,所以使用Hadoop的HDFS配合进行相关计算,具体结构图如上。

在分布式环境中安装Spark,并配置相关文件。

本节具体配置参考:https://www.cnblogs.com/NextNight/p/6703362.html

(三)并行程序的选择

至此分布式计算的集群搭建好,具备了分布式计算的基本条件。通过对Spark进一步剖析,理解分布式程序的开发。

RDD的使用

Spark的核心为RDD(Resilient Distributed Datasets),即弹性分布式数据集。

它是对数据的高度抽象概念,弹性可理解为数据存储弹性,可内存,可磁盘; 分布式可理解为数据分布在不同节点。RDD是分布式数据的逻辑抽象,物理数据存储在不同的节点上,但对用户透明,用户不需要知道数据实际存在哪台机器。

RDD包括以下部分:

    只读分区集合:这保证了RDD的一致性,在计算过程中更安全可靠,此外RDD可能包含多个分区,数据分布在不同分区中,这些分区可能在不同的机器上。对数据的计算函数:RDD包含了对所表示数据的计算函数,也就是得到这个RDD所要经过的计算。计算数据的位置:对用户而言不需要知道数据在哪里,这些信息隐含在RDD的结构中。分区器:对数据分区依赖的分区算法,如hash分区器依赖的RDD信息:该RDD可能依赖的父RDD信息,用于失败重算或计算的DAG划分。

RDD的计算与依赖

RDD计算

RDD的计算分为transformation和action两类。

transformation有 flatMap、map、union、reduceByKey等。

action有count、collect、saveAsTextFile等表示输出的操作。

RDD的计算是lazy的,transformation算子不会引发计算,只是逻辑操作action算子才会引发实际的计算。

RDD依赖

《Spark并行计算内容总结》 宽依赖窄依赖

RDD的依赖分为宽依赖和窄依赖两种,如果依赖过程含有一对多则为宽依赖,否则为窄依赖。

Spark的计算流程

Spark的计算核心为RDD,理解了RDD才能理解其相关计算流程。

《Spark并行计算内容总结》

上图是一个Spark的wordcount例子,根据上述stage划分原则,这个job划分为2个stage,有三行,分别是数据读取、计算和存储过程。

仅看代码,用户根本体会不到数据在背后是并行计算。从图中能看出数据分布在不同分区(也可以理解不同机器上),数据经过flapMap、map和reduceByKey算子在不同RDD的分区中流转。(这些算子就是上面所说对RDD进行计算的函数)

《Spark并行计算内容总结》 Spark实现流程

更抽象的层次来看:Spark的运行架构由Driver(可理解为master)和Executor(可理解为worker或slave)组成,Driver负责把用户代码进行DAG切分,划分为不同的Stage,然后把每个Stage对应的task调度提交到Executor进行计算,这样Executor就并行执行同一个Stage的task。

《Spark并行计算内容总结》 层次划分

Application就是用户submit提交的整体代码,代码中又有很多action操作,action算子把Application划分为多个job,job根据宽依赖划分为不同Stage,Stage内划分为许多(数量由分区决定,一个分区的数据由一个task计算)功能相同的task,然后这些task提交给Executor进行计算执行,把结果返回给Driver汇总或存储。

这体现了 Driver端总规划–Executor端分计算–结果最后汇总回Driver 的思想,也就是分布式并行计算的思想。

(四)并行计算实例

采用Spark计算框架,对矢量点进行高斯核密度估计。

单机环境测试,采用不同的线程数对程序进行计算,模拟并行计算的结果比较计算结果。使用Geotrellis.Spark框架下的瓦片处理技术将点分配到不同的瓦片Tile,并将其导入RDDtile中,进行并行计算。

初始化Sparkconf设置setMaster参数为Local[线程数]进行试验,计算其核心步骤的时间,结果如下:

线程数    瓦片切割    使用时间(ms)

1            7*4            64455

2            7*4            46455

4            7*4            35583

基本可以说明在数据量较大的情况下,并行计算的效率要较高一些。但是线程数的增加使得并行计算的通行网络成本与时间网络成本增加,所以不同的任务有最高值,需要配置服务器,使用更多数据通过更多的线程数来进行进一步计算得到。


推荐阅读
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • Hadoop——实验七:MapReduce编程实践
    文章目录一.实验目的二.实验内容三.实验步骤及结果分析 1.基于ubuntukylin14.04(7)版本,安装hadoop-eclipse-kepler-plugi ... [详细]
  • 工作原理_一文理解 Spark 基础概念及工作原理
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了一文理解Spark基础概念及工作原理相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 在第二课中,我们将深入探讨Scala的面向对象编程核心概念及其在Spark源码中的应用。首先,通过详细的实战案例,全面解析Scala中的类和对象。作为一门纯面向对象的语言,Scala的类设计和对象使用是理解其面向对象特性的关键。此外,我们还将介绍如何通过阅读Spark源码来进一步巩固对这些概念的理解。这不仅有助于提升编程技能,还能为后续的高级应用开发打下坚实的基础。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • HBase客户端Table类中getRpcTimeout方法的应用与编程实例解析 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Phoenix 使用体验分享与深度解析
    闲来无事看了下hbase方面的东西,发现还好理解不过不大习惯于是找到个phoenix感觉不错性能指标如下好像还不错了准备工作:启动hadoop集群启动zookkeeper启动hba ... [详细]
  • FileBeat + Flume + Kafka + HDFS + Neo4j + SparkStreaming + MySQL:【案例】三度关系推荐V1.0版本11:每周一计算最近一月主播视频评级
    一、数据计算步骤汇总下面我们通过文字梳理一下具体的数据计算步骤。第一步:历史粉丝关注数据初始化第二步:实时维护粉丝关注数据第三步:每天定 ... [详细]
  • 小记hbase数据库java API 常用方法及案例
    HBaseAdmin类:管理hbase数据库的表信息,‘创建表、删除表、列出表选项、使表有效/无效、添加或删除列簇’;  ... [详细]
author-avatar
易秀胜_444
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有