![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spark
Javis486
天下皆白,唯我独黑
展开
-
Spark调度机制:2)集群资源注册
1.启动Master和Worker进程Master进程可以通过Master节点上执$SPARK_HOME/sbin/start-master.sh 启动Worker进程可以在Slave节点上使用”$SPARK_HOME/sbin/start-slave.sh ”启动,或者使用”$SPARK_HOME/bin/spark-class org.apache.spark.deploy.worke原创 2016-11-16 18:56:46 · 580 阅读 · 0 评论 -
Spark1.3从创建到提交:9)Stage的划分和提交源码分析
接着上一节的dagScheduler.handleJobSubmitted方法,先看下这一句核心代码:finalStage = newStage(finalRDD, partitions.size, None, jobId, callSite)使用最后一个rdd创建了一个Stage,看下newStage这个核心方法: private def newStage( rdd: RD原创 2017-01-05 09:57:32 · 526 阅读 · 0 评论 -
Spark通信机制:1)Spark1.3 vs Spark1.6源码分析
前一段时间看了较大基于Spark1.3的源码,其RPC通信机制是基于Akka的,但是在Spark1.6中,提供了2中实现方式:Netty(默认)、Akka下面对比Spark1.3的Akka通信机制,看下Spark1.6中Master是如何与Worker进行通信。首先看下Spark1.6中的Master类private[deploy] class Master( overri原创 2017-01-06 09:56:49 · 1825 阅读 · 0 评论 -
Spark1.3从创建到提交:1)master和worker启动流程源码分析
dsa原创 2016-12-27 21:04:56 · 866 阅读 · 0 评论 -
Spark1.3从创建到提交:5)Executor启动源码分析
c原创 2017-01-02 09:20:32 · 650 阅读 · 0 评论 -
Spark1.3从创建到提交:8)DAGScheduler.runJob源码分析
接着上一节,先看下类DAGScheduler的源码(只保留关心的) class DAGScheduler( private[scheduler] val sc: SparkContext, private[scheduler] val taskScheduler: TaskScheduler, listenerBus: LiveListenerBus, map原创 2017-01-04 20:56:02 · 573 阅读 · 0 评论 -
Spark1.3从创建到提交:4)资源分配源码分析
接着上一节Master里case RegisterApplication最后的一个资源调度方法schedule() ,假如我提交的任务需要6G,10Cores,而集群的部署如下所示:Spark提供了2种资源分配的策略,一种是尽量分散(spreadOut,默认),一种是尽量集中,具体看下这个Master.schedule方法(源码位置555行)分散策略 //在当前等待队原创 2016-12-30 17:39:07 · 764 阅读 · 0 评论 -
Spark1.3从创建到提交:3)任务调度初始化源码分析
上一节在SparkContext中也提及到了,在该类中创建了一个任务调度器,下面我们具体来分析这个方法 private[spark] var (schedulerBackend, taskScheduler) = SparkContext.createTaskScheduler(this, master)createTaskScheduler的代码如下:private def cr原创 2016-12-30 11:37:21 · 656 阅读 · 0 评论 -
Spark1.3从创建到提交:10)任务提交源码分析
接着原创 2017-01-05 10:26:48 · 547 阅读 · 0 评论 -
SparkStream:2)Window窗体相关操作
SparkStreaming之window滑动窗口应用,Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据,会被聚合起来执行计算操作,然后生成的RDD,会作为window DStream的一个RDD。网官图中所示,就是对每三秒钟的数据执行一次滑动窗口计算,这3秒内的3个RDD会被聚合起来进行处理,然后转载 2016-11-27 22:26:43 · 3360 阅读 · 0 评论 -
SparkStream:4)foreachRDD详解
foreachRDD通常用来把SparkStream运行得到的结果保存到外部系统比如HDFS、Mysql、Redis等等。了解下面的知识可以帮助我们避免很多误区误区1:实例化外部连接对象的位置不正确,比如下面代码dstream.foreachRDD { rdd => val connection = createNewConnection() // executed at t原创 2016-11-24 14:33:22 · 11734 阅读 · 0 评论 -
SparkStream:3)updateStateByKey详解
SparkStream官方文档对updateStateByKey这个函数介绍过于粗略,在网上看见了一篇不错的文章就转载了过来在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计转载 2016-11-24 09:27:57 · 6052 阅读 · 0 评论 -
Spark基础随笔:Spark应用程序中设置日志输出级别
我们通常会使用IDE(例如Intellij IDEA)开发Spark应用,而程序调试运行时会在控制台中打印出所有的日志信息。它描述了(伪)集群运行、程序执行的所有行为。在很多情况下,这些信息对于我们来说是无关紧要的,我们更关心的是最终结果,无论是正常输出还是异常停止。 幸运的是,我们可以通过log4j主动控制日志输出的级别。引入log4j.Logger和log4j.转载 2017-01-15 09:49:15 · 4762 阅读 · 0 评论 -
Kafka:2)Kafka整合logstash实战
Kafka的安装部署,请参看http://blog.csdn.net/jiangpeng59/article/details/53241693原创 2016-12-20 10:30:17 · 6068 阅读 · 0 评论 -
Kafka:1)Kafka集群搭建
软件环境:Linux服务器多台(本实验使用3台centos6.5搭建kafka)已经搭建好的Zookeeper集群(具体可以参看:Zookeeper集群搭建)Scala 2.10 - kafka_2.10-0.9.0.1.tgz原创 2016-11-20 18:54:05 · 1104 阅读 · 0 评论 -
SparkStream:5)Spark streaming+kafka整合实战
Spark streaming+kafka整合实战原创 2016-11-22 20:35:41 · 6945 阅读 · 2 评论 -
Spark基础随笔:Spark1.6 Idea下远程调试的2种方法
关于Sc 1.导入依赖的包和源码原创 2016-09-05 23:33:36 · 8535 阅读 · 3 评论 -
TensorflowOnSpark:1)Standalone集群初体验
1.实验环境Centos7+Python2.7+Java8+Spark1.6+Hadoop2.7+Tensorflow0.12.1Centos7+Python2.7+Java8+Spark1.6+Hadoop2.7+Tensorflow0.12.1 Spark和Hadoop的集群搭建网上的教程比较多,这里不做详细介绍,几个核心的配置供大家参考(其实地上本没有坑,跌的人多了,也便成了坑) 1原创 2017-06-05 19:28:46 · 7486 阅读 · 7 评论 -
Spark1.3从创建到提交:7)SparkContext.runJob源码分析
以一个简单的WordCount为例,看下runJob的具体执行流程object WordCount { def main(args: Array[String]) { val conf=new SparkConf val sc=new SparkContext(conf) val rdd1=sc.textFile("/tmp/data.txt") val r原创 2017-01-04 09:17:43 · 612 阅读 · 0 评论 -
Spark基础随笔:持久化&检查点
1.持久化Spark持久化过程包括persist、cache、up原创 2016-11-18 10:42:23 · 1640 阅读 · 0 评论 -
Spark调度机制:1)简介&基本概念
1.Spark的调度机制简介Spark的调度机制有2类,主要是集群调度机制和应用程序内部的调度机制。理解其中的原理,便于我们更深入地了解Spark和性能优化。集群资源调度由集群资源管理器(Cluster Manager)控制,负责协调所有的应用程序,为每个Spark应用程序分配适当的计算资源。比如Yarn、Mesos、以及Spark自身的Standalone。作业调度器(Job S原创 2016-11-13 19:04:47 · 1650 阅读 · 0 评论 -
Spark调度机制:4)阶段划分
阶段划分是作业调度过程的关键所在,首先探讨下Spark是如何进行阶段划分的。一个阶段划分的例子如下图所示,用虚线表示一个阶段,虚线框内所有的RDD都是为了实现该阶段而需要被计算的数据。整个作业最后一个RDD的所有分区数据被计算完毕对于的阶段就是所求的末阶段。沿着RDD的依赖关系往前进行深度优先遍历,若遇到一个Shuffle依赖,依赖的每一个父RDD所有分区数据都计算完毕可以分别对应一个阶段原创 2016-11-17 15:58:21 · 2990 阅读 · 0 评论 -
Spark核心RDD:combineByKey函数详解
为什么单独讲解combineByKey?因为combineByKey是Spark中一个比较核心的高级函数,其他一些高阶键值对函数底层都是用 groupByKey实现的。诸如 groupByKey,reduceByKey等等如下给出combineByKey的定义,其他的细节暂时忽略(1.6.0版本期函数名更新为combineByKeyWithClassTag)def combineByK原创 2016-09-14 16:12:35 · 31627 阅读 · 13 评论 -
Spark核心RDD:Sort排序详解
1.sortByKey无可非议sortByKey是Spark的最常用的排序,简单的案例暂且跳过,下面给一个非简单的案例,让我进入排序之旅对下面简单元祖,要求先按元素1升序,若元素1相同,则按元素3升序(1, 6, 3), (2, 3, 3), (1, 1, 2), (1, 3, 5), (2, 1, 2)给出如下提示:sortByKey对于key是单个元素排序很简单,如果key原创 2016-10-26 23:27:28 · 40233 阅读 · 2 评论 -
Spark调度机制:3)DAG调度
1.DAG调度器简介DAG即Directed Acyclic Graph,有向无环图的意思,Spark会存储RDD之间的依赖广西,依赖关系是有向的,总是由子RDD指向父RDD(平时我们看到的箭头一般是数据流向而不是依赖指向,它们刚好相反),RDD依赖的有向性导致RDD的计算呈现明显的阶段特征。因此所形成的的计算链也可以被分割为多个阶段,后面的阶段依赖前面的阶段是否完成。由于RDD内部的数据是不原创 2016-11-17 10:27:09 · 3937 阅读 · 0 评论 -
Spark调度机制:5)任务调度
在DAG调度器完成了阶段划分的工作后,并把任务集交给任务调度器,接下来将深入到任务调度器内部,观察任务集已经任务的调度与执行过程1.任务分类与执行在Spark中,Task进一步被划分为Result Task和ShuffleMap Task,顾名思义,Result Task就是Result Stage内部被调度器划分得到的任务,而ShuffleMap Task则是ShuffleMap Sta原创 2016-11-18 16:59:11 · 726 阅读 · 0 评论 -
Spark机器学习:TF-IDF实例讲解
测试数据源:20 Newsgroups (http://qwone.com/~jason/20Newsgroups/),其中包含20个领域的新闻,此次我们使用20news-bydate-train作为测试数据,其结构如下Spark Task:对多篇文章提取其特征关键字以备检索、分类使用(关键字视为一个单词)输入内容文件格式(article_id,content.原创 2016-10-11 11:37:34 · 9951 阅读 · 3 评论 -
Spark机器学习:TF-IDF实现原理
先简单地介绍下什么是TD-IDF(词频-逆文档频率),它可以反映出语料库中某篇文档中某个词的重要性。假设t表示某个词,d表示一篇文档,则词频TF(t,d)是某个词t在文档d中出现的次数,而文档DF(t,D)是包含词t的文档数目。为了过滤掉常用的词组,如"the" "a" "of" "that",我们使用逆文档频率来度量一个词能提供多少信息的数值:原创 2016-10-11 11:36:59 · 9447 阅读 · 0 评论 -
Spark机器学习:同现相似度矩阵
同相似度可用于为协调过滤推荐中,查找相似的物品或者用户。下面对同相似度进行简单的定义物品i和物品j的同相似度公式定义: 其中,分母是喜欢物品i的用户数,而分子则是同时喜欢物品i和物品j的用户数。因此,上述公式可用理解为喜欢物品i的用户有多少比例的用户也喜欢j (和关联规则类似)但上述的公式存在一个问题,如果物品j是热门物品,有很多人都喜欢,则会导致Wij很大,接近于1。因此会原创 2016-10-25 11:26:23 · 9582 阅读 · 3 评论 -
Spark机器学习:密集和稀疏向量
1.密集和稀疏向量一个向量(1.0,0.0,3.0)它有2中表示的方法密集:[1.0,0.0,3.0]稀疏:(3,[0,2],[1.0,3.0]) 其表示的含义(向量大小,序号,值) 序号从0开始、下面是一个简单的例子import org.apache.spark.mllib.linalg.Vectorsobject Test { def main(args原创 2016-10-04 11:24:19 · 12225 阅读 · 0 评论 -
SparkStream:1)入门简介
StreamingContext如同SparkContext一样,StreamingContext也是Spark Streaming应用程序通往Spark集群的通道,它的定义如下:Java代码 /** * Main entry point for Spark Streaming functionality. It provides methods use转载 2016-11-21 20:53:15 · 1523 阅读 · 0 评论 -
SparkSQL:Spark整合Hive
1.安装HiveHive的安装,可以参看Hadoop-Hive快速入门,这里再重述2.拷贝Hive的配置文件拷贝$HIVE_HOME/conf/hive-site.xml文件到$SPARK_HOME/conf下3.测试Hive本地数据测试文件people.txt1 user01 1234562 user02 1234563 use原创 2016-11-19 18:34:19 · 5665 阅读 · 0 评论 -
Spark:Akka入门初窥
首先明白下面几点:ActorSystem是该进程中的Actor的管理者,负责创建和监控所有的actorActorSystem是单例的Actor负责通信原创 2016-12-08 09:46:19 · 984 阅读 · 0 评论 -
Spark:Akka实现简单RPC通信
目标:简单模拟Spark的通信机制,多个worker向Master注册并发送心跳,Master定时清理超时的worker。具体流程如下:启动Master并开启清空超时Worker的定时任务Worker启动的时候,在preStart方法中连接Master,并向Master注册自己的相关信息Master收到worker的注册并返回自己的url给Worker,表示该Worker注册成功Wor原创 2016-12-15 10:49:28 · 2544 阅读 · 1 评论 -
Spark1.3从创建到提交:2)spark-submit和SparkContext源码分析
spark-sumit脚本假如Spark提交的命令如下:bin/spark-submit --jar lib/spark-examples-1.3.1-hadoop2.6.0.jar --class cn.spark.WordCount --master spark://master:7077 --executor-memory 2g --total-executor-cores 4原创 2016-12-29 21:32:27 · 1203 阅读 · 0 评论 -
Spark1.3从创建到提交:6)Executor和Driver互动源码分析
上一节介绍了worker启动了一个名为CoarseGrainedExecutorBackend的进程,首先看下CoarseGrainedExecutorBackend类的main方法def main(args: Array[String]) { //定义变量接收args命令行参数 var driverUrl: String = null var executorId: String =原创 2017-01-03 09:10:22 · 607 阅读 · 0 评论 -
Spark核心RDD:计算函数compute
RDD的计算是惰性的,一系列转换操作只有在遇到动作操作是才会去计算数据,而分区作为数据计算的基本单位。在计算链中,无论一个RDD有多么复杂,其最终都会调用内部的compute函数来计算一个分区的数据。1.compute方法RDD抽象类要求其所有子类都必须实现compute方法,该方法介绍的参数之一是一个Partition对象,目的是计算该分区中的数据。以MapPartitionsRDD类为原创 2016-11-18 11:41:09 · 10176 阅读 · 3 评论 -
Spark基础随笔:分区小结
RDD分区的一个分区原则:尽可能是得分区的个数等于集群核心数目下面我们仅讨论Spark默认的分区个数,这里分别就parallelize和textFile具体分析其默认的分区数无论是本地模式、Standalone模式、YARN模式或Mesos模式,我们都可以通过spark.default.parallelism来配置其默认分区个数,若没有设置该值,则根据不同的集群环境确定该值本地原创 2016-10-08 14:48:45 · 12942 阅读 · 2 评论