spark入门

  • DriverProgram 就是程序员所设计的 Spark 程序,在 Spark 程序中必须定义 SparkContext,它是开发 Spark 应用程序的入口。

  • SparkContext 通过 Cluster Manager 管理整个集群,群集中包含多个 Worker Node,在每个 Workder Node 都有 Executor 负责执行任务。

Cluster Manager 可以在下列模式下运行:

  • 本地运行(Local Machine)——这只需要在程序中 import Spark 的链接库就可以实现。在本地运行时,对于只安装在一台计算机上时最方便,适合刚入门时学习、测试使用。
  • Spark Standalone Cluster——这是由 Spark 提供的 Cluster 管理模式,如果没有架设 Hadoop Multi Node Cluster,则可以架设 Spark Standalone Cluster,实现多台计算机并行计算。在这个模式下仍然可以直接存取 Local Disk 或是 HDFS。
  • Hadoop YARN (Yet Another Resource Negotiator),它是 Hadoop2. X 新架构中更高效率的资源管理核心。Spark 可以在 YARN上运行,让 YARN 帮助它进行多台机器的资源管理。
  • 在云端运行——针对更大型规模的计算工作,本地机器或自建集群的计算能力恐怕难以满足。此时可以将 Spark 程序在云平台。上运行,例如 AWS 的 EC2 平台。使用云计算的好处是不需要自己架设的费用,用多少付多少,随时可扩充。

scala 介绍

Spark 支持 Scala、Java 和 Python 等语言,不过 Spark 本身是用 scala 语言开发的,所以在 Spark 应用程序开发中,Scala 被认为是当前和 Spark 兼容最好的语言。Scala 具有以下特点:

  • Scala 可编译为 Java bytecode 字节码,也就是说它可以在 JVM (Java Virtual Machine)上运行,具备跨平台能力。
  • 现有 Java 的链接库都可以使用,可以继续使用丰富的 Java 开放源码生态系统。
  • Scala 是一种函数式语言。在函数式语言中,函数也是值,与整数字符串等处于同一地位。函数可以作为参数传递给其他函数。
  • Scala 是一种纯面向对象的语言,所有的东西都是对象,而所有的操作都是方法。
  • 因为 Spark 本身是以 Scala 开发的,所以必须先安装 Scala。我们将安装在 master 虚拟机上。
#创建 intRDD
val intRDD= sc. Parallelize (List (3,1,2, 5,5))
#intRDD转化为Array
intRDD.collect()

运算

map运算

Map 运算可以通过传入的函数,将每一个元素经过函数运算产生另外一个 RDD。如下,RDD 通过传入的函数 addOne,将每一个元素加 1 而产生另外一个 RDD。

def addOne (x: Int): Int={ return  (x+1)}
intRDD. map  (addOne). collect  ()
#匿名函数
intRDD.map(x =>x+1).collect()
#匿名函数+匿名参数
intRDD.map(_+1)

filter运算

#让 intRDD 筛选数字小于 3
intRDD. filter (x=> x <3). collect ()
#使用匿名参数让筛选数字小于 3,可使用下划线“_”来取代 x=> x <3
intRDD. filter (_<3). collect ()
#字符串的筛选
strRDD.filter(x =>x.contains("ra")).collect()

distinct运算

#删除重复的元素
intRDD.distinct().collect()
strRDD.distinct().collect()

randomSplit运算

#随机将rdd按比例切分,返回一个数组
val sRDD=intRDD.randomSplit(Array(0.2,0.8))
sRDD(0).collect
sRDD(1).collect

groupBy

groupBy 可以按照传入的匿名函数规则,将数据分为多个 Array。

#使用 groupBy 运算将整个集合分成奇数与偶数
#使用 groupBy 运算时,传入的匿名函数将整个集合按照奇数与偶数分为两个 Array,此运算会返回 Array [(String, Iterable [Int])]。
val gRDD=intRDD.groupBy (
x=> {if (x % 2==0) "even" else "odd"}
). collect

#读取第 1 个是偶数的 Array
gRDD (0)
#读取第 2 个是奇数的 Array
gRDD (1)

多个rdd转换运算

#创建 3 个范例 RDD
val intRDD1 = sc. Parallelize (List (3,1, 2,5,5))
val intRDD2 =sc. Parallelize (List (5, 6)) 
val intRDD3 = sc. Parallelize (List (2,7))

#union 并集运算
#可以使用下列命令,将 intRDD1、intRDD2、intRDD3 进行并集运算。
intRDD1. union (intRDD2). union (intRDD3), collect ()
#使用++符号进行并集运算
(intRDD1 ++ intRDD2++ intRDD3). collect ()

#intersection 交集运算
#将 intRDD1、intRDD2 进行交集运算
intRDD1. intersection (intRDD2). collect ()

#subtract 差集运算
intRDD1. subtract (intRDD2). collect ()

#cartesian 笛卡尔乘积运算
intRDD1. cartesian  (intRDD2). collect ()

spark部署

./bin/spark-submit --class org.apache.spark.examples.SparkPi \        #作业类名
    --master yarn \                       #spark模式
    --deploy-mode cluster \                #spark on yarn 模式
    --driver-memory 4g \                    #每一个driver的内存
    --executor-memory 2g \                    #每一个executor的内存
    --executor-cores 1 \                        #每一个executor占用的core数量
    --queue thequeue \                            #作业执行的队列
    examples/jars/spark-examples*.jar \            #jar包
    10                                               #传入类中所需要的参数

spark 任务划分

  1. 一个jar包就是一个Application

  2. 一个行动操作就是一个Job, 对应于Hadoop中的一个MapReduce任务

  3. 一个Job有很多Stage组成,划分Stage是从后往前划分,遇到宽依赖则将前面的所有转换换分为一个Stage

  4. 一个Stage有很多Task组成,一个分区被一个Task所处理,所有分区数也叫并行度。

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