目录
介绍
Spark and Hadoop
Spark or Hadoop
核心模块
Spark Core
Spark SQL
Spark Streaming
Spark MLlib
Spark GraphX
快速上手
来源:
介绍
Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。Spark and Hadoop
HadoopHadoop 是由 java 语言编写的,在分布式服务器集群上存储海量数据并运行分布式 分析应用的开源框架作为 Hadoop 分布式文件系统, HDFS 处于 Hadoop 生态圈的最下层,存储着所有 的 数 据 , 支 持 着 Hadoop 的 所 有 服 务 。 它 的 理 论 基 础 源 于 Google 的 TheGoogleFileSystem 这篇论文,它是 GFS 的开源实现。MapReduce 是一种编程模型, Hadoop 根据 Google 的 MapReduce 论文将其实现, 作为 Hadoop 的分布式计算模型,是 Hadoop 的核心。基于这个框架,分布式并行 程序的编写变得异常简单。综合了 HDFS 的分布式存储和 MapReduce 的分布式计 算, Hadoop 在处理海量数据时,性能横向扩展变得非常容易。HBase 是对 Google 的 Bigtable 的开源实现,但又和 Bigtable 存在许多不同之处。 HBase 是一个基于 HDFS 的分布式数据库,擅长实时地随机读 / 写超大规模数据集。 它也是 Hadoop 非常重要的组件。SparkSpark 是一种由 Scala 语言开发的快速、通用、可扩展的 大数据分析引擎Spark Core 中提供了 Spark 最基础与最核心的功能Spark SQL 是 Spark 用来操作结构化数据的组件。通过 Spark SQL ,用户可以使用 SQL 或者 Apache Hive 版本的 SQL 方言( HQL )来查询数据。Spark Streaming 是 Spark 平台上针对实时数据进行流式计算的组件,提供了丰富的 处理数据流的 API 。Spark or Hadoop
Hadoop MapReduce 由于其设计初衷并不是为了满足循环迭代式数据流处理,因此在多 并行运行的数据可复用场景(如:机器学习、图挖掘算法、交互式数据挖掘算法)中存 在诸多计算效率等问题。所以 Spark 应运而生, Spark 就是在传统的 MapReduce 计算框 架的基础上,利用其计算过程的优化,从而大大加快了数据分析、挖掘的运行和读写速 度,并将计算单元缩小到更适合并行计算和重复使用的 RDD 计算模型 机器学习中 ALS 、凸优化梯度下降等。这些都需要基于数据集或者数据集的衍生数据 反复查询反复操作。 MR 这种模式不太合适,即使多 MR 串行处理,性能和时间也是一 个问题。数据的共享依赖于磁盘。另外一种是交互式数据挖掘, MR 显然不擅长。而 Spark 所基于的 scala 语言恰恰擅长函数的处理。Spark 是一个分布式数据快速分析项目。它的核心技术是弹性分布式数据集( Resilient Distributed Datasets ),提供了比 MapReduce 丰富的模型,可以快速在内存中对数据集 进行多次迭代,来支持复杂的数据挖掘算法和图形计算算法。 Spark 和 Hadoop 的根本差异是多个作业之间的数据通信问题 : Spark 多个作业之间数据 通信是基于内存,而 Hadoop 是基于磁盘。 Spark Task 的启动时间快。 Spark 采用 fork 线程的方式,而 Hadoop 采用创建新的进程 的方式。 Spark 只有在 shuffle 的时候将数据写入磁盘,而 Hadoop 中多个 MR 作业之间的数据交 互都要依赖于磁盘交互 Spark 的缓存机制比 HDFS 的缓存机制高效核心模块
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 面向图计算提供的框架与算法库。快速上手
创建Maven项目,添加Scala插件
【Idea】建立Scale框架_岱宗夫如何、的博客-CSDN博客
POM.xml,添加Spark依赖环境和scala插件
scala-maven-plugin 用于在 maven 中编译/测试/运行/记录 scala 代码。
<dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.0.0</version></dependency></dependencies><build><plugins><!-- 该插件用于将 Scala 代码编译成 class 文件 --><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version><executions><execution><!-- 声明绑定到 maven 的 compile 阶段 --><goals><goal>testCompile</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.1.0</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
WordCount案例
package com.qihang.bigdata.spark.core.wcimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}object WordCount {def main(args: Array[String]): Unit = {//Application//Spark 框架//TODO 建立和Spark框架连接val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")val sc = new SparkContext(sparConf)//TODO 执行业务逻辑//读取文件,获取一行一行的数据//Hello world//Hello Sparkval lines = sc.textFile("datas")//拆分成一个一个的单词 扁平化//hello world hello,world,hello,worldval words = lines.flatMap(_.split(" "))//按照word分组//(hello, hello, hello)val wordGroup: RDD[(String, Iterable[String])] = words.groupBy(word => word)//转换//(hello,3)// val wordToCount: RDD[(String, Int)] = wordGroup.map(//tuple => (tuple._1, tuple._2.size)// )val wordToCount: RDD[(String, Int)] = wordGroup.map{case ( word, list ) => {(word, list.size)}}//打印val array = wordToCount.collect()array.foreach(println(_))//TODO 关闭连接sc.stop()}}
执行过程中,会产生大量的执行日志,如果为了能够更好的查看程序的执行结果,可以在项 目的 resources 目录中创建 log4j.properties 文件,并添加日志配置信息:
log4j.rootCategory=ERROR, consolelog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.target=System.errlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.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..apache.spark.repl.Main=ERROR# Settings to quiet third party logs that are too .spark_project.jetty=.spark_project.ponent.AbstractLifeCycle=.apache.spark.repl.SparkIMain$exprTyper=.apache.spark.repl.SparkILoop$SparkILoopInterpreter=.apache.parquet=ERRORlog4j.logger.parquet=ERROR# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive .apache.hadoop.hive.metastore.RetryingHMSHandler=.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
来源:
尚硅谷
scala-maven-plugin – scala-maven-plugin (davidb.github.io)
如果觉得《【Spark】介绍 快速入门》对你有帮助,请点赞、收藏,并留下你的观点哦!