【一点资讯】MongoDB + Spark: 完整的大数据解决方案 www.yidianzixun.com
http://www.yidianzixun.com/home?page=article&id=0EMRJyyd&up=629
Spark的工作流程可以概括为三部曲:创建并发任务,对数据进行transformation操作,如map, filter,union,intersect等,然后执行运算,如reduce,count,或者简单地收集结果。
从RDDs到Spark – Blueve 湛蓝
http://blueve.me/archives/1437
在Spark官方的宣传中我们也可以看到,Hadoop能做到的事情,Spark也可以做,而且通常可以做得更好。事实上,越来越多的业内公司都开始试水Spark,因为其【核心卖点内存计算加速以及简洁优雅的编程接口不光可以为某些分布式批处理应用提速,还可以降低分布式计算应用的编写门槛。】
在Hadoop MapReduce计算框架中,面对一个需要多个MapReduce组合的大型任务,在每个MR任务之间,数据的交互都是通过HDFS来进行的,打个比方,现在有一个玩具,在中国制造,但这个玩具的牌子是美国的,并且该品牌在中国并没有开放销售,因此想要买这个玩具的话你就必须从国外买,于是这个玩具就经历了 中国制造 -> 中国仓库 -> 美国仓库 -> 中国仓库 -> 中国买家 这一过程,相信有过类似购物经历的人已经非常苦恼,既然是在中国制造的,那为什么不在中国的工厂制造完毕之后直接发给我呢?是的,其实这就是MapReduce计算模型的缺陷,Map -> Reduce -> HDFS -> Map -> Reudce…,人们很快就意识到了这个问题,于是DAG运算得以发展面世。我很喜欢Apache Tez主页上的这张图:
[图片上传中。。。(1)]
显而易见,将前一项作业的中间结果直接复用,将会带来巨大的性能提升。回到我们之前的例子中,仅仅这个改变就相当于变成了中国制造 -> 中国仓库 -> 中国买家,不仅转运费少了,物流的时间还大大缩短。实际上,Spark做得还要更为出色一些。
【一点资讯】Spark在GrowingIO数据无埋点全量采集场景下的实践 www.yidianzixun.com
http://www.yidianzixun.com/home?page=article&id=0EXq2NT4&up=234
因为Spark最近非常的火,所以它的社区资源非常的多,基本上所有主流的框架,像我们常见的Phoenix,Cassandra, MongoDB都有Spark DataSource相关的实现。还有一个就是它提供了一个统一的数据类型,把所有的外部表都统一转化成Spark的数据类型,这样的话不同的外部表能够相互的关联和操作。
打开 Spark 的正确姿势
http://mp.weixin.qq.com/s?timestamp=1477657509&src=3&ver=1&signature=BD1c9-SC3qjEWf0bIjcfETXtBXULaa-iiepZbaZzejUHg6D86q8cBwaWizGFo8gO0ka5vAig6IVvyYmyVrrUHxXW8aMFd4Mxxa4MtoymJr0081wQemkeKU5gdidnyERfao-fzUESge2uS3gX9FZZ5H694fylBt0jtuv8-xY28=
太好用了!相见恨晚!
Spark 火起来就是因为开发者发现这个框架太赞了。
杂七杂八的数据源都可以抽象成一个叫 RDD 的东西,然后就能用统一的高阶操作了,操作符的执行都会尽可能利用内存来加速。
如果抽象的时候能进一步指定 schema,就实现了 DataFrame接口,好处是它的操作符都会被 Spark 进一步优化 Physical Plan.
实时应用不需要再接入别的框架,直接用 Spark Streaming 就好了,编程模型和非实时是一样的,代码几乎不用改。
如果需要做复杂一些的数据分析和挖掘,MLlib 提供了常见的机器学习算法,不用再把数据来回倒腾了,ETL 以后的数据直接继续训练。
更不用提多语言支持和其他一些贴心细节了。说了那么多好,可是本文的主题不是吐槽么?
三个理由告诉你为什么需要在云端运行Spark_百度文库
http://wenku.baidu.com/link?url=Vzm06xWgOTTZNxJvORtEYtrF4Dsyx6iS7OrYsiP0SeW4iZFto8-ZKo-Wqhxw7wn2H5ddVSZ5oYMt9Q2t7qZz6tLxKO1muItJZvLY3FLu4GW
作为一种替代Hadoop的MapReduce,并用来处理大数据的技术,Spark具有极大的吸引力。它结合了速度、易于使用的编程模型和统一设计,让用户能够将交互式查询、流式分析、机器学习和图形计算合并到单一系统里面。
Storm与Spark streaming的比较 | winwill2012博客
http://qifuguang.me/2015/12/16/Storm%E4%B8%8ESpark-streaming%E7%9A%84%E6%AF%94%E8%BE%83/?utm_source=tuicool&utm_medium=referral
Spark是一个类似于MapReduce的分布式计算框架,其核心是弹性分布式数据集(RDD),提供了比MapReduce更丰富的模型,可以在快速在内存中对数据集进行多次迭代,以支持复杂的数据挖掘算法和图形计算算法。
解读2015之Spark篇:新生态系统的形成
http://www.infoq.com/cn/articles/2015-Review-Spark
转向以DataFrame为核心
在传统意义上Spark的核心是RDD和RDD之上的各种transformation和action,也就是各种算子,RDD可以认为是分布式的Java对象的集合。2013年推出了DataFrame,可以看做分布式的Row对象的集合。
开源大数据技术漫谈
http://sanwen8.cn/p/150ZTVb.html
随着大数据中计算越来越复杂,往往一个处理过程会分解成很多小的计算任务,这些计算任务的中间结果需要保存在文件中做为下一个任务的输入。这样在计算过程中就会引入多次磁盘读写,降低了整体的计算速度。基于流处理的开源方案解决了这个问题,通过把中间计算结果保存在内存中,大大减少了磁盘读写带来的性能损失。这类方案有代表性的有Spark,STORM,samza,其中Spark发展得最好。
Hive on Spark解析 – lxw的大数据田地
http://lxw1234.com/archives/2015/05/200.htm
Spark则是最初由加州大学伯克利分校开发的分布式计算引擎,借助于其灵活的DAG执行模式、对内存的充分利用,以及RDD所能表达的丰富语义,Spark受到了Hadoop社区的广泛关注。在成为Apache顶级项目之后,Spark更是集成了流处理、图计算、机器学习等功能,是业界公认最具潜力的下一代通用计算框架。鉴于此,Hive社区于2014年推出了Hive on Spark项目(HIVE-7292),将Spark作为继MapReduce和Tez之后Hive的第三个计算引擎。
Spark核心概念 - 瞌睡中的葡萄虎 - 博客园
http://www.cnblogs.com/luogankun/p/3801142.html
1、Application
** 基于spark的用户程序,包含了一个Driver Program以及集群上中多个executor;**
** spark中只要有一个sparkcontext就是一个application**;
启动一个spark-shell也是一个application,因为在启动shark-shell时就内置了一个sc(SparkContext的实例);
2、Driver Program
** 运行Application的main()函数并且创建SparkContext的程序**。通常用SparkContext代表Driver Program;
3、Cluster Manager
** 在集群上获取资源的外部服务**。如:standalone、yarn、mesos;
各种不同的集群的区别:只是任务调度的粗细粒度不同,对学习spark没有影响,自己在学习时使用standalone即可;
4、Worker Node
集群中任何一个可以运行Application代码的节点;
可以在Worker Node启动Executor进程;
5、Executor
在Worker Node上为某Application启动一个进程,该进程负责运行任务,并且负责将数据存在硬盘或者内存中;每个Application都有各自独立的executors;
比如:应用A在一个Node上启动Executor,B应用也在同一个Node上启动Executor,他们各自的Executor是相互隔离的,运行在不同的JVM上。不同的应用对应不同的Executor;
6、Job
包含很多task的并行计算,spark中的一个action对应一个job,如:collect、count、saveAsTextFile;
用户提交的Job会提交给DAGScheduler,Job会被分解成Stage(TaskSet) DAG;
RDD的transformation只会记录对元数据的操作(map/filter),而并不会真正执行,只有action触发时才会执行job;
7、Stage
每****个Job会被拆分成多组任务,每组****任务****被称为一个Stage,可称为TaskSet;
一个stage的边界往往是从某个地方取数据开始(如:sc.readTextFile),在shuffle时(如:join、reduceByKey等)终止;
一个job的结束(如:count、saveAsTextFile等)往往也是一个stage的边界;
有两种类型的Stage:shuffle和result;
8、Task
被送到executor上的工作单元;
spark分为2类task:
在Spark中有两类Task:shuffleMapTask和ResultTask,第一类Task的输出是shuffle所需数据,第二类task的输出是result;
stage的划分也以此为依据,shuffle之前的所有变换是一个stage,shuffle之后的操作是另一个stage;
比如:rdd.parallize(1 to 10).foreach(println)这个操作没有shuffle,直接就输出了,那么它的task就是resulttask,stage也只有一个;
如果rdd.map((x,1)).reduceByKey(+).foreach(println),这个job因为有reduce,所以有个一shuffle过程,那么reduceByKey之前是一个stage,执行shuffleMapTask,输出shuffle所需要的数据,reduceByKey到最后是一个stage,直接就输出结果了。
如果一个job中有多次shuffle,那么每个shuffle之前都是一个stage;
9、Partition
partition类似hadoop的split,计算是以partition为单位进行的
详细信息参见官方文档:http://spark.apache.org/docs/latest/cluster-overview.html
RDD: Resilient Distributed Dataset
RDD的特点:
1、A list of **partitions **
一系列的分片:比如说64M一片;类似于Hadoop中的split;
2、A **function **for computing each split
在每个分片上都有一个函数去迭代/执行/计算它
3、A list of **dependencies **on other RDDs
一系列的依赖:RDDa转换为RDDb,RDDb转换为RDDc,那么RDDc就依赖于RDDb,RDDb就依赖于RDDa
4、Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
对于key-value的RDD可指定一个partitioner,告诉它如何分片;常用的有hash,range
5、Optionally, a list of **preferred location(s) **to compute each split on (e.g. block locations for an HDFS file)
要运行的计算/执行最好在哪(几)个机器上运行。数据本地性。
为什么会有哪几个呢?
比如:hadoop默认有三个位置,或者spark cache到内存是可能通过StorageLevel设置了多个副本,所以一个partition可能返回多个最佳位置。
前三个特点对应于Lineage,后两个对应于Optimized
execution
分类: Spark