使用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支持两种类型的操作:
- 转换,从现有数据集中创建新数据集
- 动作,通过对RDD进行计算来返回值(如下图所示)
通过使用Spark转换功能来创建Spark RDD。 Spark转换功能可以从各种来源(例如文本文件)创建Spark RDD。 除了从文本文件创建Spark RDD外,还可以从外部存储(例如RDBMS,HBase,Cassandra或与Hadoop输入格式兼容的任何其他数据源)创建Spark RDD。
大多数时候,Spark RDD会从一个RDD转换为另一个新的Spark RDD,以便为将来的处理准备数据集。 让我们考虑一下Spark中的以下数据转换步骤:
- 加载文本文件,其中包含RDD1中任何机场的航空公司名称和到达时间。
- 将包含任何机场的航空公司名称和航班延误信息的文本文件加载到RDD2中。
- 通过航空公司名称将RDD1和RDD2加入,以获得RDD3。
- 映射到RDD3以获得每个航空公司的RDD4不错的报告。
- 将RDD4保存到文件。
- 映射RDD2以提取某些航空公司的航班延误信息,以获取RDD5。
- 将RDD5汇总起来,就可以算出每家航空公司的延误航班数为RDD6。
- 将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。
- IgniteContext :IgniteContext是Spark-Ignite集成的主要入口点。 要创建Ignite上下文的实例,用户必须提供SparkContext的实例和创建IgniteConfiguration(配置工厂)的闭包。 Ignite上下文将确保所有涉及的作业实例中都存在服务器或客户端Ignite节点。 或者,可以将XML配置文件的路径传递给IgniteContext构造函数,该构造函数将用于正在启动的节点。
- IgniteRDD :IgniteRDD是Spark RDD抽象的实现,表示Ignite缓存的实时视图。 IgniteRDD并非一成不变; Ignite缓存中的所有更改(无论它们是由另一个RDD还是由缓存的外部更改引起的)都将立即对RDD用户可见。 IgniteRDD利用Ignite缓存的分区性质,并将分区信息提供给Spark执行程序。 IgniteRDD中的分区数量等于基础Ignite缓存中的分区数量。 IgniteRDD还通过以下方式向Spark提供关联信息
getPrefferredLocations
以便RDD计算使用数据局部性。
在本系列的下一部分中,我们将安装Apache Spark并执行以下操作:
- 跑过
wordcount
示例来验证Spark安装。 - 配置Apache Ignite以在Spark应用程序之间共享RDD。
- 通过Spark Shell运行Spark应用程序以使用Ignite RDD。
- 开发一个Scala Spark应用程序,将一些Ignite RDD放入Ignite群集中,然后从另一个Scala Spark应用程序中提取它们。
翻译自: https://www.javacodegeeks.com/2017/12/optimizing-spark-job-performance-apache-ignite-part-1.html
使用Apache Ignite优化Spark作业性能(第1部分)相关推荐
- apache ignite_使用Apache Ignite优化Spark作业性能(第1部分)
apache ignite 来看看他们是如何工作的! 本文的某些部分摘自我的书< Apache Ignite的高性能内存计算> . 如果您对这篇文章感兴趣,请查看本书的其余部分,以获取更多 ...
- Spark性能优化 -- Spark SQL、DataFrame、Dataset
本文将详细分析和总结Spark SQL及其DataFrame.Dataset的相关原理和优化过程. Spark SQL简介 Spark SQL是Spark中 具有 大规模关系查询的结构化数据处理 模块 ...
- Spark SQL性能优化
性能优化参数 针对Spark SQL 性能调优参数如下: 代码示例 import java.util.List;import org.apache.spark.SparkConf; import or ...
- Apache Spark Jobs 性能调优
当你开始编写 Apache Spark 代码或者浏览公开的 API 的时候,你会遇到各种各样术语,比如transformation,action,RDD(resilient distributed d ...
- 【转载】Apache Spark Jobs 性能调优(二)
调试资源分配 Spark 的用户邮件邮件列表中经常会出现 "我有一个500个节点的集群,为什么但是我的应用一次只有两个 task 在执行",鉴于 Spark 控制资源使用的参数 ...
- Spark常规性能调优二:RDD 优化
RDD 复用 在对 RDD 进行算子时,要避免相同的算子和计算逻辑之下对 RDD 进行重复的计算 对上图中的 RDD 计算架构进行修改,得到如下图所示的优化结果: RDD 持久化 在 Spark 中, ...
- Apache Spark Jobs 性能调优(二)
Apache Spark Jobs 性能调优(二) 调试资源分配 调试并发 压缩你的数据结构 数据格式 在这篇文章中,首先完成在 Part I 中提到的一些东西.作者将尽量覆盖到影响 Spark 程序 ...
- Apache Spark Jobs 性能调优(一)
Apache Spark Jobs 性能调优(一) Spark 是如何执行程序的 选择正确的 Operator 什么时候不发生 Shuffle 什么情况下 Shuffle 越多越好 二次排序 结论 当 ...
- Spark的性能优化案例分析(下)
前言 Spark的性能优化案例分析(上),介绍了软件性能优化必须经过进行性能测试,并在了解软件架构和技术的基础上进行.今天,我们通过几个 Spark 性能优化的案例,看一看所讲的性能优化原则如何落地. ...
最新文章
- 关于《写给青少年的数学故事:代数奇思》“二维码”一文的声明
- Socket网络编程--小小网盘程序(2)
- LeetCode MySQL 619. 只出现一次的最大数字
- linux基础知识——wait函数和waitpid函数回收子进程
- (需求实战_02)_ftp连接下载指定.zip类型文件
- java - 抽象类、接口、内部类
- RHEL7.0手动安装
- 【堆】Leetcode692:前k个高频单词
- 我收藏的PDF电子书第一部分
- 2021-08-08在ubuntu上部署nideshop
- 阿里云ECS迁移至腾讯云
- Pick定理 有趣的证明
- tableau瀑布图
- 关于语言发育迟缓的孩子
- Linux_Learning_兄弟连
- 计算广告发展历程——从CPC到oCPX
- 使用ps完成手写数字图片(用于验证手写数字模型或制作数据集)
- 【Git】1090- 我在工作中是如何使用Git的
- 为什么要关心分布式事务
- JMockit Mock 私有方法和私有属性