数据的本地性
数据本地性的意思就是尽量的避免数据在网络上的传输。Hadoop的MR之所以慢,频繁的读写HDFS是原因之一,为了解决这个问题,Spark将数据都放在了内存中(当然这是理想的情况,当内存不够用时数据仍然需要写到文件系统中)。
但是如果数据需要在网络上传输,也会导致大量的延时和开销,毕竟disk IO和network IO都是集群的昂贵资源。
数据本地性是尽量将计算移到数据所在的节点上进行。毕竟移动计算要比移动数据所占的网络资源要少得多。而且,由于Spark的延时调度机制,使得Spark可以在更大的程度上去做优化。比如,拥有数据的节点当前正被其他的task占用,那么这种情况是否需要将数据移动到其他的空闲节点呢?答案是不一定。因为如果预测当前节点结束当前任务的时间要比移动数据的时间还要少,那么调度会等待,直到当前节点可用。
文件系统本地性:计算任务最好在离数据最近的节点上,计算和数据最好在一台机器上
内存本地性:数据已经加载到内存中,那么,计算任务最好能够直接访问内存,即计算任务发生在内存所在的机器上
Spark程序调试注意的问题:
package spark.examples.shuffle import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.SparkContext._ object SparkWordCountHashShuffle { def main(args: Array[String]) { System.setProperty("hadoop.home.dir", "E:\\devsoftware\\hadoop-2.5.2\\hadoop-2.5.2"); val conf = new SparkConf() conf.setAppName("SparkWordCount") // conf.setMaster("local[3]") conf.setMaster("local") //不加[3]则给ResultTask添加断点时,会挂住断点3次,方便调试;加上,则只挂住一次 conf.set("spark.shuffle.manager", "hash"); val sc = new SparkContext(conf) val rdd = sc.textFile("file:///D:/word.in.3",4); val rdd1 = rdd.flatMap(_.split(" ")) val rdd2 = rdd1.map((_, 1)) val rdd3 = rdd2.reduceByKey(_ + _, 3); rdd3.saveAsTextFile("file:///D:/wordout" + System.currentTimeMillis()); println(rdd3.toDebugString) sc.stop } }
使用conf.setMaster("local[3]"),则ResultTask的runTask方法只会挂住一次,而使用conf.setMaster("local")则断点会挂住3次
相关推荐
Spark 可以读取多种数据源,包括本地文件系统和 HDFS(Hadoop 分布式文件系统)。在 Spark Shell 中,可以使用内置函数读取文件,如 `sc.textFile()`,并进行简单的数据分析。实验中统计了 `/home/hadoop/test.txt`...
总之,Spark-x.x.x-bin-hadoop包为本地调试提供了便利,涵盖了Spark的各种功能和与Hadoop的集成,使开发者能够在本地环境中高效地测试和优化大数据处理任务。通过理解Spark的组件和其与Hadoop的交互方式,你将能更好...
- **交互性**:Spark Shell支持交互式数据分析,适合数据探索和调试。 - **容错性**:RDD设计有强大的容错机制,数据丢失时可以从源重新计算。 4. **Spark编程模型**:Spark的工作方式是将大任务拆分成许多小任务...
### 本地使用Scala操作Spark的关键知识点 #### 一、SparkSession的配置与初始化 在Scala中使用Spark进行数据处理时,首先需要创建一个`SparkSession`实例。这一步至关重要,因为所有的Spark应用都是基于`...
《Spark大数据处理:技术、应用与性能优化》这本书深入探讨了Apache Spark这一高效的大数据处理框架,涵盖了其核心概念、实际应用以及性能调优策略。Spark以其内存计算、高并发和低延迟的优势,在大数据领域中得到了...
这个"spark1.4的本地模式编程练习(2)附加代码"提供了进一步深入理解Spark核心概念的机会,尤其是针对那些想要在单机环境中快速测试和调试Spark应用的开发者。 Spark是一个分布式计算框架,它为大规模数据处理提供了...
Apache Spark 是一个强大的开源大数据处理框架,主要用于快速、通用以及可扩展的数据处理。在这个特定的压缩包"spark-3.1.3-bin-hadoop3.2.tgz"中,我们得到了Spark的3.1.3版本,它已经预编译为与Hadoop 3.2兼容。这...
6. 数据本地性:尽可能让计算任务运行在数据所在的节点,提高效率。 7. 缓存策略:智能缓存数据到内存或磁盘,避免重复计算。 四、实战案例 书中可能包括了不同行业的Spark应用案例,如互联网广告投放、金融风控、...
在大数据处理领域,Spark以其高效、易用和灵活性脱颖而出,成为了许多开发者的首选框架。Spark-assembly-1.5.2-hadoop2.6.0.jar是Spark中的一个重要组件,它是Spark的核心库,包含了所有Spark模块的合并版本,便于...
5. **多模式支持**:Spark可以本地模式、集群模式(如YARN、Mesos)以及Standalone模式运行。 Spark与Hadoop的集成是其重要应用场景之一,`spark-2.4.5-bin-hadoop2.6`表明这个版本的Spark已经内置了对Hadoop的支持...
Spark是Apache软件基金会下的一个大数据处理框架,以其高效、易用和可扩展性著称。在本安装包“spark-3.2.4-bin-hadoop3.2-scala2.13”中,包含了用于运行Spark的核心组件以及依赖的Hadoop版本和Scala编程语言支持。...
Spark 2.0是Apache Spark的一个重要版本,它在数据处理效率、易用性和功能上都有显著提升。在这个“spark2.0编译版-适用于hive2.3的hive on spark”压缩包中,我们主要关注的是如何在Spark 2.0上运行Hive查询,同时...
### Spark开发及本地环境搭建指南 #### 构建本机上的Spark开发环境 在构建Spark开发环境时,首先需要确保你的计算机上安装了必要的软件,包括但不限于Linux操作系统、Java Development Kit (JDK)、Scala、Maven...
Spark性能优化主要包括内存管理、任务调度和数据本地性等方面。可以通过调整`spark.executor.memory`、`spark.shuffle.memoryFraction`等参数来控制内存使用。此外,合理安排数据分区和任务并行度也能显著提升性能。...
在Windows 10操作系统中,要进行Spark的本地开发和调试,首先需要确保安装了必要的软件环境,包括OpenJDK、Scala、Hadoop以及IntelliJ IDEA(简称IDEA)。以下是详细的步骤: 1. **安装OpenJDK8** - 从官方下载...
在这个程序中,我们将深入理解Spark的核心概念,如RDD(弹性分布式数据集)以及并行计算的基本操作。 **1. Spark核心概念** - **RDD(Resilient Distributed Datasets)**:RDD是Spark中的基本数据抽象,它是不可...
在学习过程中,你将接触到如何设置Spark环境,编写Spark程序,以及如何在本地模式、集群模式(如YARN或Mesos)下运行Spark作业。你还会学习如何调试Spark程序,优化性能,以及如何使用Spark的交互式Shell(Spark ...
Spark是Apache软件基金会下的一个开源大数据处理框架,其主要特点是高效、通用以及易于使用。Spark 2.4.4是该框架的一个稳定版本,它基于Hadoop 2.6进行构建,提供了对大规模数据集的强大处理能力。这个压缩包文件...
Apache Spark是大数据处理领域的一个重要工具,以其在大规模数据集上的高速处理能力和易用性而闻名。文档标题“Spark快速数据处理.pdf”和描述中都提到了这份文档的内容主要面向Spark开发入门者,通过文档的阅读可以...
Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效、灵活和易用性而闻名。Spark 2.1.1是该框架的一个稳定版本,它在2.1.0的基础上进行了一些改进和修复,提供了更好的性能和稳定性。这个特定的压缩包...