• Spark 开发环境搭建


    1.创建maven工程

    创建project--Java

    创建module--maven

    2.添加依赖

    <dependencies>
        <!--spark依赖-->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!--scala依赖-->
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.8</version>
        </dependency>
        <!--Hadoop  依赖-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.3</version>
        </dependency>
    
    </dependencies>

    3.添加scala支持

    选择scala 2.11 版本

    4.编写spark代码--测试WordCount

    package com.sparkcore
    
    import org.apache.spark.{SparkConf, SparkContext}
    
    object WordCount {
    
        def main(args: Array[String]): Unit = {
          //第一步:创建sparkConf
          val conf = new SparkConf()
            //设置spark的运行模式:本地模式(用来测试),standalone(spark集群模式),yarn,Mesos,k8s
            //通常情况下:用本地模式测试(开发环境),用yarn部署(生产环境)
            //从spark2.3版本起支持k8s模式,未来spark程序大多会运行在k8s集群上
            //本地模式:local[x];x=1,代表启动一个线程,
            // X=2代表启动两个线程,x=* 代表启动跟所在机器cpu核数相等的线程数
            //注意:不能使用local[1],原因:spark本地模式是通过多线程来模拟分布式运行
            .setMaster("local[*]").setAppName("wordcount")
          //第二步:创建sparkContext
          val sc = new SparkContext(conf)
    
          //第三步:通过sparkcontext读取数据,生成rdd
          //4:尽可能与CPU核数对应
          val rdd=sc.textFile("d:\test\01.txt",4)
          //path:代表文件存储路径 minPartitions:最小分区数
          //分区是spark进行并行计算的基础
          println(rdd)
          //第四步:把rdd作为一个集合,进行各种运算
    
          rdd.map(line=>line.split(" ")).groupBy(x=>x)
            .map(kv=>(kv._1,kv._2.size))
            .collect().foreach(println)
    
        }
    }
    
    

    总结:

    Application: 利用sparkApi进行的计算

    Submit:提交,把写好的spark应用提交给executor执行

    Executor:就是运行spark任务的机器的代称

    Jetty:web服务器(区别于tomcat,轻量级,可做嵌入式开发)

    DAG:有向无环图

    在计算机中图是一种数据结构:由边和顶点组成,其中边用来表示关系,顶点用来表示单位(数据)

    在spark中用DAG来表示计算任务。

    有向是为了表示计算任务是有步骤的,是有先后顺序的。

    无环:用来表示任务不会反复执行,避免死循环

    DAGScheduler:用来调度任务的一个线程

    Stage:表示spark任务运行的一个阶段,spark任务可能有一个或多个stage.  stage划分的标准是:shuffle(归并排序)

    Task:一个分区的一个sparkAPI调用过程就是task

    Shuffle:过程就是把相同的key放在同一个分区,就是算一个task。

    Shuffle:形成宽依赖的过程叫shuffle:典型的如:group

    ,join,distinct。

    窄依赖:子rdd的一个分区依赖与父rdd的一个分区;典型的操作有:map,flatMap,filter…

    宽依赖:子rdd的一个分区依赖与父rdd的多个分区

    Appilication(job)可能多个stage,一个stage可能多个task

  • 相关阅读:
    webim-界面细节调整
    使用PHP得到所有的HTTP请求头_还有应答头
    Bootstrap学习的点点滴滴
    asterisk中eyebeam与移动的IMS帐号对接
    总结Ajax跨域调用问题
    Spring【基础】-注解-转载
    Spring-【高阶】注解-转载
    让你的IDEA倍爽
    IDEA的git密码修改
    Idea设置签名
  • 原文地址:https://www.cnblogs.com/pigdata/p/10305574.html
Copyright © 2020-2023  润新知