[tips]spark


//
Spark入门(Python版) - 文章 - 伯乐在线
http://blog.jobbole.com/86232/
Hadoop还存在很多已知限制,尤其是MapReduce。对MapReduce编程明显是困难的。对大多数分析,你都必须用很多步骤将Map和Reduce任务串接起来。这造成类SQL的计算或机器学习需要专门的系统来进行。更糟的是,MapReduce要求每个步骤间的数据要序列化到磁盘,这意味着MapReduce作业的I/O成本很高,导致交互分析和迭代算法(iterative algorithms)开销很大;而事实是,几乎所有的最优化和机器学习都是迭代的。

为了解决这些问题,Hadoop一直在向一种更为通用的资源管理框架转变,即YARN(Yet Another Resource Negotiator, 又一个资源协调者)。YARN实现了下一代的MapReduce,但同时也允许应用利用分布式资源而不必采用MapReduce进行计算。通过将集群管理一般化,研究转到分布式计算的一般化上,来扩展了MapReduce的初衷。

Spark是第一个脱胎于该转变的快速、通用分布式计算范式,并且很快流行起来。Spark使用函数式编程范式扩展了MapReduce模型以支持更多计算类型,可以涵盖广泛的工作流,这些工作流之前被实现为Hadoop之上的特殊系统。Spark使用内存缓存来提升性能,因此进行交互式分析也足够快速(就如同使用Python解释器,与集群进行交互一样)。缓存同时提升了迭代算法的性能,这使得Spark非常适合数据理论任务,特别是机器学习。


//
Transwarp - 新闻详情
http://www.transwarp.io/news/detail?id=29
Spark作为核心的计算引擎,弥补了采用MapReduce计算引擎的缺点。**Spark内存计算技术通过把任务描绘成DAG、把分布式数据抽象成弹性分布式数据集(RDD)、中间结果存于内存、减少Shuffle过程的磁盘IO等关键技术,性能大幅领先于MapReduce **。星环科技经过多个成功案例的积累与丰富实践经验的总结,已经将Inceptor打造成成熟、稳定、高性能的分析平台,解决了开源Spark不稳定,例如:运行24小时自动死掉、运行SQL时快时慢、有时比MapReduce还慢、大内存计算时经常没有响应等问题。


图片

Spark系列(四)整体架构分析 - 会飞的纸盒 - 博客园
http://www.cnblogs.com/jianyuan/p/Spark%E6%95%B4%E4%BD%93%E6%9E%B6%E6%9E%84%E5%88%86%E6%9E%90.html

Paste_Image.png

//
Spark技术内幕:Executor分配详解 - 推酷
http://www.tuicool.com/articles/VVFnIfq

Paste_Image.png

//
通过可视化来了解你的Spark应用程序-CSDN.NET
http://www.csdn.net/article/2015-07-08/2825162

Paste_Image.png

//讲解 Spark API 最好的资料
Apache Spark RDD API Examples
http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html
讲解 Spark API 最好的资料 - 郭同jet · 静心 - 博客频道 - CSDN.NET
http://blog.csdn.net/guotong1988/article/details/50556461

spark作者讲spark - 郭同jet · 静心 - 博客频道 - CSDN.NET
http://blog.csdn.net/guotong1988/article/details/39023967


Spark API 详解/大白话解释 之 RDD、partition、count、collect - 郭同jet · 静心 - 博客频道 - CSDN.NET
http://blog.csdn.net/guotong1988/article/details/50554034

RDD定义:
任何数据在Spark中都被转换为RDD。
一个RDD可以看成是一个数组
不过是分到各个分区,分布在不同的机器上,可并行处理。
分区的定义: 一个RDD有多个RDD分区 一个RDD分区只在一个机器上 一个机器可有多个RDD分区 http://stackoverflow.com/questions/31359219/relationship-between-rdd-partitions-and-nodes

//
Spark API 详解/大白话解释 之 reduce、reduceByKey - 郭同jet · 静心 - 博客频道 - CSDN.NET
http://blog.csdn.net/guotong1988/article/details/50555671

reduce(binary_function) reduce将RDD中元素前两个传给输入函数,产生一个新的return值,新产生的return值与RDD中下一个元素(第三个元素)组成两个元素,再被传给输入函数,直到最后只有一个值为止。


//
Spark:用Scala和Java实现WordCount - 白乔专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/bluejoe2000/article/details/41556979

val line = sc.textFile(args(0))
line.flatMap(.split(" ")).map((, 1)).reduceByKey(+).collect().foreach(println)

//
Spark系列(九)DAGScheduler工作原理 - 会飞的纸盒 - 博客园
http://www.cnblogs.com/jianyuan/p/Spark%E7%B3%BB%E5%88%97%E4%B9%8BDAGScheduler%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86.html

8
// 产生HadoopRDD->MapPartitionsRDD

9
val lines = sc.textFile("****C://Users//Administrator//Desktop//wordcount.txt****", 1)

10
// 产生FlatMappedRDD

11
val words = lines.flatMap(line=>line.split("**** ****"))

12
// 产生MapPartitionsRDD

13
val pairs = words.map(word=>(word,1))

14
//产生MapPartitionsRDD -> ShuffleRDD -> MapPartitionsRDD, 产生三个RDD

15
val result= pairs.reduceByKey(_ + _);

16
// foreach为action操作,通过SparkContext的runJob方法去触发job(DAGScheduler)

17
result.foreach(count=>println(count))


【SDCC 2016】直击汤森路透、苏宁、京东、腾讯、Databricks的Spark实战技术分享|PPT下载 - 极客头条 - CSDN.NET
http://geek.csdn.net/news/detail/124819
天眼系统整合Spark Streaming,HBASE,Kafka,Redis等技术实现了秒级数据延迟的物流全程监控。
Spark 2.0具有新的tungsen引擎、全阶段代码优化、Cache感知算法、更好的Parquet并行解析器等优势。
范文臣通过代码实例剖析Spark SQL运行机制,其提供的DataFrame/Dataset接口,也已代替RDD成为Spark新一代的用户接口。


[官方API]pyspark package — PySpark 2.0.2 documentation
http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.RDD


『 Spark 』3. spark 编程模式 | Taotao's Zone
http://litaotao.github.io/spark-programming-model

写在前面
本系列是综合了自己在学习spark过程中的理解记录 + 对参考文章中的一些理解 + 个人实践spark过程中的一些心得而来。写这样一个系列仅仅是为了梳理个人学习spark的笔记记录,所以一切以能够理解为主,没有必要的细节就不会记录了,而且文中有时候会出现英文原版文档,只要不影响理解,都不翻译了。若想深入了解,最好阅读参考文章和官方文档。
其次,本系列是基于目前最新的 spark 1.6.0 系列开始的,spark 目前的更新速度很快,记录一下版本号还是必要的。 最后,如果各位觉得内容有误,欢迎留言备注,所有留言 24 小时内必定回复,非常感谢。
Tips: 如果插图看起来不明显,可以:1. 放大网页;2. 新标签中打开图片,查看原图哦;3. 点击右边目录上方的 present mode 哦。

  1. spark 基本编程模式
    spark 里有两个很重要的概念:SparkContext [一般简称为 sc] 和 RDD,在上一篇文章中 『 Spark 』2. spark 基本概念解析 有讲到。可以说,sc 和 RDD 贯穿了 spark app 的大部分生命周期,从 app 的初始化,到数据的清洗,计算,到最后获取,展示结果。
    为了更加深入的了解 RDD 和基于 RDD 的编程模型,我们先把 RDD 的属性简单的分一个类,然后再通过一张流程图来理解。
    1.1 RDD 的属性
    接触过 RDD 的人肯定都知道 transformaction 这两个核心概念,甚至很多人都认为 RDD 仅仅有 transformaction 这两个概念。殊不知其实 RDD 里面还有很多其他方法,下面我们来简单的分个类,在看这里的时候最好参考一下官方的 api 文档
    RDDaction
    : count, take, sample, first, collect …
    transform
    : foreach, glom, map …
    method
    : cache, checkpoint, id, isCheckpointed, isEmpty, keys, lookup, max, mean, name, setName …
    property
    : context

看到了吗,这里其实 RDD 其实有很多既不是 transform 也不是 action 的函数和属性,在编写 spark app 的时候,其实很多时候我们都会用到那些 method,这样在开发调试过程中都会更加方便。比如说 cache
, setName
, lookup
, id
这些,在开发过程中都很有用。
1.2 spark 编程模式图

spark-programming-model.jpg

如图所示,我们构建 spark app,一般都是三个步骤:
加载数据集,这里的数据集大概分为两组:一种是不变的,静态数据集,大多数场景都是从数据库,文件系统上面加载进来
另一种是动态的数据集,一般做 streaming 应用的时候用到,大多数场景是通过 socket 来加载数据,复杂场景可以通过文件系统,akka actors,kafka,kinesis 和 一些第三方提供的 streaming api [twitter 等] 来作为数据源加载数据

处理数据,这是重点中的重点,不过不外乎都是从三个方面来完成这里的数据清理,逻辑运算等:自定义的一些复杂处理函数或者第三方包 [下面我们称为函数集]
通过 RDD 的 transform,action 和函数集来完成整个处理,计算流程
通过 RDD 提供的 cache,persist,checkpoint 方法把一些处理流程中的重要处理节点和常用数据缓存和备份,以加速处理,计算速度

结果展示,这里一般情况都是使用 RDD 的 collect,take,first,top 等方法把结果取出来,更常用的是先把结果取出来,放到一个数据库或文件系统上,然后再提供给专门展示结果的另一个 application 使用。

  1. 例子:MC [Monte Carlo]
    下面我将从几个方面来介绍这个例子:首先是介绍蒙特卡罗方法的基本概念和应用,然后是介绍如何用蒙特卡罗方法来估算 pi 的值,最后是看在 spark 集群中如何用多种方法来实现一个蒙特卡洛应用来计算 pi 的值。
    2.1 蒙特卡罗方法介绍

from wiki

Monte Carlo methods (or Monte Carlo experiments) are a broad class of

computational algorithms that rely on repeated random sampling to obtain

numerical results. They are often used in physical and mathematical problems

and are most useful when it is difficult or impossible to use other mathematical

methods. Monte Carlo methods are mainly used in three distinct problem

classes:[1] optimization, numerical integration, and generating draws from

a probability distribution.

总的来说,蒙特卡罗是一种基于随机样本实验来进行估值的一种计算方法。

2.2 蒙特卡罗方法估算 pi 值原理
用蒙特卡罗方法估算 pi 值,核心方法是利用正方形和圆形面积的比例:
首先,我们在坐标轴上构造一个边长为 1 的正方形
其次,我们以 (0, 0) 为圆心,构造一个半径为 1 的圆形
此时我们知道这个圆形有 1/4 是在正方形中的,正方形的面积和这 1/4 圆的面积分别是:1 和 pi/4,即 1/4 圆的面积和正方形面积之比刚好是 pi/4
然后通过蒙特卡罗模拟,看看这个比例大概是多少,模拟方法如下:随机扔 n 个点 (x, y),其中 x, y 都在 0 和 1 之间
如果 x^2 + y^2 < 1,则把这个点标注为红色,表示这个点落在圆内
最后数数有 n 个点中有多少点是红点,即落在圆内,假设点数为 m
则这个 1/4 圆的面积和正方形面积的比例应该是:m/n,即 m/n = pi/4 => pi = 4*m/n

mc.gif

2.3 Python 实现蒙特卡罗方法估算 pi 值
import numpy as np

def mc_pi(n=100):

"""Use Monte Calo Method to estimate pi.

"""

m = 0

i = 0

while i < n:

x, y = np.random.rand(2)

if x2 + y2 < 1:

m += 1

i += 1

pi = 4. * m / n

res = {'total_point': n, 'point_in_circle': m, 'estimated_pi': pi}

return res

spark-programming-model-11.jpg

2.4 在 spark 集群中实现蒙特卡罗方法
我们按照上面写的三大步骤来写这个 spark 应用:
加载数据集

iterate number

total = int(100 * 10000)

local_collection = xrange(1, total)

parallelize a data set into the cluster

rdd = sc.parallelize(local_collection) \

.setName("parallelized_data") \

.cache()

处理数据

randomly generate points

def map_func(element):

x = random.random() ## [0, 1)

y = random.random() ## [0, 1)

return (x, y) ## random point

def map_func_2(element):

x, y = element

return 1 if x2 + y2 < 1 else 0

rdd2 = rdd.map(map_func) \

.setName("random_point") \

.cache()

calculate the number of points in and out the circle

rdd3 = rdd2.map(map_func_2) \

.setName("points_in_out_circle") \

.cache()

结果展示

how many points are in the circle

in_circle = rdd3.reduce(operator.add)

pi = 4. * in_circle / total

print 'iterate {} times'.format(total)

print 'estimated pi : {}'.format(pi)

2.5 Seems a little complex, really?
上面这个例子,可能会让一些初步接触 spark 的人很困惑,”明明几行代码就能解决的问题在 spark 里还有按照这些步骤写这么多代码?难道是老湿又骗我了吗?”。


wawawa.gif

其实,就从上面这个例子看起来,似乎 spark 真的没有什么优势,但是,上面这个例子的目的是表明 spark 的编程模式,如果你还不相信,可以把模拟次数加到千万或者亿次以上看看效果。
如果,如果你还是纠结于 “我骗了你,spark 没有梦想中的那么好” 的话,那看下面这一行代码吧,它也完成了同样的事情:

version 1

sc.parallelize(xrange(total)) \

.map(lambda x: (random.random(), random.random())) \

.map(lambda x: 1 if x[0]2 + x[1]2 < 1 else 0) \

.reduce(lambda x, y: x + y) \

/ float(total) * 4

version 2

sc.parallelize(xrange(total)) \

.map(lambda x: 1 if sum(np.random.random(2) ** 2) else 0) \

.reduce(lambda x, y: x + y) \

/ float(total) * 4

  1. Next
    下一篇,介绍 spark 的 RDD,之后会单独介绍 spark 的 dataframe 和 datasets。
  2. 打开微信,扫一扫,点一点,棒棒的,_
    wechat_pay.png

    参考文章
    spark-rdd-paper : Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing
    spark python API
    spark context API
    机器学习相关数据集-斯坦福
    spark pagerank example
    latex online editor 在线latex公式编辑器
    阮一峰:蒙特卡罗
    蒙特卡罗,wikipedia
    科学网:蒙特卡罗

本系列文章链接
『 Spark 』1. spark 简介
『 Spark 』2. spark 基本概念解析
『 Spark 』3. spark 编程模式
『 Spark 』4. spark 之 RDD
『 Spark 』5. 这些年,你不能错过的 spark 学习资源
『 Spark 』6. 深入研究 spark 运行原理之 job, stage, task
『 Spark 』7. 使用 Spark DataFrame 进行大数据分析
『 Spark 』8. 实战案例 | Spark 在金融领域的应用 | 日内走势预测
『 Spark 』9. 搭建 IPython + Notebook + Spark 开发环境
『 Spark 』10. spark 应用程序性能优化|12 个优化方法
『 Spark 』11. spark 机器学习
『 Spark 』12. Spark 2.0 特性介绍
『 Spark 』13. Spark 2.0 Release Notes 中文版---

Spark在腾讯数据仓库TDW的应用 | 标点符
http://www.biaodianfu.com/spark-tdw.html?utm_source=tuicool&utm_medium=referral


大数据即服务(BDaaS):大数据行业的下一个热门丨数据工匠简报(6.20) - 简书 http://www.jianshu.com/p/3a37d30005ff

对于Impala和Spark SQL,主要基于内存计算,对机器资源要求较高,单条SQL能够满足秒级动态查询响应,但交互页面通常含有多条SQL查询请求,在超大规模数据规模下,动态计算亦难以满足要求。后来,我们关注到了基于MapReduce预计算生成Cube并提供低延迟查询的Apache Kylin解决方案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容