- 博客(95)
- 资源 (1)
- 收藏
- 关注

原创 spark源码系列文章目录
spark-streaming系列------- 1. spark-streaming的Job调度 上spark-streaming系列------- 2. spark-streaming的Job调度 下
2016-03-20 20:05:13
1316
原创 通过使用evercookie技术实现设备指纹
设备指纹是互联网中经常使用的一种技术,通过设备指纹技术,为每个设备确定一个唯一的设备ID。由于IP地址个数的限制,内网中往往使用NAT技术,将内网中的上万个IP映射成几个外网IP对外访问。这样内网用户在访问某个网站的使用,一个外网IP很可能对应多个内网IP。因此在风控系统中,可以通过使用设备ID,精确定位到每个终端,根据设备ID创建设备画像,能够解决很多IP画像无法解决的问题。
2016-05-31 17:57:36
11381
原创 Spark RDD系列----3. rdd.coalesce方法的作用
当spark程序中,存在过多的小任务的时候,可以通过 RDD.coalesce方法,收缩合并分区,减少分区的个数,减小任务调度成本,避免Shuffle导致,比RDD.repartition效率提高不少。 rdd.coalesce方法的作用是创建CoalescedRDD,源码如下:def coalesce(numPartitions: Int, shuffle: Boolean = f
2016-03-31 18:32:56
10651
原创 spark解决方案系列--------1.spark-streaming实时Join存储在HDFS大量数据的解决方案
spark-streaming实时接收数据并处理。一个非常广泛的需求是spark-streaming实时接收的数据需要跟保存在HDFS上的大量数据进行Join。要实现这个需求保证实时性需要解决以下几个问题:1.spark-streaming的数据接收间隔往往很小,比如只有几秒钟。HDFS上的数据如果很大的话,不能每个接收batch都从HDFS读取数据,避免频繁大量磁盘I/O2.HDFS大量
2016-03-30 10:05:21
11434
2
原创 Spark SQL系列------2. Spark SQL Aggregate操作的实现
本篇文章主要将Aggregate操作的时候的数据存储和实现过程
2016-03-02 18:03:39
3336
原创 Spark SQL系列------1. Spark SQL 物理计划的Shuffle实现
Spark SQL物理计划要到Spark-core执行,需要将Spark SQL物理计划转化成RDD,并且建立RDD之间的依赖关系。这个过程可以通过如下图大概表示:上图中绿色部分指Spark物理计划到RDD过程中数据结构的变迁过程。黄色部分表示变迁过程中,实现加工作用的数据结构。
2016-02-25 14:25:31
7599
原创 Spark通过mapPartitions方式加载Json文件,提高文件加载速度
这几天遇到了需要从hdfs加载json字符串,然后转化成json对象的场景。刚开始的实现方式见如下代码: val loginLogRDD = sc.objectFile[String](loginFile, loadLoginFilePartitionNum) .filter(jsonString => { //val loginItem = line.toString
2016-01-13 18:37:35
2385
原创 spark-streaming系列------- 5. Spark-Streaming checkpoint的原理和实现
本文以KafkaDirectDStream方式为例说明Spark-Streaming checkpoint的原理 JobGenrerator.generateJobs负责Streaming Job的产生,产生并且提交执行Job之后,会发送DoCheckpoint事件,源码如下:private def generateJobs(time: Time) { // Set the
2015-12-31 18:34:46
3457
原创 Spark调度系列-----5.Spark task和Stage的跳过执行(ui显示task和stage skipped)
在spark的首页ui上经常显示任务和Stage被skipped,如以下截图所式:本文将阐述什么情况下Stage或者Task会被置为skipped,以及stage和task被值skipped之后是否spark application执行会出问题?当一个Spark Job的ResultStage的最后一个Task成功执行之后,DAGScheduler.handleTaskCo
2015-12-22 17:46:15
19234
2
原创 spark RDD系列------2.HadoopRDD分区的创建以及计算
Spark经常需要从hdfs读取文件生成RDD,然后进行计算分析。这种从hdfs读取文件生成的RDD就是HadoopRDD。那么HadoopRDD的分区是怎么计算出来的?如果从hdfs读取的文件非常大,如何高效的从hdfs加载文件生成HadoopRDD呢?本篇文章探讨这两个问题。 SparkContext.objectFile方法经常用于从hdfs加载文件,从加载hdfs文件到生成Had
2015-11-26 14:21:51
6977
原创 Spark RDD系列-------1. 决定Spark RDD分区算法因素的总结
RDD在调用引起Shuffle的方法的时候,如果没有显示指定ShuffledRDD的分区,那么会调用Partitioner.defaultPartitioner方法来确定ShuffledRDD的分区,比如RDD.combineByKey:def combineByKey[C](createCombiner: V => C, mergeValue: (C, V) => C, mergeCombi
2015-11-25 17:51:46
4493
原创 java nio原理和它的优点
要想讲清楚nio的原理和它的优点得先清楚Java应用程序的文件读写原理和虚拟内存的原理。Java文件读取原理可参见如下图:当应用程序需要读取文件的时候,内核首先通过DMA技术将文件内容从磁盘读入内核中的buffer,然后Java应用进程再从内核的buffer将数据读取到应用程序的buffer。为了提升I/O效率和处理能力,操作系统采用虚拟内存的机制。虚拟内存也就是我们常说的交换内存
2015-11-06 15:20:14
16650
1
原创 spark-streaming系列------- 4. Spark-Streaming Job的生成和执行
Spark-Streaming Job的生成和执行可以通过如下图表示:Spark-Streaming Job的生产和和执行由以下3个部分相互作用生成:Driver程序:用户通过编写Driver程序描述了DStream的依赖关系,Driver程序根据DStream描述的依赖关系描述了RDD的依赖关系,也就是描述了Streaming Job的逻辑执行图Spark-Streaming
2015-10-29 14:13:19
2358
原创 Spark storage系列------3.Spark cache数据块之后对后继Job任务调度的影响,以及后继Job Task执行的影响
DAGScheduler.submitStage建立Spark应用的物理执行图,DAGScheduler.submitStage通过调用DAGSchdeuler.getMissingParentStages找到一个Stage的祖宗Stage并把祖宗Stage加入到物理执行图中。在这里如果发现依赖的RDD的全部分区已经存储到了BlockManager,也就是已经成功Cache,那么这个RDD以及它的
2015-10-22 09:51:03
2016
原创 Spark storage系列------2.Spark cache数据块的读取
如下时序图表示了RDD.persist方法执行之后,Spark是如何cache分区数据的。时序图可放大显示本篇文章中,RDD.persist(StorageLevel)参数StorageLevel为:MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2)也就是cache数据的时候,如
2015-10-21 16:48:35
2008
原创 Spark storage系列------1.Spark RDD.persist对数据的存储
如下时序图表示了RDD.persist方法执行之后,Spark是如何cache分区数据的。本篇文章中,RDD.persist(StorageLevel)参数StorageLevel为:MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2)也就是cache数据的时候,如果有足够的内存则将数据cache
2015-10-21 10:50:04
9642
原创 Spark Shuffle系列-----3. spark shuffle reduce操作RDD partition的生成
本篇文章以RDD.aggregateByKey引起的SortShuffleWriter为例说明Shuffle map端的原理和实现,为了便于说明问题这里的所有执行流程都是默认执行流程 为了便于说明问题,本文中Stage1是shuffle map操作所在的Stage,Stage2是shuffle reduce操作所在的Stage,本文中spark.shuffle.blockTransf
2015-10-15 18:02:43
3318
原创 Spark Shuffle系列-----2. Spark Shuffle map端的原理和实现
本篇文章以RDD.aggregateByKey引起的SortShuffleWriter为例说明Shuffle map端的原理和实现
2015-10-14 13:46:17
3002
原创 Spark Shuffle系列-----1. Spark Shuffle与任务调度之间的关系
Spark根据RDD间的依赖关系是否是Shuffle依赖进行Stage的划分,先执行的Stage标记为Stage1,后执行的Stage标记为Stage2。Shuffle是Stage分2步操作 Map操作和Recude操作可以通过下面这个图表示出来: 1. Map操作。Map操作在Stage1结束的时候执行;Map操作的作用是将Stage1阶段的一个pa
2015-10-13 18:17:15
3971
原创 spark-streaming系列------- 3. Kafka DirectDStream方式数据的接收
KafkaRDD分区个数的确定和每个分区数据接收的计算在KafkUtils.createDirectStream创建了DirectDStream,代码如下:def createDirectStream[ K: ClassTag, V: ClassTag, KD <: Decoder[K]: ClassTag, VD <: Decoder[V]: ClassTag]
2015-09-23 11:36:24
5556
原创 Spark调度系列-----3.SparkContext对象的创建和SparkContext的作用
SparkContext是Spark Application程序的表示。在Driver程序中首先创建SparkContext对象,在创建这个对象的时候,Spark Application运行需要的重要参数会在这里初始化。下面的图表述了SparkContext创建初始化的重要参数。DAGSchedule的作用:Spark Stage的切分等功能,它主要描述了Spark Appli
2015-09-17 18:35:32
3279
原创 spark调度系列------2. Spark Executor的创建和启动过程
上一讲主要降到了spark executor资源在Master的分配原理。今天来讲Spark Executor的创建和启动过程。创建的过程可以功过如下时序图表示:在Standalone模式下,Backend.start()方法最终调用了SparkDeploySchedulerBackend.start(),这个方法的作用是:1. 调用父类的CoarseGrainedSchedu
2015-09-16 10:44:12
6100
原创 spark调度系列----1. spark stanalone模式下Master对worker上各个executor资源的分配
spark Application的注册时在Master类中对RegisterApplication消息的处理。Master类里面对RegisterApplication消息处理时, 首先将Application信息注册到Master,然后调用了Master.schedule方法相关代码如下:case RegisterApplication(description, d
2015-09-14 18:04:59
5203
原创 spark-streaming系列------- 2. spark-streaming的Job调度 下
接着上一篇文章,spark-streaming系列------- 1. spark-streaming的Job调度 上 讲spark-streaming job的具体生成 spark-streaming job的具体生成在JobGenrerator.generatorJobs,代码如下: private def generateJobs(time: Time) { /
2015-09-11 18:09:01
1402
原创 spark-streaming系列------- 1. spark-streaming的Job调度 上
这段时间分析了下spark-streming任务调度的源码,成果分享一下。 类似于spark-core,spark-streaming有自己的一套任务调度,具体代码在spark-streaming的scheduler包里面。 我以Kafka DirectDStream数据接收为例,画了一张整体的流程图:在将这张图之前,需要先明确spark-strea
2015-09-10 16:12:29
2280
原创 通过代码实例来说明spark api mapPartitions和mapPartitionsWithIndex的使用
代码片段1:package com.oreilly.learningsparkexamples.scalaimport org.apache.spark._import org.eclipse.jetty.client.ContentExchangeimport org.eclipse.jetty.client.HttpClientobject BasicMapPartition
2015-07-15 16:58:28
8840
原创 spark多个application的同时运行
在spark的Job Scheduling中介绍了spark多个任务同时执行,相关链接为:https://spark.apache.org/docs/1.2.0/job-scheduling.html spark要实现多个application同时运行,涉及到多个application的资源共享。在spark on yarn模式下,yarn可以用来管理集群资源。为了能够比较好的利
2015-07-14 09:43:58
9545
原创 spark on yarn的cpu使用
在yarn-site.xml中,可以配置virutal core的个数,请注意不是physical core的个数,相关配置如下: yarn.nodemanager.resource.cpu-vcores 30 NodeManager总的可用虚拟CPU个数virutal core的概念是将所有physical cpu组成8个可调度的队列,linux使得有任务的
2015-07-08 10:31:00
6539
原创 浅谈spark yarn模式的问题调试
spark运行的时候,有可能发生崩溃,而在spark console里面看到的堆栈,很可能不是发生问题的实际堆栈,这个时候需要看yarn日志来定位问题。 我在调试spark程序的时候,采用如下命令启动spark驱动程序:/usr/local/spark-1.3.1-bin-hadoop2.6/bin/spark-submit --supervise --class spark_sec
2015-07-07 16:57:43
26990
原创 关于spark driver程序调优
1.需要避免的几种错误操作 a. 在执行reductive(合并)操作的时候,避免使用groupByKey操作。因为使用groupByKey的时候,会导致太多的被数据shuffle,而reduceByKey操作会比groupByKey性能高很多,具体原因可参考下面的两个图片:可见reduceByKey操作,先对数据进行合并,然后再shuffle,所以shuffle数据会
2015-06-19 10:46:22
934
原创 intellij idea maven projects工具条消失问题的解决
点击idea左下脚的如下按钮,maven projects工具条会马上出来:
2015-06-12 16:47:56
16694
1
原创 spark-streaming direct stream的部分实现原理
今天看了一片介绍spark-streaming direct stream的实现原理,文章在这个地址(内容加载比较慢,打开链接后等几分钟内从才能显示出来):Exactly-once Spark Streaming from Apache Kafka 总结一下几点: 1. spark-streaming其实是根据interval创建了rdd stream。在创建rdd的时
2015-05-29 16:37:25
1798
原创 kafka的消息发送的三种模式
1. At most once模式 消费者读取消息,更新消息的offset,然后处理消息。这种方式的风险是在更新消息的offset之后,处理消息结果的输出之前消费者挂掉,消费者再启动的时候,从新的offset开始消费消息,导致处理消息丢失2. At least once模式 消费者读取消息,处理消息并输出,更新消息的offset。这种方式的风险是在处理消息的结果输出之后,更新
2015-05-29 14:26:29
8590
原创 spark程序对hadoop环境的依赖,导致checkpoint失败问题的解决
虽然没有使用hadoop,但是在windows下运行spark程序报如下错误:INFO : org.apache.spark.SparkContext - Running Spark version 1.3.1WARN : org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for yo
2015-05-28 16:47:21
4806
原创 Exception in thread "main" java.lang.IllegalArgumentException: Some primary key columns are missing
Exception in thread "main" java.lang.IllegalArgumentException: Some primary key columns are missing in RDD or have not been selected:sockpuppetuser我的类定义如下:private static class IPSockpuppetUser{
2015-05-27 16:42:48
4996
原创 显示cassandra所有keyspace的方法
使用如下cql语句:select * from system.schema_keyspaces;
2015-05-27 15:30:46
5405
原创 spark中的aggregate action的实现过程
例子代码如下:public final class BasicAvg { public static class AvgCount implements Serializable { public AvgCount(int total, int num) { total_ = total; num_ = num;
2015-05-22 18:12:25
1506
原创 nginx静态编译openssl并且使用gdb调试openssl
这个地址讲述了nginx是如何静态编译openssl的:http://blog.youkuaiyun.com/hujkay/article/details/23476557 编译nginx的时候,首先会静态编译openssl,并且执行auto/lib/openssl/make 脚本来进行openssl 编译的配置。 要想能够gdb调试nginx下的openssl代码需要修改 1.
2015-03-04 18:07:00
2662
翻译 linux gdb调试动态库(so)的方法
原文地址:http://www.gonwan.com/?tag=gdb在本例中使用了libcurl.so.4库step1:编译libcurl.so.4的可调试版本:# sudo apt-get source libcurl3-dbg# cd curl-7.19.7/# ./configure --prefix=/usr/local --enable-debug --
2015-03-04 15:48:36
40515
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人