Spark
文章平均质量分 66
AlferWei
一个奋斗在编程路上的程序员。
展开
-
Spark源码解析之小分区合并
coalesce 函数来减少分区小分区合并,不需要 Shuffle 过程 /** * Return a new RDD that is reduced into `numPartitions` partitions. * * This results in a narrow dependency, e.g. if you go from 1000 partitions * t原创 2016-12-13 13:53:02 · 1181 阅读 · 0 评论 -
Spark存储分析 - 存储级别
存储级别原创 2018-05-20 13:06:22 · 2426 阅读 · 0 评论 -
Spark存储分析 - RDD存储调用与数据读写过程
RDD存储调用读数据过程写数据过程原创 2018-05-20 14:05:47 · 2207 阅读 · 1 评论 -
Spark存储分析 - Shuffle分析
Shuffle简介在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现,自然也实现了shuffle的逻辑,本文就深入研究Spark的shuffle是如何实现的,有什么优缺点。 Shuffle的...原创 2018-05-20 14:32:19 · 1113 阅读 · 0 评论 -
Spark核心原理 - 作业执行
Spark作业执行原理Spark的作业和任务调度系统是其核心,它能够有效地进行调度的根本原因是对任务划分DAG和容错,使得它对底层到顶层的各个模块之间的调用和处理显得游刃有余。下面介绍一些相关术语。 作业(Job):RDD中由行动操作所生成的一个或多个调度阶段。 调度阶段(Stage):每个作业会因为RDD之间的依赖关系拆分成多组任务集合,成为调度阶段,也叫做任务集(TaskSet)...原创 2018-06-12 21:50:07 · 536 阅读 · 0 评论 -
Spark存储分析 - 共享变量
多个task想要共享某个变量,Spark为此提供了两个共享变量,一种是Broadcast Variable(广播变量),另一种是Accumulator(累加变量)。Broadcast Variable会将使用到的变量,仅仅为每个节点拷贝一份,更大的用处是优化性能,减少网络传输以及内存消耗。Accumulator则可以让多个task共同操作一份变量,主要可以进行累加操作。Broadcast 广播变量...原创 2018-05-30 01:35:20 · 435 阅读 · 0 评论 -
Spark核心原理 - 消息通信分析
Spark将通信层设计的非常巧妙,融合了各种设计/架构模式,将一个分布式集群系统的通信层细节完全屏蔽,这样在上层的计算框架的设计中能够获得很好的灵活性。同时,如果上层想要增加各种新的特性,或者对来自不同企业或组织的程序员贡献的特性,也能够很容易地增加进来,可以避开复杂的通信层而将注意力集中在上层计算框架的处理和优化上,入手难度非常小。另外,对上层计算框架中的各个核心组件的开发、功能增强,以及Bug...原创 2018-05-30 01:51:22 · 1836 阅读 · 0 评论 -
Spark并行度的设定
今天有同事问起Spark中spark.default.parallelism参数的意义,以及该如何设置。故在这里留个记录,算是做个小结。Spark并行度设置的相关因素Spark并行度的设置在Spark任务中是常常会谈及的问题,它是由partition的数量决定的。而partition的数量是由不同的因素决定的,它和资源的总cores、spark.default.parallelism参数、读取数据...原创 2018-06-21 22:30:38 · 2586 阅读 · 0 评论 -
Spark核心原理 - 容错与HA
容错与HA所谓容错是指一个系统的部分出现错误的情况还能够持续地提供服务,不会因为一些细微的错误导致系统性能严重下降或者出现系统瘫痪。在一个集群出现机器故障、网络问题等是常态,尤其集群达到较大规模后,很可能较频繁出现机器故障不能进行提供服务,因此对于分布式集群需要进行容错设计。Spark能够实现高容错,以下将从Executor、Worker和Master的异常处理来介绍。Executor异常Spar...原创 2018-06-27 12:04:30 · 1614 阅读 · 0 评论 -
Spark on Yarn任务运行的日志收集
Spark on yarn环境:基于CDH的大数据组件平台。yarn服务有resource manager和node manager组成,在yarn上运行的任务,由一个ApplicationMaster和多个container组成。Spark 运行由一个driver和多个executor组成,Spark on Yarn时,Spark的driver和executor分别运行在yarn的c...原创 2018-08-21 21:31:34 · 8232 阅读 · 0 评论 -
Oozie与Spark2整合
准备Oozie环境Oozie版本:4.2.0,从源码手动编译安装包源码包:oozie-4.2.0.tar.gztar -zxvf oozie-4.2.0.tar.gz -C $OOZIE_SRC_HOMEBuilding Ooziecd $OOZIE_SRC_HOMEbin/mkdistro.sh -DskipTests -Phadoop-2 -Dhadoop.auth.v...原创 2018-09-03 18:04:32 · 1225 阅读 · 0 评论 -
Spark取TopN问题
数据处理中, 经常会遇到取TopN的问题. 在Spark中,取TopN有如下的方法:生成rdd 读取数据源的数据并转为rdd.val rdd = sc.textFile()分区将rdd划分分区,分区的个数根据实际的数据量和计算集群机器的数量以及核心数确定.val partitionedRDD = rdd.coalesce(partitions)kv变换把每条数据...原创 2018-09-06 20:39:07 · 2178 阅读 · 0 评论 -
Spark 闭合函数清理
来看下面的函数def coalesce(numPartitions: Int, shuffle: Boolean = false, partitionCoalescer: Option[PartitionCoalescer] = Option.empty) (implicit ord: Ordering[T] = null) ...原创 2018-12-17 15:17:36 · 462 阅读 · 0 评论 -
Spark存储分析 - 存储架构
Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的。用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.RDD#cache将数据持久化;持久化的动作都是由Storage模块完成的。包括Shuffle过程中的数据,也都是由Storage模块管理的。可以说,RDD实现了用户的逻辑,而Storage则管理了用户...原创 2018-05-20 12:38:58 · 965 阅读 · 0 评论 -
Spark读取HBase数据源
读取HDFS相关的数据源时,大量使用mapreduce封装的读取数据源的方式,而一个mapreduce job会依赖InputFormat对读取的数据进行格式校验、输入切分等操作。读取HBase数据源,则使用了TableInputFormat。先来看看InputFormat。InputFormatInputFormat是mapreduce提供的数据源格式接口,也就是说,通过该接口可以支持读取各种各...原创 2018-05-03 22:05:17 · 2862 阅读 · 2 评论 -
Spark源码解析之RDD
从HDFS读取并转换为HadoopRDD val path = args(0) val dateTime = DateTime.now().getMillis val jobName = "WordCount" val sparkConf = new SparkConf().setAppName(jobName) val sc = new SparkContex原创 2016-09-18 17:29:43 · 593 阅读 · 0 评论 -
Spark源码解析之textFile
Spark加载文件的时候可以指定最小的partition数量,那么这个patition数量和读取文件时的split操作有什么联系呢?下面就跟着Spark源码,看看二者到底是什么关系。/*** Read a text file from HDFS, a local file system (available on all nodes), or any* Hadoop-supported file原创 2017-02-08 23:14:17 · 4057 阅读 · 0 评论 -
Spark 源码解析之SparkContext家族(一)
SparkContextSparkContext 是Spark 应用的主入口,通过它可以连接Spark 集群,并在集群中创建RDD,累加器,广播变量等;==每一个启动 JVM 上只能有一个SparkContext,在启动一个新的SparkContext之前,必须停掉处于活动状态的SparkContext==。/** * Main entry point for Spark functionalit原创 2016-12-09 17:16:12 · 1105 阅读 · 0 评论 -
Spark 源码解析之SparkContext家族(二)SoarkContext都做了些什么
SparkContext作为Spark应用程序连接Spark集群的入口,对于学习Spark的运行机制与原理有重要的作用。SparkContext初始化时序图下面是阅读源码后做的SparkContext初始化时序图: 结合源码,厘清SparkContext的初始化这里只列举了SparkContext初始化中的部分源码。设置SparkContext是否允许多个共存:...原创 2017-02-09 23:35:06 · 1240 阅读 · 0 评论 -
在 YARN 上运行 Spark
翻译中...Running Spark on YARNSupport for running on YARN (Hadoop NextGen) was added to Spark in version 0.6.0, and improved in subsequent releases. 在Spark的0.6.0版本中已经支持在YARN(Hadoop NextGen)上运行的Spark,并在后续...翻译 2017-06-25 23:26:13 · 2229 阅读 · 0 评论 -
Spark算子--RDD的基本转换
多个RDD合并RDD的合并,按RDD内数据结构的是否相同分为两类。1、合并的多个RDD结构相同涉及的Spark函数有union、intersection、subtract1.1 uniondef union(other: RDD[T]): RDD[T]该函数比较简单,就是将两个RDD进行合并,不去重。1.2 intersectiondef intersection(other: RDD[T]):...原创 2018-03-14 14:35:53 · 677 阅读 · 0 评论 -
Spark 作业调度
Job SchedulingOverviewScheduling Across ApplicationsDynamic Resource AllocationConfiguration and SetupResource Allocation PolicyRequest PolicyRemove PolicyGraceful Decommission of ExecutorsScheduling ...翻译 2017-06-01 20:24:12 · 1146 阅读 · 0 评论 -
Spark SQL 与 Spark SQL on Hive 区别
Spark SQL Data Sourcespark 2.0.2通用的数据载入功能最简单的形式,默认的数据源格式是parquet,当然默认的格式可以通过spark.sql.sources.default进行配置:val usersDF = spark.read.load("examples/src/main/resources/users.parquet")usersDF...原创 2017-02-05 00:03:30 · 2418 阅读 · 0 评论 -
Spark Release 2.*.* 新特性及修复的bug
Spark Release 2.0.0API StabilityCore and Spark SQL新特性Performance and RuntimeMLlibSparkRStreamingDependency, Packaging, and OperationsRemovals, Behavior Changes and DeprecationsSpark Re...翻译 2017-02-06 17:31:19 · 674 阅读 · 0 评论 -
Spark的Worker/Instance /Executor之间的
FAQSpark配置中,可以配置 SPARK_WORKER_INSTANCES 实现每台机器启动多个Worker Instance,在什么情况下需要这么做呢?如果使用Mesos或Yarn作为Spark应用的资源管理器,每个Worker默认就可以启动多个Executor。但是如果使用Standalone模式,则每个Worker只能启动一个Executor,所以如果每台机器想启动多个Executor则...原创 2017-04-21 18:44:18 · 2807 阅读 · 2 评论 -
java.net.BindException: 无法指定被请求的地址: Service 'sparkDriver' failed after 16 retries!
在Centos7 中 使用 Intellij IDEA 来 Spark 本地模式启动时,报错:java.net.BindException: 无法指定被请求的地址: Service 'sparkDriver' failed after 16 retries!16/06/27 19:36:34 WARN Utils: Service ‘sparkDriver’ could not bind...原创 2017-07-21 15:18:55 · 7741 阅读 · 3 评论 -
reduce 与 reduceByKey 区别
reduce 是一种聚合函数,可以把各个任务的执行结果汇集到一个节点,还可以指定自定义的函数传入 reduce 执行。==reduce 把同一个任务内的结果现在本地 Worker 节点进行聚合,再把结果传给 Driver 执行聚合。但最终数据还是要汇总到主节点,而且 reduce 会把接受到的数据保存在内存中,直到所有任务都完成为止==。因此,当任务很多,任务的结果数据有比较大时,Driver 容...原创 2016-12-13 13:54:34 · 4606 阅读 · 0 评论 -
Spark 提交任务详解
Running Spark on YARNcluster mode :$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ --driver-memory 4g \ --executor-memory...原创 2016-12-09 17:18:32 · 6288 阅读 · 1 评论 -
Spark Streaming 性能调优
这里的Spark Streaming 性能调优,主要涉及从Kafka读数据、往Kafka中写数据的过程。Spark Streaming 对接 KafkaSpark Streaming 对接 kafka有receive和direct两种方式。基于Receiver的方式这种方式利用接收器(Receiver)来接收kafka中的数据,其最基本是使用Kafka高阶用户API接口。对于所有的接收器,从kaf...原创 2018-04-03 22:57:38 · 1532 阅读 · 1 评论 -
Spark的计算本地性
Spark 不同的 Locality LevelPROCESS_LOCAL: 数据和 task 在同一个executor jvm 中,最好的就是这种 locality。NODE_LOCAL: 数据在同一个节点上。比如数据在同一个节点的另一个 executor上;或在 HDFS 上,恰好有 block 在同一个节点上。速度比 PROCESS_LOCAL 稍慢,因为数据需要在不同进程之间传递或从文件中...原创 2018-05-02 08:52:41 · 1213 阅读 · 0 评论 -
RDD分区2GB限制
spark处理较大的数据时,遇到了分区2G限制的问题。问题来源:500G原数据存储在HBase上,Spark从HBase读取数据这些数据进行处理,任务资源分配如下:--executor-memory 12G \--executor-cores 6 \--conf spark.yarn.driver.memoryOverhead=2048 \--conf spark.yarn.executor...原创 2018-05-02 12:32:34 · 907 阅读 · 1 评论 -
RDD repartition过程源码阅读
将rdd的分区数量由少变多,需要调用repartition算子。 /** * reparition实际调用coalesce,并且shuffle=true / def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] = withScope { coalesce(nu...原创 2018-12-17 15:47:28 · 974 阅读 · 0 评论