【Spark】介绍 快速入门

news2024/12/25 2:31:10

目录

介绍

Spark and Hadoop

Spark or Hadoop

核心模块

Spark Core

Spark SQL

Spark Streaming

Spark MLlib

Spark GraphX

 快速上手

来源:


介绍

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

Spark and Hadoop

Hadoop
  Hadoop 是由 java 语言编写的,在分布式服务器集群上存储海量数据并运行分布式
分析应用的开源框架
  作为 Hadoop 分布式文件系统, HDFS 处于 Hadoop 生态圈的最下层,存储着所有
的 数 据 , 支 持 着 Hadoop 的 所 有 服 务 。 它 的 理 论 基 础 源 于 Google
TheGoogleFileSystem 这篇论文,它是 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 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.wc

import org.apache.spark.rdd.RDD
import 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 Spark
    val lines = sc.textFile("datas")
    //拆分成一个一个的单词 扁平化
    //hello world hello,world,hello,world
    val 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, 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

来源:

尚硅谷

scala-maven-plugin – scala-maven-plugin (davidb.github.io)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 网络I/O模型

一、Linux下面的I/O模型 Linux下面一共有五种可以使用的I/O模型&#xff0c;如下&#xff1a; 1&#xff09;阻塞式I/O 2&#xff09;非阻塞式I/O 3&#xff09;I/O多路复用&#xff08;select与epoll&#xff09; 4&#xff09;信号驱动式I/O 5&#xff09;异步I/O 下面重点介…

知识图谱-实体抽取

命名实体识别&#xff08;Named Entity Recognition&#xff0c;简称NER&#xff09;是信息抽取、问答系统、句法分析、机器翻译等应用领域的重要基础工具&#xff0c;在自然语言处理技术走向实用化的过程中占有重要地位。一般来说&#xff0c;命名实体识别的任务就是识别出待处…

【产品设计】电商后台系统设计--库存

电商后台产品&#xff0c;涉及众多模块&#xff0c;而以商品、订单、库存为核心模块&#xff0c;模块间存在大量交互。库存决定商品是否可售卖&#xff0c;下单是否能成功。 电商中的库存管理是为了保证前台商品的正常售卖&#xff0c;库存的管理和仓库密不可分&#xff0c;而仓…

Midjourney详细注册和使用教程

来源&#xff1a;Midjoureny详细注册使用教程【探索ChatGPT】 Midjourney&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画&#xff0c;相信了解Midjourey的小伙伴已经对它强大之处而赞叹&#xff01; 下面是用通俗易懂的步骤教会大家如何注册和…

【严蔚敏版数据结构】你分得清顺序栈和链栈吗

【严蔚敏版数据结构】顺序栈和链栈的剖析和对比一、顺序栈和链栈的存储结构二、顺序栈和链栈的初始化三、顺序栈和链栈的判断是否栈空四、顺序栈和链栈的入栈五、顺序栈和链栈的弹栈六、顺序栈和链栈的取栈顶元素一、顺序栈和链栈的存储结构 顺序栈的存储结构图如下&#xff1…

Windows 10系统,JDK安装与环境变量配置

引言 随着互联网的日益发展, 越来越多的小伙伴加入了程序员这个行列, 也有很多小伙伴正计划学习编程, 学习Java 那么对于新手来说, 第一件事就是下载安装Java开发工具包, 也就是JDK, 今天我们就来一起详细的说说怎么操作 JDK版本描述 学习环境中, 我们通常使用较新版本的JD…

支持PHP运行环境和系统防火墙配置管理,1Panel开源面板v1.1.0发布

2023年4月17日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.1.0版本。 在这一版本中&#xff0c;1Panel新增支持PHP运行环境、系统防火墙配置管理以及同步本地应用等功能&#xff0c;并带来了40多项功能更新和问题修复&#xff0c;感谢各位社区用户的反…

回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测

回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测 目录回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网…

nvm管理node

开发的时候node版本不兼容问题频频出现&#xff0c;就得安装多个版本node&#xff0c;nvm管理起来就很方便。 首先nvm是一个nodejs的版本管理工具。为了解决node.js各种版本存在不兼容现象可以通过它安装和切换不同版本的node.js。 打开CMD&#xff0c;输入命令 nvm &#xf…

密码基础知识——密码的概念与作用

密码基础知识——密码的概念与作用密码的概念与作用密码的概念密码的重要作用密码的功能密码应用技术框架密码应用中的安全性问题密码应用安全性评估的基本原理信息安全管理标准PDCA 管理循环信息安全风险评估定义信息安全风险评估的目的和用途信息安全风险评估的基本要素密码的…

Centos 7 安装系列(10):ElasticSearch 8.6.2

ElasticSearch 部署一、系统环境二、解压安装2.1 解压压缩包2.2 修改配置文件2.3 添加操作用户2.4 启动2.5 开放端口2.6 开机自启动配置2.7 设置用户名密码认证三、总结一、系统环境 操作系统&#xff1a;Centos 7 已配置环境&#xff1a;空 二、解压安装 2.1 解压压缩包 上…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平

【原文链接】&#xff1a;基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土壤、农业、大气等领域的数据分析https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247537467&idx4&sn10c4c12897282daf5320efae05caf3a4&chksmfe689551…

黑马2023JavaScript笔记1

一、js知识点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…

LoRA 指南之 LyCORIS 模型使用

LoRA 指南之 LyCORIS 模型使用 在C站看到这个模型&#xff0c;一眼就非常喜欢 在经历几番挣扎之后终于成功安装 接下来&#xff0c;我们一起开始安装使用吧&#xff01; 1、根据原作大佬的提示&#xff0c;需要安装两个插件 https://github.com/KohakuBlueleaf/a1111-sd-web…

蓝桥杯之我见

前言 关于蓝桥杯&#xff0c;应该有很多人不知道这是一个什么样的比赛。但是作为一名合格的程序员&#xff0c;就算之前没有参加过蓝桥杯的比赛&#xff0c;或者没听说过蓝桥杯&#xff0c;读完本篇文章再说不知道蓝桥杯&#xff0c;就有点不合适了吧&#xff1f;&#xff01;那…

网络作业6【计算机网络】

网络作业6【计算机网络】前言推荐网络作业6一. 单选题&#xff08;共11题&#xff0c;33分&#xff09;二. 多选题&#xff08;共2题&#xff0c;10分&#xff09;三. 判断题&#xff08;共1题&#xff0c;1分&#xff09;四. 阅读理解&#xff08;共1题&#xff0c;56分&#…

DY-30型电压继电器DY-36

DY-30系列电压继电器 DY-32电压继电器&#xff1b;DY-36电压继电器&#xff1b; DY-33电压继电器&#xff1b;DY-37电压继电器&#xff1b; DY-34电压继电器&#xff1b;DY-38电压继电器&#xff1b; DY-31电压继电器&#xff1b;DY-35电压继电器&#xff1b; DY-32/60C电压继…

npm与node版本不匹配问题解决思路(一百五十八)

1.报错 npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: ‘electron-packager17.1.1’, npm WARN EBADENGINE required: { node: ‘> 14.17.5’ }, npm WARN EBADENGINE current: { node: ‘v12.22.9’, npm: ‘8.5.1’ } npm WARN EBADENGINE } np…

软件测试【常见】62 道面试题,不背完这些你还想去面试?

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 02、您认为做好测试用例设计工作的关键是什么&#xff1f; 03、您在从事性能测试工作时&#xff0c;是否使用过一些测试工具&#xff1f;如果有&#xff0…

中国人民大学与加拿大女王大学金融硕士——去发现、去尝试更多的可能

现实中很多人都曾信心满满地列出各种计划&#xff0c;学习、减肥、运动等等&#xff0c;但结果却是“晚上想想千条路&#xff0c;早上醒来走原路”。三毛说过&#xff1a;“我有一个想法&#xff0c;去做&#xff01;”我们要发现&#xff0c;更要去行动&#xff0c;去尝试更多…