spark学习

Spark概述

Spark定义

spark是一种基于内存的快速、通用、可扩展S的大数据分析计算引擎

Spark Core 中提供了Spark最基础核心的功能 Spark SQL是Spark用来操作结构化数据的组件 Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的ApI

Spark和Hadoop

Spark和Hadoop 的根本差异是多个作业之间的数据通信问题 : Spark 多个作业之间数据通信是基于内存,而 Hadoop 是基于磁盘。

Hadoop mapreduce在并行运行的苏剧可复用场景存在很多计算效率问题,Spark在Hadoop的MapReduce计算框架基础上而诞生,大大加快了数据分析,数据挖掘和读写速度,将计算单元缩小到更适合并行计算和重复使用的RDD计算模型

Spark是一个分布式数据快速分析项目,核心技术就是弹性分布式数据集RDD,提供了比MR丰富的模型,可以快速在内存中对数据集进行多次迭代,来支持复杂的数据挖掘算法和图像计算算法

Spark只有在shuffle的时候会将数据写入磁盘当中,而Hadoop的MR作业需要依赖磁盘交互,Spark的缓存机制比HDFS的更高效

Spark核心模块

image.png

Spark Core

Spark Core 中提供了 Spark 最基础与最核心的功能,Spark 其他的功能如:Spark SQL,

Spark Streaming,GraphX, MLlib 都是在 Spark Core 的基础上进行扩展的

Spark SQL

Spark SQL 是 Spark 用来操作结构化数据的组件。通过 Spark SQL,用户可以使用 SQL

或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。

Spark Streaming

Spark Streaming 是 Spark 平台上针对实时数据进行流式计算的组件,提供了丰富的处理

数据流的 API。

Spark MLlib

MLlib 是 Spark 提供的一个机器学习算法库。MLlib 不仅提供了模型评估、数据导入等

额外的功能,还提供了一些更底层的机器学习原语。

Spark GraphX

GraphX 是 Spark 面向图计算提供的框架与算法库。

Spark运行环境

本地模式

将Hadoop2.7.6的压缩包解压到指定目录文件夹,在bin文件下添加winutils.exe

image.png

idea添加依赖,Scala相应的插件也要下载,下载后重启idea就好了

 <dependencies>
       <dependency>
           <groupId>org.scala-lang</groupId>
           <artifactId>scala-library</artifactId>
           <version>2.11.12</version>
       </dependency>

       <dependency>
           <groupId>org.scala-lang</groupId>
           <artifactId>scala-compiler</artifactId>
           <version>2.11.12</version>
       </dependency>

       <dependency>
           <groupId>org.scala-lang</groupId>
           <artifactId>scala-reflect</artifactId>
           <version>2.11.12</version>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.40</version>
       </dependency>
       <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
       <dependency>
           <groupId>org.apache.spark</groupId>
           <artifactId>spark-core_2.11</artifactId>
           <version>2.4.5</version>
       </dependency>
   </dependencies>
   <build>
       <plugins>
           <!-- Java Compiler -->
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.1</version>
               <configuration>
                   <source>1.8</source>
                   <target>1.8</target>
               </configuration>
           </plugin>

           <!-- Scala Compiler -->
           <plugin>
               <groupId>org.scala-tools</groupId>
               <artifactId>maven-scala-plugin</artifactId>
               <version>2.15.2</version>
               <executions>
                   <execution>
                       <goals>
                           <goal>compile</goal>
                           <goal>testCompile</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>

       </plugins>
   </build>

image.png

简单的测试一下本地运行是否成功

package sparkcore

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo01WordCount {
 def main(args: Array[String]): Unit = {
   /**
     * 1、创建是spark的环境
     */

   //spark配置文件对象
   val conf = new SparkConf()

   //任务名
   conf.setAppName("wc")

   //指定运行方法local:本地运行
   conf.setMaster("local")

   //创建spark上下文对象,spark入口
   val sc = new SparkContext(conf)

   /**
     * RDD:弹性的分布式数据集
     * 可以理解为一个集合
     */
   //1、读取数据
   val linesRDD: RDD[String] = sc.textFile("data/words.txt")

   //2、将单词切分出来
   val wordsRDD: RDD[String] = linesRDD.flatMap(line => line.split(","))

   //3、按照单词进行分组
   val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(word => word)

   //4、统计单词的数量
   val countRDD: RDD[(String, Int)] = groupRDD.map {
     case (word: String, ws: Iterable[String]) =>
       //计算单词的数量
       val count: Int = ws.size
      (word, count)
  }

   //5、整理数据
   val resultRDD: RDD[String] =countRDD.map {
     case (word: String, count: Int) =>
       word + "\t" + count
  }
   //5、保存数据
   resultRDD.saveAsTextFile("data/wc")
}

}

 

image.png

在说RDD之前先复习一遍mapreduce

mapreduce过程.png

rdd的五大特性.png

 

posted @ 2021-07-16 23:18  tonggang_bigdata  阅读(597)  评论(0编辑  收藏  举报