zoukankan      html  css  js  c++  java
  • Spark 学习笔记1 (常见术语 )

    本来没打算学Spark 的,不过时机很逗。

    最膜拜的大神做spark分享,还是其中最好玩的notebook。这不就是另外一个 HUE吗,但感觉更好玩。

    刚好新的Spark 2.x 要问世了,大神在组织战队一起迭代。就此开始跟着大神脚后跟一点点的了解,学习争取入门吧。

    https://github.com/endymecy/spark-programming-guide-zh-cn  (官方文档)

    https://www.gitbook.com/book/endymecy/spark-config-and-tuning/details (参数与调优)

    术语总览:

    transformation,action,RDD

    job,task,stage

    executor

    persist 持久化(一般把RDD持久化到内存中)

    两种抽象:

    1. RDD 弹性分布式数据集,一个可并行操作的有容错机制的数据集合

    2. shared variables 共享变量,包含两种

    • broadcast variables  广播变量:缓存一个只读的变量在每台机器上面,而不是每个任务保存一份拷贝。 通过方法 var1.sc.broadcast(v) 创建, var1.value()可以查看它的值
    • accumulator 累加器:一种只能通过关联操作进行“加”操作的变量,它能够高效的应用于并行操作中。   sc.accumulator(v)

    并行集合:

    parallelized collections, 可以在已有的集合上调用 sc.parallelize(yourCollection) 方法创建。

    实例:

    scala> val data=Array(1,2,3,4,5)               # 创建一个已有集合
    data: Array[Int] = Array(1, 2, 3, 4, 5)
    
    scala> val distData=sc.parallelize(data)       # 复制成一个并行数据集,即RDD 
    distData: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[2] at parallelize at <console>:17
    
    scala> distData.reduce((a,b)=>a+b)             # 并行计算总和
    res4: Int = 15

    并行集合一个很重要的参数是切片数(slices),表示一个并行数据集切分的份数。

    一般Spark可以自动决定,你也可以通过设置,在第二个参数如 sc.parallelize(data, 10)

    外部数据集:

    Spark 支持文本文件(text files),SequenceFiles 和其他 Hadoop InputFormat。

    通过 sc.textFile 来创建,然后可以对之做分布式操作。

    实例:

    scala> val text1=sc.textFile("/data/test/test_yy.txt")         # 把文件导入为并行数据集,即RDD
    text1: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[4] at textFile at <console>:15
    
    scala> text1.map(s=>s.length).reduce((a,b)=>a+b)               # 并行计算文件的行数
    res5: Int = 8
    

    RDD操作

    • 转换(transformations)   从已经存在的数据集中创建一个新的数据集;
    • 动作(actions)        在数据集上进行计算之后返回一个值到驱动程序

     常用的一些transformation:

    • map(func)
    • filter(func)
    • flatmap(func)    类似于 map,但是每个输入项能被映射成多个输出项(所以 func 必须返回一个 Seq,而不是单个 item)

    常用的一些actions:

     RDD 持久化(persist)

    • RDD持久化其实也就是缓存的问题,通过各种操作(operations)持久化(或者缓存)一个集合到内存中。
    • 可以通过persist()或者cache()方法持久化一个rdd。
    • Spark的缓存是容错的:如果RDD的任何一个分区丢失,它可以通过原有的转换(transformations)操作自动的重复计算并且创建出这个分区

    DStream

    离散数据流(discretized stream)是Spark Streaming支持的一个高级抽象。

    可以利用从Kafka, Flume和Kinesis等源获取的输入数据流创建,也可以在其他DStream的基础上通过高阶函数获得。在内部,DStream是由一系列RDDs组成。

    Checkpoint

     不同的集群管理器:

    • Spark Standalone   独立的Spark集群
    • Mesos
    • YARN   使用了YARN的资源分配策略
  • 相关阅读:
    动态传参
    函数的介绍
    文件的操作
    send email with formatted table
    minimize and close window with customed winform
    python algorithm
    something important about docker
    book list
    which language is suitable for what to do
    Find Duplicate Items in list fast
  • 原文地址:https://www.cnblogs.com/skyEva/p/5479926.html
Copyright © 2011-2022 走看看