spark介绍及简单使用

简介

        Spark是由加州大学伯克利分校AMPLab(AMP实验室)开发的开源大数据处理框架。起初,Hadoop MapReduce是大数据处理的主流框架,但其存在一些限制,如不适合迭代算法、高延迟等。为了解决这些问题,Spark在2010年推出,提供了高效的内存计算和更灵活的数据处理方式。

使用场景:

        批处理:

        Spark支持大规模的批处理任务,通过弹性的分布式计算能力,能够处理海量数据。

        交互式查询:

         Spark提供了Spark SQL,使得用户能够使用SQL语言进行交互式查询,方便数据分析师和数据科学家进行数据探索。

        流处理:

         Spark Streaming模块允许实时处理数据,支持复杂的流处理应用。

        机器学习:

         MLlib是Spark的机器学习库,支持分布式机器学习,适用于大规模数据集的训练和预测。

        图处理:

         GraphX是Spark的图处理库,用于处理图数据结构,支持图算法的并行计算。

        技术竞品:

        Hadoop MapReduce:Spark的前身,仍然是大数据领域的主流框架之一,但相对而言,Spark更灵活、性能更好。

        Apache Flink: 与Spark类似,是另一个流处理和批处理框架,强调事件时间处理和精确一次性语义。

        Apache Storm: 专注于实时流处理,适用于需要低延迟的应用场景。

        Apache HBase: 针对NoSQL存储,适用于需要实时读写的大数据场景。

优劣势:

        Spark的优势:

        高性能: Spark的内存计算引擎可以显著提高计算速度,特别适用于迭代算法和复杂的数据处理任务。

        易用性: 提供了丰富的API,包括Java、Scala、Python和R等,使得开发者能够使用熟悉的编程语言进行大数据处理。

        统一的处理框架: Spark支持批处理、交互式查询、流处理、机器学习和图处理等多种数据处理模式,为用户提供了统一的编程接口。

        生态系统: Spark生态系统包括Spark SQL、MLlib、GraphX等库,丰富的生态系统支持广泛的数据处理应用。

        Spark的劣势:

        资源消耗: 由于使用内存计算,Spark对内存的需求较大,需要足够的硬件资源支持。

        学习曲线: 对于初学者而言,学习Spark可能需要一定的时间,尤其是对于复杂的数据处理任务。

        实时性: 尽管Spark Streaming支持实时处理,但相较于专注于实时处理的框架,实时性可能稍逊一筹。

在选择大数据处理框架时,需要考虑具体的业务需求和场景,综合考虑各个框架的优劣势来做出合适的选择。

spark的shell使用

        本文在hadoop for spark 集群环境下进行演示,当你启动集群的所有工作程序包括spark程序在内,可以使用spark-shell指令在任意一个节点进入到spark交互命令行中

        spark-shell 后置参数解释

- -I <file>:预加载<file>,强制逐行解释。

- --master MASTER_URL:指定Spark的主节点URL,可以是spark://host:port, mesos://host:port, yarn, k8s://https://host:port, 或者 local。

- --deploy-mode DEPLOY_MODE:指定驱动程序的部署模式,可以是本地("client")或者集群中的工作节点("cluster")。

- --class CLASS_NAME:指定应用程序的主类(适用于Java / Scala应用程序)。

- --name NAME:指定应用程序的名称。

- --jars JARS:指定要包含在驱动程序和执行器类路径中的jar文件,用逗号分隔。

- --packages:指定要包含在驱动程序和执行器类路径中的maven坐标的jar文件,用逗号分隔。

- --exclude-packages:指定在解析--packages提供的依赖项时要排除的groupId:artifactId,用逗号分隔。

- --repositories:指定要搜索--packages给出的maven坐标的额外远程仓库,用逗号分隔。

- --py-files PY_FILES:指定要放在PYTHONPATH上的.zip, .egg, 或 .py文件,用逗号分隔。

- --files FILES:指定要放在每个执行器的工作目录中的文件,用逗号分隔。

- --archives ARCHIVES:指定要解压到每个执行器的工作目录中的归档文件,用逗号分隔。

- --conf, -c PROP=VALUE:指定Spark的配置属性。

- --properties-file FILE:指定要从中加载额外属性的文件路径。

- --driver-memory MEM:指定驱动程序的内存(例如1000M, 2G)。

- --driver-java-options:指定要传递给驱动程序的额外Java选项。

- --driver-library-path:指定要传递给驱动程序的额外库路径。

- --driver-class-path:指定要传递给驱动程序的额外类路径。

- --executor-memory MEM:指定每个执行器的内存(例如1000M, 2G)。

- --proxy-user NAME:指定提交应用程序时要模拟的用户。

- --help, -h:显示帮助信息并退出。

- --verbose, -v:打印额外的调试输出。

- --version:打印当前Spark的版本。

        进入spark交互页面,这里有三个方法进入spark的交互环境,不同的语言环境,其提示符也有所不同。

##默认scala语言环境
spark-shell --master local

##使用python语言环境
pyspark

##使用R语言环境
sparkR

spark-shell中的使用范例 

        在/home/hadoop 目录下创建一个wordcount.txt,文件内容如下。

        

spark-shell进入scala交互页面

读取文件内容、统计内容行数、取首行数据。


scala> val textFile = sc.textFile("file:///home/hadoop/wordcount.txt")
textFile: org.apache.spark.rdd.RDD[String] = file:///home/hadoop/wordcount.txt MapPartitionsRDD[1] at textFile at <console>:23

scala> textFile.count()
res0: Long = 3                                                                  

scala> textFile.first()
res1: String = hello you

         scala在使用方法上还是和java有几分类似。在linux的交互行上,也可以实现像idea上的联想功能

scala> val textFile = sc.textFile("file:///home/hadoop/wordcount.txt")
textFile: org.apache.spark.rdd.RDD[String] = file:///home/hadoop/wordcount.txt MapPartitionsRDD[3] at textFile at <console>:23


scala> textFile.
++                         countApprox             getCheckpointFile    mapPartitionsWithEvaluator   reduce             toDebugString                
aggregate                  countApproxDistinct     getNumPartitions     mapPartitionsWithIndex       repartition        toJavaRDD                    
barrier                    countAsync              getResourceProfile   max                          sample             toLocalIterator              
cache                      countByValue            getStorageLevel      min                          saveAsObjectFile   toString                     
canEqual                   countByValueApprox      glom                 name                         saveAsTextFile     top                          
cartesian                  dependencies            groupBy              partitioner                  setName            treeAggregate                
checkpoint                 distinct                id                   partitions                   sortBy             treeReduce                   
cleanShuffleDependencies   filter                  intersection         persist                      sparkContext       union                        
coalesce                   first                   isCheckpointed       pipe                         subtract           unpersist                    
collect                    flatMap                 isEmpty              preferredLocations           take               withResources                
collectAsync               fold                    iterator             productArity                 takeAsync          zip                          
compute                    foreach                 keyBy                productElement               takeOrdered        zipPartitions                
context                    foreachAsync            localCheckpoint      productIterator              takeSample         zipPartitionsWithEvaluator   
copy                       foreachPartition        map                  productPrefix                toDF               zipWithIndex                 
count                      foreachPartitionAsync   mapPartitions        randomSplit                  toDS               zipWithUniqueId   

        定义好一个参数的路径时,可以使用TAB键进行联想,后面就会弹出可使用的相关函数。函数的命令及其功能,在博主看来甚至和SQL相似,只是使用方法上不同。

        Spark在ideal中的使用

        先创建一个maven

pom.xml添加spark相关依赖(<groupId>org.apache.spark</groupId>)groupID为spark的项目即可,以下为博主的依赖选择。

<?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>org.example</groupId>
    <artifactId>hadooplearn</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.4.3</version>
        </dependency>        
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
            <version>2.4.3</version>
        </dependency>

    </dependencies>

</project>

 spark的使用范例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jmeter如何循环运行到csv文件最后一行后停止

1、首先在线程组中设置’循环次数‘–勾选永远 2、csv数据文件设置中设置&#xff1a; 遇到文件结束符再次循环?——改为&#xff1a;False 遇到文件结束符停止线程?——改为&#xff1a;True 3、再次运行就会根据文档的行数运行数据 &#xff08;如果需要在循环控制器中&…

Git----学习Git第一步基于 Windows 10 系统和 CentOS7 系统安装 Git

查看原文 文章目录 基于 Windows 10 系统安装 Git 客户端基于 CentOS7 系统安装部署 Git 基于 Windows 10 系统安装 Git 客户端 &#xff08;1&#xff09;打开 git官网 &#xff0c;点击【windows】 &#xff08;2&#xff09;根据自己的电脑选择安装&#xff0c;目前一般w…

【Unity自动寻路】使用Navigation系统实现物体自动寻路绕开障碍物

知识点流程图 自动导航Navigation系统 我们在游戏场景中经常会有一些障碍物、墙壁、树木等等&#xff0c;如果我想要让角色或者怪物去墙的另一边&#xff0c;我直接在墙另一边点击左键&#xff0c;我希望角色自动跑过去&#xff0c;但是他不能直接穿透墙&#xff0c;他需要“智…

java8新特性之-LocalDateTime

java8新特性之-LocalDateTime 首先&#xff0c;我们必须明确&#xff0c;JAVA为什么在有Date这个类的情况下&#xff0c;又引入了LocalDateTime 大体上来说。 java8引入为了解决旧的java.util.Date和java.util.Calendar等类在处理日期和时间时存在的一些问题&#xff0c;并提供…

[python]用python获取EXCEL文件内容并保存到DBC

目录 关键词平台说明背景所需库实现过程方法1.1.安装相关库2.代码实现 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 背景 在搭建自动化测试平台的时候经常会提取DBC文件中的信息并保存为excel或者其他文件格式&#xff0c;用于自动化测试。本文…

一篇文章了解Flutter Json系列化和反序列化

目录 一. 使用dart:convert实现JSON格式编解码1. 生成数据模型类2. 将JSON数据转化成数据模型类3. 数据模型类转化成JSON字符串 二、借助json_serializable实现Json编解码1.添加json_annotation、build_runner、json_serializable依赖2. 创建一个数据模型类3. 使用命令行生成JS…

http状态码(一)400报错

一 400报错汇总 ① 综述 一、4xx状态码报错说明&#xff1a; 客户端行为导致的报错二、通用的4xxHTTP报错1) 4002) 4013) 4034) 4045) 405 --> 不允许方法&#xff0c;可能跨域或者nginx限制请求方法6) 4087) 4138) 419三、ngin自身定义的4xx报错495、496、497、498、4…

centOS7 安装tailscale并启用子网路由

1、在centOS7上安装Tailscale客户端 #安装命令所在官网位置&#xff1a;https://tailscale.com/download/linux #具体命令为&#xff1a; curl -fsSL https://tailscale.com/install.sh | sh #命令执行后如下图所示2、设置允许IP转发和IP伪装。 安装后&#xff0c;您可以启动…

Python框架批量数据抓取的高级教程

一、背景介绍 批量数据抓取是一种常见的数据获取方式&#xff0c;能够帮助我们快速、高效地获取网络上的大量信息。本文将介绍如何使用Python框架进行大规模抽象数据&#xff0c;以及如何处理这个过程中可能遇到的问题。 二、项目需求 我们将爬取大量知乎文章&#xff0c;讨…

机器学习 | 机器学习基础知识

一、机器学习是什么 计算机从数据中学习规律并改善自身进行预测的过程。 二、数据集 1、最常用的公开数据集 2、结构化数据与非结构化数据 三、任务地图 1、分类任务 Classification 已知样本特征判断样本类别二分类、多分类、多标签分类 二分类&#xff1a;垃圾邮件分类、图像…

为什么选择计算机?大数据时代学习计算机的价值探讨

还记得当初自己为什么选择计算机? 计算机是在90年代兴起的专业,那时候的年轻人有驾照、懂外语、懂计算机是很时髦的事情! 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的…

Leetcode刷题笔记题解(C++):224. 基本计算器

思路&#xff1a; step 1&#xff1a;使用栈辅助处理优先级&#xff0c;默认符号为加号。 step 2&#xff1a;遍历字符串&#xff0c;遇到数字&#xff0c;则将连续的数字字符部分转化为int型数字。 step 3&#xff1a;遇到左括号&#xff0c;则将括号后的部分送入递归&#x…

java --- 异常

目录 一、异常体系介绍 二、异常的作用 三、异常处理方式 3.1 捕获异常 2.1 灵魂一问&#xff1a; 如果try中没有遇到问题&#xff0c;如何执行&#xff1f; 2.2 灵魂二问&#xff1a;如果try中可能会遇到多个问题&#xff0c;怎么执行&#xff1f; 2.3 灵魂三问&#x…

动态规划优化技巧

一、斐波那契系列 1、滚动数组优化空间复杂度 2、dp数组初始化/处理边界优化 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台

NtripShare Mos监测平台边缘计算终端与自动优化平差算法

忙忙乎乎23年又要过去了&#xff0c;回头看今年做的事&#xff0c;只有两件事值得一提&#xff1a; 1、自动化监测边缘计算终端&#xff1b; 2、自动优化平差算法。 自动化监测边缘计算终端 终端采用全国产硬件方案终端支持全站仪供电控制终端支持远程控制终端支持数据缓存技…

WebLangChain_ChatGLM:结合 WebLangChain 和 ChatGLM3 的中文 RAG 系统

WebLangChain_ChatGLM 介绍 本文将详细介绍基于网络检索信息的检索增强生成系统&#xff0c;即 WebLangChain。通过整合 LangChain&#xff0c;成功将大型语言模型与最受欢迎的外部知识库之一——互联网紧密结合。鉴于中文社区中大型语言模型的蓬勃发展&#xff0c;有许多可供利…

arcgis更改服务注册数据库账号及密码

最近服务器数据库密码换了&#xff0c;gis服务也得换下数据库连接密码。传统官方的更改方式&#xff08;上传连接配置文件&#xff09;&#xff1a; ArcGIS Server数据库注册篇(I) — 更新数据库密码_arcgis server sde换密码-CSDN博客 方式太麻烦了&#xff0c;需要安装ArcG…

PyTorch自动梯度计算(注意点)

if params.grad is not None: params.grad.zero_() 我们实际的运算往往会涉及到若干个requires-grad为true的张量进行运算&#xff0c;在这种情况下&#xff0c;Pytorch会计算整个计算图上的损失的导数&#xff0c;并把这些结果累加到grad属性中。多次调用backward()会导致梯度…

数据结构与算法—哈希表

哈希表 文章目录 哈希表1. 问题引出2. 基本介绍3. 应用实例 1. 问题引出 看一个实际需求&#xff0c;google公司的一个上机题:有一个公司&#xff0c;当有新的员工来报道时&#xff0c;要求将该员工的信息加入(id,性别&#xff0c;年龄等)&#xff0c;当输入该员工的id时&#…

CodeBlocks定义异常:multiple definition of 和 first defined here

基于链表实现贪吃蛇案例时候&#xff0c;在CodeBlocks的CPP源文件定义函数和全局变量均报错 异常现象 在**自定义的cpp**文件定义全局变量、对象、函数等均出现重复定义和首次定义 multiple definition of Controller::showCopy() first defined here 异常解决方案 正确代码…