SparkCore 之旅

SparkCore 之旅,第1张

SparkCore 之旅

SparkCore 之旅
  • Spark概述
    • Spark是什么
    • Spark and Hadoop
    • Spark or Hadoop
    • Spark 核心模块
  • Spark快速上手
    • 增加Scala插件
    • 增加依赖关系
    • WordCount
  • Spark运行环境
    • Local模式
      • 解压缩文件
      • 启动Local环境
      • 命令行工具
      • 退出本地模式
      • 提交应用
    • Standalone模式
    • Yarn模式
    • K8S & Mesos模式
    • Windows模式
    • 部署模式对比
    • 端口号
  • Spark运行架构
  • Spark核心编程
  • Spark案例实 ***

Spark概述 Spark是什么

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

Spark and Hadoop

Hadoop 的 MapReduce 是大家广为熟知的计算框架,那为什么咱们还要学习新的计算框架 Spark 呢,这里就不得不提到 Spark 和 Hadoop 的关系

Hadoop

  • Hadoop是由 Java 语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架

  • 作为 Hadoop 分布式文件系统,HDFS 处于 Hadoop 生态圈的最下层,存储着所有的数据,支持着 Hadoop 的所有服务。它的理论基础源于 Google 的The Google File System 这篇论文,它是 GFS 的开源实现

  • MapReduce 是一种编程模型,Hadoop 根据 Google 的 MapReduce 论文将其实现,作为 Hadoop 的分布式计算模型,是 Hadoop 的核心。基于这个框架,分布式并行程序的编写变得异常简单。综合了 HDFS 的分布式存储和MapReduce 的分布式计算,Hadoop 在处理海量数据时,性能横向扩展变得非常容易

  • Hbase 是对 Google 的 Bigtable 的开源实现,但又和 Bigtable 存在许多不同之处。Hbase 是一个基于 HDFS 的分布式数据库,擅长实时地随机读/写超大规模数据集。它也是 Hadoop 非常重要的组件

Spark

  • Spark 是一种由 Scala 语言开发的快速、通用、可扩展的大数据分析引擎
  • Spark Core 中提供了 Spark 最基础与最核心的功能
  • Spark SQL 是 Spark 用来 *** 作结构化数据的组件。通过 Spark SQL ,用户可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据
  • Spark Streaming 是 Spark 平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的 API

Spark 出现的时间相对较晚,并且主要功能主要是用于数据计算,所以其实 Spark 一直被认为是 Hadoop 框架的升级版

Spark or Hadoop

Hadoop 的 MR 框架和 Spark 框架都是数据处理框架,那么我们在使用时如何选择呢

  • Hadoop MapReduce 由于其设计初衷并不是为了满足循环迭代式数据流处理,因此在多并行运行的数据可复用场景(如:机器学习、图挖掘算法、交互式数据挖掘算法)中存在诸多计算效率等问题。
    所以 Spark 应运而生,Spark 就是在传统的 MapReduce 计算框架的基础上,利用其计算过程的优化,从而大大加快了数据分析、挖掘的运行和读写速度,并将计算单元缩小到更适合并行计算和重复使用的 RDD 计算模型

  • 机器学习中ALS、凸优化梯度下降等。这些都需要基于数据集或者数据集的衍生数据反复查询反复 *** 作
    MR这种模式不太合适,即使多MR串行处理,性能和时间也是一个问题。数据的共享依赖于磁盘。另外一种是交互式数据挖掘,MR显然不擅长
    而Spark所基于的scala语言恰恰擅长函数的处理

  • Spark 是一个分布式数据快速分析项目。它的核心技术是d性分布式数据集(Resilient Distributed Datasets),提供了比 MapReduce 丰富的模型,可以快速在内存中对数据集进行多次迭代,来支持复杂的数据挖掘算法和图形计算算法

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

  • Spark Task 的启动时间快
    Spark采用 fork 线程的方式,
    而 Hadoop 采用创建新的进程的方式

  • Spark 只有在 shuffle 的时候将数据写入磁盘,而 Hadoop 中多个 MR 作业之间的数据交互都要依赖于磁盘交互

  • Spark 的缓存机制比 HDFS 的缓存机制高效

经过上面的比较,我们可以看出在绝大多数的数据计算场景中,Spark 确实会比 MapReduce 更有优势。但是 Spark 是基于内存的,所以在实际的生产环境中,由于内存的限制,可能会由于内存资源不够导致 Job 执行失败,此时,MapReduce 其实是一个更好的选择,所以 Spark 并不能完全替代 MR

Spark 核心模块

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快速上手 增加Scala插件

Spark由 Scala 语言开发的,当前使用的Spark版本为3.0.0,默认采用的Scala编译版本为2.12,IDEA 开发工具中含有 Scala 开发插件

增加依赖关系

修改 Maven 项目中的 POM 文件,增加 Spark 框架的依赖关系


    
        org.apache.spark
        spark-core_2.12
        3.0.0
    



    
    
        
        
            net.alchim31.maven
            scala-maven-plugin
            3.2.2
            
                
                    
                    
                        testCompile
                    
                
            
        
        
        
            org.apache.maven.plugins
            maven-assembly-plugin
            3.1.0
            
                
                    jar-with-dependencies
                
            
            
                
                    make-assembly
                    package
                    
                        single
                    
                
            
        
        
    
    

WordCount
// 创建Spark运行配置对象
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")

// 创建Spark上下文环境对象(连接对象)
val sc : SparkContext = new SparkContext(sparkConf)

// 读取文件数据
val fileRDD: RDD[String] = sc.textFile("input/word.txt")

// 将文件中的数据进行分词
val wordRDD: RDD[String] = fileRDD.flatMap( _.split(" ") )

// 转换数据结构 word => (word, 1)
val word2OneRDD: RDD[(String, Int)] = wordRDD.map((_,1))

// 将转换结构后的数据按照相同的单词进行分组聚合
val word2CountRDD: RDD[(String, Int)] = word2OneRDD.reduceByKey(_+_)

// 将数据聚合结果采集到内存中
val word2Count: Array[(String, Int)] = word2CountRDD.collect()

// 打印结果
word2Count.foreach(println)

//关闭Spark连接
sc.stop()

执行过程中,会产生大量的执行日志,如果为了能够更好的查看程序的执行结果,可以在项目的resources 目录中创建 log4j.properties 文件,并添加日志配置信息:

log4j.rootCategory=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

# Set the default spark-shell log level to ERROR. When running the spark-shell, the
# log level for this class is used to overwrite the root logger's log level, so that
# the user can have different defaults for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=ERROR

# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=ERROR
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=ERROR
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=ERROR
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR

# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
Spark运行环境

Spark 作为一个数据处理框架和计算引擎,被设计在所有常见的集群环境中运行, 在国内工作中主流的环境为 Yarn ,不过逐渐容器式环境也慢慢流行起来

Local模式 解压缩文件 启动Local环境 命令行工具 退出本地模式 提交应用 Standalone模式 Yarn模式 K8S & Mesos模式 Windows模式 部署模式对比 端口号 Spark运行架构 Spark核心编程 Spark案例实 ***

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5696160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存