自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spark源码系列文章目录

spark-streaming系列------- 1. spark-streaming的Job调度 上spark-streaming系列------- 2. spark-streaming的Job调度 下

2016-03-20 20:05:13 1278

原创 通过使用evercookie技术实现设备指纹

设备指纹是互联网中经常使用的一种技术,通过设备指纹技术,为每个设备确定一个唯一的设备ID。由于IP地址个数的限制,内网中往往使用NAT技术,将内网中的上万个IP映射成几个外网IP对外访问。这样内网用户在访问某个网站的使用,一个外网IP很可能对应多个内网IP。因此在风控系统中,可以通过使用设备ID,精确定位到每个终端,根据设备ID创建设备画像,能够解决很多IP画像无法解决的问题。

2016-05-31 17:57:36 11235

原创 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 10464

原创 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 11218 10

原创 Spark SQL系列------2. Spark SQL Aggregate操作的实现

本篇文章主要将Aggregate操作的时候的数据存储和实现过程

2016-03-02 18:03:39 3194 1

原创 Spark SQL系列------1. Spark SQL 物理计划的Shuffle实现

Spark SQL物理计划要到Spark-core执行,需要将Spark SQL物理计划转化成RDD,并且建立RDD之间的依赖关系。这个过程可以通过如下图大概表示:上图中绿色部分指Spark物理计划到RDD过程中数据结构的变迁过程。黄色部分表示变迁过程中,实现加工作用的数据结构。

2016-02-25 14:25:31 7479

原创 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 2294

原创 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 3379 1

原创 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 18573 8

原创 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 6828 1

原创 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 4384

原创 java nio原理和它的优点

要想讲清楚nio的原理和它的优点得先清楚Java应用程序的文件读写原理和虚拟内存的原理。Java文件读取原理可参见如下图:当应用程序需要读取文件的时候,内核首先通过DMA技术将文件内容从磁盘读入内核中的buffer,然后Java应用进程再从内核的buffer将数据读取到应用程序的buffer。为了提升I/O效率和处理能力,操作系统采用虚拟内存的机制。虚拟内存也就是我们常说的交换内存

2015-11-06 15:20:14 16450 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 2257

原创 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 1928

原创 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 1926

原创 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 9517

原创 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 3227

原创 Spark Shuffle系列-----2. Spark Shuffle map端的原理和实现

本篇文章以RDD.aggregateByKey引起的SortShuffleWriter为例说明Shuffle map端的原理和实现

2015-10-14 13:46:17 2911

原创 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 3827

原创 spark调度系列------4. RDD依赖的建立以及RDD依赖在任务提交到调度系统的作用

Spark中RDD依赖的类关系如下图:

2015-09-25 13:51:03 1856

原创 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 5462 1

原创 Spark调度系列-----3.SparkContext对象的创建和SparkContext的作用

SparkContext是Spark Application程序的表示。在Driver程序中首先创建SparkContext对象,在创建这个对象的时候,Spark Application运行需要的重要参数会在这里初始化。下面的图表述了SparkContext创建初始化的重要参数。DAGSchedule的作用:Spark Stage的切分等功能,它主要描述了Spark Appli

2015-09-17 18:35:32 3164

原创 spark调度系列------2. Spark Executor的创建和启动过程

上一讲主要降到了spark executor资源在Master的分配原理。今天来讲Spark Executor的创建和启动过程。创建的过程可以功过如下时序图表示:在Standalone模式下,Backend.start()方法最终调用了SparkDeploySchedulerBackend.start(),这个方法的作用是:1. 调用父类的CoarseGrainedSchedu

2015-09-16 10:44:12 5963 2

原创 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 5139 2

原创 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 1346

原创 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 2194

原创 通过代码实例来说明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 8782

原创 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 9270

原创 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 6443 1

原创 浅谈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 26781

原创 关于spark driver程序调优

1.需要避免的几种错误操作   a. 在执行reductive(合并)操作的时候,避免使用groupByKey操作。因为使用groupByKey的时候,会导致太多的被数据shuffle,而reduceByKey操作会比groupByKey性能高很多,具体原因可参考下面的两个图片:可见reduceByKey操作,先对数据进行合并,然后再shuffle,所以shuffle数据会

2015-06-19 10:46:22 898

原创 intellij idea maven projects工具条消失问题的解决

点击idea左下脚的如下按钮,maven projects工具条会马上出来:

2015-06-12 16:47:56 16588 5

原创 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 1753

原创 kafka的消息发送的三种模式

1. At most once模式    消费者读取消息,更新消息的offset,然后处理消息。这种方式的风险是在更新消息的offset之后,处理消息结果的输出之前消费者挂掉,消费者再启动的时候,从新的offset开始消费消息,导致处理消息丢失2. At least once模式   消费者读取消息,处理消息并输出,更新消息的offset。这种方式的风险是在处理消息的结果输出之后,更新

2015-05-29 14:26:29 8480

原创 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 4686

原创 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 4950

原创 显示cassandra所有keyspace的方法

使用如下cql语句:select * from system.schema_keyspaces;

2015-05-27 15:30:46 5277

原创 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 1459

原创 nginx静态编译openssl并且使用gdb调试openssl

这个地址讲述了nginx是如何静态编译openssl的:http://blog.csdn.net/hujkay/article/details/23476557    编译nginx的时候,首先会静态编译openssl,并且执行auto/lib/openssl/make 脚本来进行openssl 编译的配置。    要想能够gdb调试nginx下的openssl代码需要修改    1.

2015-03-04 18:07:00 2508

翻译 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 38585 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除