Spark学习笔记(一)

Spark简介

基于内存的集群计算框架,用scala程序编写

  • 近实时计算
  • 迭代
  • DAG

(一)spark的关键组件
1. Master
2. Worker
3. SparkContext(客户端)
4. CoarseGrainedExecutorBackend(standalone模式)

(二)产生Rdd的三种API
Rdd:计算单元,定义了输入输出类型以及算法
转化(transformation),缓存(Cache)、行动(action)

  • 只有action才会进行计算,从源代码角度看,action都调用了runjob()函数,向集群提交了计算任务
  • transformation操作:
    map(func):对调用map的RDD数据集中的每个element都使用func,然后返回一个新的RDD,这个返回的数据集是分布式的数据集

    filter(func) : 对调用filter的RDD数据集中的每个元素都使用func,然后返回一个包含使func为true的元素构成的RDD

    flatMap(func):和map差不多,但是flatMap生成的是多个结果

    mapPartitions(func):和map很像,但是map是每个element,而mapPartitions是每个partition

    mapPartitionsWithSplit(func):和mapPartitions很像,但是func作用的是其中一个split上,所以func中应该有index

    sample(withReplacement,faction,seed):抽样

    union(otherDataset):返回一个新的dataset,包含源dataset和给定dataset的元素的集合

    distinct([numTasks]):返回一个新的dataset,这个dataset含有的是源dataset中的distinct的element

    groupByKey(numTasks):返回(K,Seq[V]),也就是hadoop中reduce函数接受的key-valuelist

    reduceByKey(func,[numTasks]):就是用一个给定的reduce func再作用在groupByKey产生的(K,Seq[V]),比如求和,求平均数

    sortByKey([ascending],[numTasks]):按照key来进行排序,是升序还是降序,ascending是boolean类型

    join(otherDataset,[numTasks]):当有两个KV的dataset(K,V)和(K,W),返回的是(K,(V,W))的dataset,numTasks为并发的任务数

    cogroup(otherDataset,[numTasks]):当有两个KV的dataset(K,V)和(K,W),返回的是(K,Seq[V],Seq[W])的dataset,numTasks为并发的任务数

    cartesian(otherDataset):笛卡尔积就是m*n

  • action操作:
    reduce(func):说白了就是聚集,但是传入的函数是两个参数输入返回一个值,这个函数必须是满足交换律和结合律的

    collect():一般在filter或者足够小的结果的时候,再用collect封装返回一个数组

    count():返回的是dataset中的element的个数

    first():返回的是dataset中的第一个元素

    take(n):返回前n个elements,这个士driver program返回的

    takeSample(withReplacement,num,seed):抽样返回一个dataset中的num个元素,随机种子seed

    saveAsTextFile(path):把dataset写到一个text file中,或者hdfs,或者hdfs支持的文件系统中,spark把每条记录都转换为一行记录,然后写到file中

    saveAsSequenceFile(path):只能用在key-value对上,然后生成SequenceFile写到本地或者hadoop文件系统

    countByKey():返回的是key对应的个数的一个map,作用于一个RDD

    foreach(func):对dataset中的每个元素都使用func

( 三)源码分析
1.生成相关的上下文,负责和Master,executor通信,请求资源,搜集task执行的进度等

val ssc = new SparkContext(args(0), “”, System.getenv(“SPARK_HOME”),Seq(System.getenv(“SPARK_EXAMPLES_JAR”)))

2.仅仅是在定义相关的运算规则(也就是画一张有向无环图),没有执行实际的计算

 val lines = ssc.textFile(args(1)) //输入
 val words = lines.flatMap(x =>x.split(" "))
 words.cache()//缓存
 val wordCounts = words.map(x =>(x, 1)  )
 val red = wordCounts.reduceByKey( (a,b)=>{a + b} )

3.当Action被调用的时候,才会真正的向spark集群去提交,根据第二 部分生成Rdd链,再根据分区算法生成partition,每个partition对应一个Task,把这些task,交给Excutor去执行

 red.saveAsTextFile(“/root/Desktop/out”) //行动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值