Spark
铭霏
这个作者很懒,什么都没留下…
展开
-
Spark中存在的各种2G限制
motivation 动机The various 2G limit in Spark. Spark中存在的各种2G限制问题. 1. When reading the data block is stored in the hard disk, the following code fragment is called. 获取缓存在本地硬盘的数据块时,会调用以下代码片段转载 2017-12-10 19:33:45 · 2026 阅读 · 0 评论 -
Spark Checkpoint写操作代码分析
上次我对Spark RDD缓存的相关代码《Spark RDD缓存代码分析》进行了简要的介绍,本文将对Spark RDD的checkpint相关的代码进行相关的介绍。先来看看怎么使用checkpont:scala> val data = sc.parallelize(List("www", "iteblog", "com"))data: org.apache.spark.rdd.RDD[S转载 2016-11-10 10:37:47 · 1033 阅读 · 0 评论 -
Spark RDD缓存代码分析
我们知道,Spark相比Hadoop最大的一个优势就是可以将数据cache到内存,以供后面的计算使用。本文将对这部分的代码进行分析。 我们可以通过rdd.persist()或rdd.cache()来缓存RDD中的数据,cache()其实就是调用persist()实现的。persist()支持下面的几种存储级别:val NONE = new StorageLevel(false, fa转载 2016-11-09 17:00:43 · 475 阅读 · 0 评论 -
计算质数通过分区(Partition)提高Spark的运行性能
在Sortable公司,很多数据处理的工作都是使用Spark完成的。在使用Spark的过程中他们发现了一个能够提高Spark job性能的一个技巧,也就是修改数据的分区数,本文将举个例子并详细地介绍如何做到的。查找质数 比如我们需要从2到2000000之间寻找所有的质数。我们很自然地会想到先找到所有的非质数,剩下的所有数字就是我们要找的质数。 我们首先遍历2到2000000转载 2016-11-09 16:34:37 · 3750 阅读 · 1 评论 -
Spark on YARN cluster作业运行全过程分析
下面是分析Spark on YARN的Cluster模式,从用户提交作业到作业运行结束整个运行期间的过程分析。客户端进行操作 1、根据yarnConf来初始化yarnClient,并启动yarnClient 2、创建客户端Application,并获取Application的ID,进一步判断集群中的资源是否满足executor和ApplicationMaster申请的资源,转载 2016-11-09 15:03:37 · 839 阅读 · 0 评论 -
Spark:Yarn-cluster和Yarn-client区别与联系
我们都知道Spark支持在yarn上运行,但是Spark on yarn有分为两种模式yarn-cluster和yarn-client,它们究竟有什么区别与联系?阅读完本文,你将了解。 Spark支持可插拔的集群管理模式(Standalone、Mesos以及YARN ),集群管理负责启动executor进程,编写Spark application 的人根本不需要知道Spark用的是什么集群管转载 2016-11-09 15:21:08 · 608 阅读 · 0 评论 -
Spark on YARN client模式作业运行全过程分析
在前篇文章中我介绍了Spark on YARN集群模式(yarn-cluster)作业从提交到运行整个过程的情况(详情见《Spark on YARN集群模式作业运行全过程分析》),我们知道Spark on yarn有两种模式:yarn-cluster和yarn-client。这两种模式作业虽然都是在yarn上面运行,但是其中的运行方式很不一样,今天我就来谈谈Spark on YARN yarn转载 2016-11-09 15:09:56 · 1721 阅读 · 2 评论 -
Spark中parallelize函数和makeRDD函数的区别
我们知道,在Spark中创建RDD的创建方式大概可以分为三种:(1)、从集合中创建RDD;(2)、从外部存储创建RDD;(3)、从其他RDD创建。 而从集合中创建RDD,Spark主要提供了两中函数:parallelize和makeRDD。我们可以先看看这两个函数的声明:defparallelize[T:ClassTag](转载 2016-11-09 14:33:50 · 11283 阅读 · 1 评论 -
spark中mapPartitions双重循环或两次遍历(duplicate)
在spark当中通常需要对mapPartitions内部进行计算,这样可以在不进行网络传输的情况下,对数据进行局部计算而mapPartitions中的迭代器为Iteratorscala中的Iterator只能进行一次迭代,使用过后就消失了,所以在mapPartitions中既不能两次遍历如:一次mapPartitions求最大最小值val it = Iterator(20, 40,原创 2016-11-04 13:14:57 · 6213 阅读 · 0 评论 -
Spark Checkpoint读操作代码分析
上次介绍了RDD的Checkpint写过程(《Spark Checkpoint写操作代码分析》),本文将介绍RDD如何读取已经Checkpoint的数据。在RDD Checkpoint完之后,Checkpoint的信息(比如数据存放的目录)都由RDDCheckpointData去管理,所以当下次计算依赖了这个RDD的时候,首先是根据依赖关系判断出当前这个RDD是否被Checkpoint了,主要是通转载 2016-11-10 11:02:56 · 542 阅读 · 0 评论 -
Spark二次排序
Spark当中做二次排序非常简单,因为有大量的现成函数已经实现了,只需要进行组合运用就好在这里进行一下二次排序的总结如果对两列或多列同时进行升序或降序排序的话比较容易实现初始数据1.两次升序或降序 val dataset = //your dataset //1 dataset.map(x => (x._1, x._2)).sortBy(x =原创 2016-11-10 15:04:22 · 3804 阅读 · 0 评论 -
Spark排错与优化
原本想记录一下自己在使用Spark过程中遇到的常用问题,但是发现已经有人整理过了,而且内容大多数都相同,所以转载了这篇。转载地址:http://blog.csdn.net/lsshlsw/article/details/49155087一. 运维1. Master挂掉,standby重启也失效Master默认使用512M内存,当集群中运行的任务特别多时,就会挂掉,原因是转载 2017-06-30 21:22:06 · 867 阅读 · 1 评论 -
Breeze库API总结(Spark线性代数库)
之前一直用python的numpy处理线代方面的内容很开心,当最初用spark中不能再用numpy库还是有点悲伤的 ...但是当彻底的接触了Breeze库之后 发现两者根本完全能互相替代啊 真是开心不用定义那么多麻烦的函数和结构了 导入import breeze.linalg._import breeze.numerics._Breeze创建函数:原创 2016-12-05 11:55:46 · 8959 阅读 · 1 评论 -
Spark算子:RDD基本转换操作(5)–mapPartitions/mapPartitionsWithIndex
mapPartitionsdef mapPartitions[U](f: (Iterator[T]) => Iterator[U], preservesPartitioning: Boolean = false)(implicit arg0: ClassTag[U]): RDD[U] 该函数和map函数类似,只不过映射函数的参数由RDD中的每一个元素变成了RDD中每一个分区的迭代器。转载 2016-11-11 14:57:31 · 689 阅读 · 0 评论 -
Spark算子:RDD键值转换操作(4)–cogroup/join
cogroup##参数为1个RDDdef cogroup[W](other: RDD[(K, W)]): RDD[(K, (Iterable[V], Iterable[W]))]def cogroup[W](other: RDD[(K, W)], numPartitions: Int): RDD[(K, (Iterable[V], Iterable[W]))]转载 2016-07-22 11:13:17 · 595 阅读 · 0 评论 -
Spark多文件输出(MultipleTextOutputFormat)
因为Spark内部写文件方式其实调用的都是Hadoop那一套东西,所以我们也可以通过Spark实现多文件输出。不过遗憾的是,Spark内部没有多文件输出的函数供大家直接调用,值得欣慰的是,我们自己实现这个功能也是很简单的。我们可以通过调用saveAsHadoopFile函数并自定义一个OutputFormat类即可,代码如下:import org.apache.hadoop.io.Null转载 2016-11-11 10:16:03 · 5291 阅读 · 2 评论 -
Spark算子:RDDAction操作–first/count/reduce/collect/collectAsMap
firstdef first(): Tfirst返回RDD中的第一个元素,不排序。scala> var rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2)rdd1: org.apache.spark.rdd.RDD[(String, String)] = ParallelCollectionRDD[33] at make转载 2016-07-22 11:58:07 · 4460 阅读 · 0 评论 -
Spark算子:RDD键值转换操作(2)–combineByKey、foldByKey
combineByKey def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C): RDD[(K, C)] def combineByKey[C](createCombiner: (V) => C, mergeVal转载 2016-06-26 12:58:20 · 895 阅读 · 0 评论 -
SparkSession简单介绍
Apache Spark 2.0引入了SparkSession,其为用户提供了一个统一的切入点来使用Spark的各项功能,并且允许用户通过它调用DataFrame和Dataset相关API来编写Spark程序。最重要的是,它减少了用户需要了解的一些概念,使得我们可以很容易地与Spark交互。 本文我们将介绍在Spark 2.0中如何使用SparkSession。更多关于SparkSessio转载 2016-11-10 21:20:56 · 19271 阅读 · 4 评论 -
k-means++和k-means||
一、k-means算法缺点:1、需要提前指定k2、k-means算法对初始化非常敏感k-means++主要用来解决第二个缺点二、k-means++算法原理分析k-means++算法选择初始聚类中心的基本原则是:初始的聚类中心之间的相互距离要尽可能的远。它选择初始聚类中心的步骤是:(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心;(2原创 2016-08-15 17:22:48 · 14222 阅读 · 0 评论 -
Windows + IDEA + SBT 打造Spark源码阅读环境
Spark源码阅读环境的准备Spark源码是有Scala语言写成的,目前,IDEA对Scala的支持要比eclipse要好,大多数人会选在在IDEA上完成Spark平台应用的开发。因此,Spark源码阅读的IDE理所当然的选择了IDEA。本文介绍的是Windows下的各项配置方法(默认已经装了java,JDK)。下面列举搭建此环境需要的各个组件:IDEA,有两个版本原创 2016-04-01 19:45:31 · 7657 阅读 · 0 评论 -
Spark官方文档: Spark Configuration(Spark配置)
Spark主要提供三种位置配置系统:环境变量:用来启动Spark workers,可以设置在你的驱动程序或者conf/spark-env.sh 脚本中;java系统性能:可以控制内部的配置参数,两种设置方法:编程的方式(程序中在创建SparkContext之前,使用System.setProperty(“xx”,“xxx”)语句设置相应系统属性值);在conf/spark-env.转载 2016-04-22 19:47:19 · 696 阅读 · 0 评论 -
spark log4j.properties配置详解与实例
################################################################################ #①配置根Logger,其语法为: # #log4j.rootLogger = [level],appenderName,appenderName2,... #level是日志记录的优先级,分为OFF,TRACE,DEBU原创 2016-04-21 11:39:50 · 7321 阅读 · 0 评论 -
借助 ptpython 三个命令实现终端下 PySpark 代码高亮和代码补全:
1.pip install ptpython; 2.export PYSPARK_DRIVER_PYTHON=ptpython; 3.pyspark原创 2016-03-31 21:40:35 · 2331 阅读 · 0 评论 -
Spark算子:RDD键值转换操作(3)–groupByKey、reduceByKey、reduceByKeyLocally
groupByKeydef groupByKey(): RDD[(K, Iterable[V])]def groupByKey(numPartitions: Int): RDD[(K, Iterable[V])]def groupByKey(partitioner: Partitioner): RDD[(K, Iterable[V])]该函数用于将RDD[K,V转载 2016-06-26 13:05:06 · 5406 阅读 · 0 评论 -
Spark算子:RDD键值转换操作(1)–partitionBy、mapValues、flatMapValues
partitionBy def partitionBy(partitioner: Partitioner): RDD[(K, V)] 该函数根据partitioner函数生成新的ShuffleRDD,将原RDD重新分区。scala> var rdd1 = sc.makeRDD(Array((1,"A"),(2,"B"),(3,"C"),(4,"D")),2)r转载 2016-06-26 12:48:22 · 13251 阅读 · 2 评论 -
Spark算子:RDD基本转换操作(6)–zip、zipPartitions
zip def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)] zip函数用于将两个RDD组合成Key/Value形式的RDD,这里默认两个RDD的partition数量以及元素数量都相同,否则会抛出异常。scala> var rdd1 = sc.makeRDD(1转载 2016-06-26 12:43:58 · 3015 阅读 · 0 评论 -
序列化和反序列化(二)
本文转自:美团点评技术团队:http://tech.meituan.com/serialization_vs_deserialization.html#摘要序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型转载 2016-06-23 22:55:35 · 1479 阅读 · 0 评论 -
Spark的RDD原理以及2.0特性的介绍
注:本文由王联辉在高可用架构群分享,本文转载自高可用架构「 ArchNotes 」王联辉,曾在腾讯,Intel 等公司从事大数据相关的工作。2013 年 – 2016 年先后负责腾讯 Yarn 集群和 Spark 平台的运营与研发。曾负责 Intel Hadoop 发行版的 Hive 及 HBase 版本研发。参与过百度用户行为数据仓库的建设和开发,以及淘宝数据魔方和淘宝指数的数据开发工作转载 2016-06-01 15:34:06 · 2820 阅读 · 0 评论 -
Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)
直奔主题:其实这个错误就是编译的程序的scala版本和提交时的版本不一致导致的. 我是在idea上写的scala程序 用的是2.11.8, 但是在提交spark时 忽然发现spark用的是2.10.5所以解决办法 就是在idea上重新下个和spark集群上相同的版本就行了 .但是我在集群上配置的明明就是2.11.8 包括 spark-env.sh里的配置也是原因原创 2016-04-09 10:14:25 · 22542 阅读 · 2 评论 -
Spark分区器HashPartitioner和RangePartitioner代码详解
在Spark中分区器直接决定了RDD中分区的个数;也决定了RDD中每条数据经过Shuffle过程属于哪个分区;也决定了Reduce的个数。这三点看起来是不同的方面的,但其深层的含义是一致的。 我们需要注意的是,只有Key-Value类型的RDD才有分区的,非Key-Value类型的RDD分区的值是None的。 在Spark中,存在两类分区函数:HashPartition转载 2016-07-24 15:55:04 · 1282 阅读 · 0 评论 -
Spark算子:RDD行动Action操作(7)–saveAsNewAPIHadoopFile、saveAsNewAPIHadoopDataset
saveAsNewAPIHadoopFiledef saveAsNewAPIHadoopFile[F def saveAsNewAPIHadoopFile(path: String, keyClass: Class[_], valueClass: Class[_], outputFormatClass: Class[_ saveAsNewAPIHadoopFile用于将RDD数转载 2016-07-22 23:08:56 · 1728 阅读 · 0 评论 -
Spark算子:RDD行动Action操作(6)–saveAsHadoopFile、saveAsHadoopDataset
saveAsHadoopFiledef saveAsHadoopFile(path: String, keyClass: Class[_], valueClass: Class[_], outputFormatClass: Class[_ def saveAsHadoopFile(path: String, keyClass: Class[_], valueClass: Class[_转载 2016-07-22 23:07:09 · 7828 阅读 · 0 评论 -
Spark算子:RDD行动Action操作(5)–saveAsTextFile、saveAsSequenceFile、saveAsObjectFile
saveAsTextFiledef saveAsTextFile(path: String): Unitdef saveAsTextFile(path: String, codec: Class[_ saveAsTextFile用于将RDD以文本文件的格式存储到文件系统中。codec参数可以指定压缩的类名。var rdd1 = sc.makeRDD(1 to 1转载 2016-07-22 12:18:13 · 8971 阅读 · 1 评论 -
Spark算子:RDD行动Action操作(4)–countByKey、foreach、foreachPartition、sortBy
countByKeydef countByKey(): Map[K, Long]countByKey用于统计RDD[K,V]中每个K的数量。scala> var rdd1 = sc.makeRDD(Array(("A",0),("A",2),("B",1),("B",2),("B",3)))rdd1: org.apache.spark.rdd.RDD[(String, Int)] =转载 2016-07-22 12:13:45 · 3780 阅读 · 0 评论 -
Spark算子:RDD行动Action操作(3)–aggregate、fold、lookup
aggregatedef aggregate[U](zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)(implicit arg0: ClassTag[U]): Uaggregate用户聚合RDD中的元素,先使用seqOp将RDD中每个分区中的T类型元素聚合成U类型,再使用combOp将之前每个分区聚合后的U类型聚合成U类型,特别注转载 2016-07-22 12:06:42 · 4679 阅读 · 0 评论 -
Spark算子:RDD行动Action操作(2)–take、top、takeOrdered
takedef take(num: Int): Array[T]take用于获取RDD中从0到num-1下标的元素,不排序。scala> var rdd1 = sc.makeRDD(Seq(10, 4, 2, 12, 3))rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[40] at makeRDD at转载 2016-07-22 12:01:48 · 1861 阅读 · 0 评论 -
Spark算子:RDD键值转换操作(5)–leftOuterJoin、rightOuterJoin、subtractByKey
leftOuterJoindef leftOuterJoin[W](other: RDD[(K, W)]): RDD[(K, (V, Option[W]))]def leftOuterJoin[W](other: RDD[(K, W)], numPartitions: Int): RDD[(K, (V, Option[W]))]def leftOuterJoin[W](ot转载 2016-07-22 11:55:05 · 3699 阅读 · 0 评论 -
序列化与反序列化(一)
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨。 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括转载 2016-06-23 22:32:19 · 911 阅读 · 0 评论