Spark入门详解(一)-Spark简介

个人博客原文链接

简介

Spark是基于内存计算的大数据分布式计算框架。Spark基于内存计算,提供可交互查询方式,提供近实时处理方式,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。

Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala提供一个称为Actor的并行模型,其中Actor通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:Shared Nothing模型)。

特点

  1. 运行速度快
    数据从内存中读取,理论上速度可以高达HadoopMapReduce的100多倍。

  2. 适用性强

    • 支持3种语⾔言的API:scala、java、python,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。
    • 能够读取HDFS、Cassandra和HBase等离线数据。
    • 能够读取Kafka、Flume和Kinesis等实时数据。
    • 能够以Mesos、YARN或Standalone作为资源管理器调度JOB,进行集群资源的合理分配和容错,来完成Spark应用程序的计算。
  3. 通用性强
    Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core、Spark SQL、MLLib、GraphX、Spark Streaming和Structured Streaming等组件,提供离线计算、实时计算、图形化处理和机器学习等能力,能够无缝的集成并提供一站式解决方案。
    Spark生态圈架构图

    • Spark Core:包含Spark的基本功能。尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的。

    • Spark SQL:提供Hive查询语言(HiveQL)以及SQL查询语言(如Mysql)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark Core操作。

    • Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据。

    • Structured Streaming:以结构化的方式操作流式数据,能够像使用Spark SQL处理批处理一样,处理流数据。基于Event-Time,相比于SparkStreaming的Receive-Time更精确。

    • GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作。

    • MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。

Spark和Hadoop的区别

  1. Hadoop有两个核心模块,分布式存储模块HDFS和分布式计算模块MapReduce。

  2. Spark本身并没有提供分布式存储能力,因此Spark的数据存储大多依赖于Hadoop的分布式文件系统HDFS。

  3. Hadoop的MapReduce与Spark都可以进行数据计算,而相比于MapReduce,Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。

  4. Spark的容错性高,通用性好。

Spark的适用场景

  • Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小
  • 由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合
  • 数据量不是特别大,但是要求实时统计分析需求

Spark项目的pom.xml文件

环境:intellij idea 2017.3.4 + maven 3.5.0
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>spark</groupId>
    <artifactId>spark</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--<properties>-->
        <!--<scala.version>2.11.8</scala.version>-->
    <!--</properties>-->

    <!--引入依赖的jar包-->
    <dependencies>
        <!--spark-core在资源库的坐标信息-->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.3.2</version>
        </dependency>
        <!--spark-sql在资源库的坐标信息-->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>com.databricks</groupId>
            <artifactId>spark-avro_2.11</artifactId>
            <version>4.0.0</version>
        </dependency>
    </dependencies>
    
    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <testSourceDirectory>src/test/scala</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-my-jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

猜你喜欢

转载自blog.csdn.net/a1135497143/article/details/84333758