使用Apache Ignite优化Spark作业性能(第1部分)

快来看看他们是如何工作的!

本文的某些部分摘自我的书《 Apache Ignite的高性能内存计算》 。 如果您对这篇文章感兴趣,请查看本书的其余部分,以获取更多有用的信息。

Apache Ignite提供了几种提高Spark作业性能的方法:Ignite RDD(将Ignite缓存表示为Spark RDD抽象)和Ignite IGFS(可透明地插入Spark部署中的内存文件系统)。 Ignite RDD允许轻松地在不同的Spark作业或应用程序之间共享内存中的状态。 使用Ignite内存共享RDD,任何Spark作业都可以将一些数据放入Ignite缓存中,其他Spark作业以后可以访问。 Ignite RDD是作为Ignite分布式缓存上的视图实现的,该缓存可以部署在Spark作业执行过程中或Spark工作者上。

在继续讨论更高级的主题之前,让我们看一下Spark的历史以及Ignite RDD可以解决哪些类型的问题。

AMPLab发明了Apache Spark来进行快速计算。 它建立在Hadoop MapReduce之上,并扩展了MapReduce模型以有效使用更多类型的操作,例如交互式查询和流处理。

Spark和Hadoop MapReduce之间的主要区别在于,在执行过程中,Spark尝试将数据保留在内存中,而Hadoop MapReduce将数据混入和移出磁盘。 Hadoop MapReduce花费大量时间将中间数据写入磁盘并回读。 消除了这些冗余磁盘操作,使Spark幅值更快。 Spark可以将数据(中间)存储到内存中,而无需任何I / O,因此您可以非常快速地对相同数据进行操作。

为了将数据存储到内存中,Spark提供了名为Spark RDD的特殊数据集。 Spark RDD代表Spark弹性分布式数据集。 Spark RDD具有Apache Spark大规模数据处理框架的基本组件。 下图显示了Spark RDD上的迭代操作。

请注意,上图是从Spark文档获得的。 Spark RDD是一个不变的,容错的分布式数据元素集合。 您可以将Spark RDD想象为内存中的Hadoop HDFS。 Spark RDD支持两种类型的操作:

  1. 转换,从现有数据集中创建新数据集
  2. 动作,通过对RDD进行计算来返回值(如下图所示)

通过使用Spark转换功能来创建Spark RDD。 Spark转换功能可以从各种来源(例如文本文件)创建Spark RDD。 除了从文本文件创建Spark RDD外,还可以从外部存储(例如RDBMS,HBase,Cassandra或与Hadoop输入格式兼容的任何其他数据源)创建Spark RDD。

大多数时候,Spark RDD会从一个RDD转换为另一个新的Spark RDD,以便为将来的处理准备数据集。 让我们考虑一下Spark中的以下数据转换步骤:

  1. 加载文本文件,其中包含RDD1中任何机场的航空公司名称和到达时间。
  2. 将包含任何机场的航空公司名称和航班延误信息的文本文件加载到RDD2中。
  3. 通过航空公司名称将RDD1和RDD2加入,以获得RDD3。
  4. 映射到RDD3以获得每个航空公司的RDD4不错的报告。
  5. 将RDD4保存到文件。
  6. 映射RDD2以提取某些航空公司的航班延误信息,以获取RDD5。
  7. 将RDD5汇总起来,就可以算出每家航空公司的延误航班数为RDD6。
  8. 将RDD6保存到HDFS。

Spark RDD用于通过Spark操作(例如)对RDD数据集执行计算
count
reduce 。 但是Spark RDD有一个问题:Spark RDD无法在Spark Jobs或SparkContext之间共享,因为Spark RDD已绑定到Spark应用程序。 使用本机Spark分发,在不同Spark作业之间共享RDD的唯一方法是将数据集写入HDFS或文件系统中的某个位置,然后将RDD拉到其他作业中。 但是,通过使用Alluxio(以前称为Tachyon)或Apache Ignite可以实现相同的功能。

Apache Ignite的以内存为中心的体系结构以非常有效的方式实现了RDD共享。 Apache Ignite提供IgniteContext和IgniteRDD在Spark应用程序之间共享RDD。

  1. IgniteContext :IgniteContext是Spark-Ignite集成的主要入口点。 要创建Ignite上下文的实例,用户必须提供SparkContext的实例和创建IgniteConfiguration(配置工厂)的闭包。 Ignite上下文将确保所有涉及的作业实例中都存在服务器或客户端Ignite节点。 或者,可以将XML配置文件的路径传递给IgniteContext构造函数,该构造函数将用于正在启动的节点。
  2. IgniteRDD :IgniteRDD是Spark RDD抽象的实现,表示Ignite缓存的实时视图。 IgniteRDD并非一成不变; Ignite缓存中的所有更改(无论它们是由另一个RDD还是由缓存的外部更改引起的)都将立即对RDD用户可见。 IgniteRDD利用Ignite缓存的分区性质,并将分区信息提供给Spark执行程序。 IgniteRDD中的分区数量等于基础Ignite缓存中的分区数量。 IgniteRDD还通过以下方式向Spark提供关联信息
    getPrefferredLocations以便RDD计算使用数据局部性。

在本系列的下一部分中,我们将安装Apache Spark并执行以下操作:

  1. 跑过
    wordcount示例来验证Spark安装。
  2. 配置Apache Ignite以在Spark应用程序之间共享RDD。
  3. 通过Spark Shell运行Spark应用程序以使用Ignite RDD。
  4. 开发一个Scala Spark应用程序,将一些Ignite RDD放入Ignite群集中,然后从另一个Scala Spark应用程序中提取它们。

翻译自: https://www.javacodegeeks.com/2017/12/optimizing-spark-job-performance-apache-ignite-part-1.html

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

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

相关文章

mysql查看索引创建进度_SQL Server查看索引重建、重组索引进度

相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战。例如,你创建…

使用Eclipse Deeplearning4j构建简单的神经网络

神经网络导论 深度学习既包含深度神经网络又包含深度强化学习,这是机器学习的子集,而机器学习本身就是人工智能的子集。 广义上讲,深度神经网络执行机器感知,该机器感知从原始数据中提取重要特征,并对每个观察结果做出…

mysql 注入 绕过防火墙_绕过阿里云防火墙继续扫描探测和SQL注入

前言如今的互联网,WAF泛滥的年代,实在让我等脚本小子苦恼ing,尤其是阿里云服务器的自带防护,那不是一般的叫人牙疼,十个站8个站都是阿里云....最近遇到几个站都是阿里云的服务器,比如:泛微e-col…

java创建类的三个步骤_3个简单步骤即可测试Java 8

java创建类的三个步骤即将发布的Java 8版本为Java开发人员带来了许多新功能,但是升级时始终存在代码破裂的风险。 我们都记得Java 7出厂时有一系列非常严重的错误 。 当然,我们所有人都可以帮助避免在Java 8中出现相同的问题。我今天要介绍的方法是使用…

mybatis嵌套查询和嵌套结果有什么区别_Java面试专题之九:Mybatis面试5个大概率被问到的问题...

1、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybati…

使用Pargon-neo进行5G sync相关的测试

前言 Paragon-neo是Calnex旗下的一款测试仪器,主要用于5G的高精度场景下的PTP与SyncE的测试,它可以提供高达100GbE的测试速度,可以用在ITU-T G.8273.2 C/D类边界时钟测试,符合O-RAN的O-DU和O-RU设备,以及设计和部署5G…

常用的光电模块SFP、QSFP等解析

前言 学习记录 BNC 是用来接同轴电缆的接口,好处是降低了信号之间的相互干扰;主要市场是安防行业以及一些使用同轴电缆作为传输介质的令牌以太网。举个例子就是小时候的电视机后面经常能够看见这种线,BNC接头中间有一个凸起来的针&#xff…

零分钟即可在容器开发套件(CDK)上实现云运营

尽管这很有趣,但实际上并不可行,很快就遇到了使用限制。前一段时间, 我逐步完成了在容器中安装称为CloudForms的云管理解决方案。 真正的解决方案是将这个示例放入Red Hat Demo Central集合中,并将其放在基于开放技术的Cloud解决…

NTPv4协议解析

前言 本文的撰写基于RFC5905.NTP 是时间网络控制协议,V4版本相交V3版本,修复了V3存在的一些问题。尤其是NTPV4的拓展时间戳鼓励使用浮动双数据类型,这样使得NTP能够更好的支持1ns的场景,轮询间隔也从上一代的最多1024s拓展到了36…

看完这篇还不会化简卡诺图?你来打我

最通俗易懂的的卡诺图化简教程 首先我们来介绍一下什么是卡诺图: 卡诺图是逻辑函数的一种图形表示。一个逻辑函数的卡诺图就是将此函数的最小项表达式中的各最小项相应地填入一个方格图内,此方格图称为卡诺图。 卡诺图的构造特点使卡诺图具有一个重要性…

几种常见的集成触发器(D、T、JK)

同步RS触发器存在“空翻”现象,即触发器存在多次翻转的现象,空翻破坏了“时序电路按时钟节拍工作,每个时钟脉冲作用下电路的状态只发生一次转换”的基本原则 解决方法:将电平触发改为边沿触发,使得触发器旨在时钟脉冲…

Hashcat从入门到入土(一)

Hashcat的官方是这么介绍自己的 Hashcat is a password recovery tool. It had a proprietary code base until 2015, but was then released as open source software. Versions are available for Linux, OS X, and Windows. Examples of hashcat-supported hashing algorith…

java 语义_Java文件合并变得语义化

java 语义与任何程序员交谈,并询问他应该如何进行合并:“它应该理解代码,对其进行解析,然后根据结构进行合并” –他很可能会说。 而这恰恰是SemanticMerge for Java所做的:它解析要合并的文件(加上祖先或…

Apache Pulsar:分布式发布订阅消息系统

Apache Pulsar是一个开源的分布式pub-sub消息传递系统,最初由Yahoo创建,并且是Apache Software Foundation的一部分 。 Pulsar是用于服务器到服务器消息传递的多租户高性能解决方案。 脉冲星的主要功能包括[4]: 对Pulsar实例中的多个集群的…

迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中

服务器发送的事件 (或简称为SSE )是非常有用的协议,它允许服务器通过HTTP将数据推送到客户端。 这是我们的网络浏览器支持的年龄,但令人惊讶的是, JAX-RS规范在很长一段时间内都忽略了这一点。 尽管Jersey提供了适用于…

java 面向对象继承的思想_Java面向对象思想

Java类的定义:成员变量会默认初始化,局部变量不会默认初始化。如何在内存中区分类和对象:♦类是静态的概念,代码区♦对象是new出来的,位于堆内存,类的每一个成员变量在不同的对象中都有不同的值(除了静态变…

java 垃圾回收手动回收_Java垃圾回收(4)

java 垃圾回收手动回收G1:垃圾优先 G1收集器是热点JVM中要实现的最新收集器。 自Java 7 Update 4以来,它一直是受支持的收集器。OracleGC团队也公开表示,他们对低暂停GC的希望是完全实现的G1。 这篇文章来自我之前的垃圾收集博客文章&#xf…

使用正确的垃圾收集器将Java内存使用量降至最低

大小对于软件至关重要。 很明显,与大型整体方法相比,在微服务体系结构中使用小型组件具有更多优势。 最新的Java版本的Jigsaw可帮助分解旧应用程序或从头开始构建新的云原生应用程序。 这种方法减少了磁盘空间,构建时间和启动时间。 但是&am…

java 鼠标画多个圆形_点击鼠标不同的建(左、中、右)画一个不同颜色的圆

[java]代码库import java.awt.Color;import java.awt.Graphics;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JFrame;public class T1 extends JFrame{int x;int y;Color c;public T1(){this.setSize(600,400);this.setDefaultCl…

通过粘性仙人掌基元进行延迟加载和缓存

您显然知道什么是延迟加载 ,对吗? 而且您无疑知道缓存 。 据我所知,Java中没有一种优雅的方法来实现它们中的任何一个。 这是我在Cactoos原语的帮助下为自己找到的。 Matteo Garrone的《 Reality(2012)》 假设我们需…