操作系统:CentOS-7.8
Spark版本:2.4.4

本篇文章是一个Spark入门文章,在文章中首先会对Spark进行简单概述,帮助大家先认识Spark,然后会介绍Spark安装部署上的基础知识,随后我们再演示几个简单案例帮助大家入门Spark,整篇文章所介绍的都是入门知识,更加适合没有接触过Spark刚开始学习时参考,希望对大家有帮助,Spark官网:http://spark.apache.org,下面开始正文

一、Spark概述

什么是Spark

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。

Spark是一个快速的,多用途的集群计算系统,相对于Hadoop来说Spark只是一个计算框架,它不包含Hadoop的分布式文件系统HDFS和完备的调度系统YARN,它与Hadoop的MapReduce对比在计算性能和效率上有大幅度提升,而且Spark为数据计算提供了丰富的api封装,可以减少编程的复杂度提高编程效率。Hadoop的MapReduce在计算过程中是将中间结果存储在文件系统中,而Spark在计算的过程中是将中间结果存储在内存中,可以将数据在不写入硬盘的情况下在内存中进行计算,这也是Spark运行速度效率远超Hadoop MapReduce的主要原因。

Spark有什么特点

Spark是一个分布式计算引擎,它支持多种语言的API,其计算节点可以拓展到成千上万个,它能够在内存中进行数据集缓存实现交互式数据分析,同时它也提供了shell命令行交互窗口,为探索式数据分析节省时间。其具体特点,我们从以下四个方面简单列出

快速

  • Spark在内存时的计算速度大概是Hadoop的100倍

  • Spark基于硬盘的计算速度大概是Hadoop的10倍

  • Spark的DAG执行引擎,其数据缓存在内存中可以进行迭代处理

易用

  • Spark支持Java、Scala、Python、R、SQL等多种语言API

  • Spark支持多种高级运算API使得用户可以轻松开发、构建和运行计算程序

  • Spark可以使用基于Scala、Python、R、SQL的shell交互式查询

通用

  • Spark提供了一个完整的技术栈,包括SQL执行,Dataset命令式API,机器学习库MLlib,图计算框架GraphX,流计算SparkStreaming

  • 用户可以在同一个应用中同时使用多种Spark的技术

兼容

  • Spark可以运行在Hadoop Yarn,Apache Mesos,Kubernets,Spark Standalone等集群之中

  • Spark可以访问HBase、HDFS、Hive、Cassandra等多种数据源

Spark主要组成

Spark提供了批处理,结构化查询,流计算,图计算,机器学习等组件,这些组件都依托于通用的计算引擎RDD,它们之间的关系结构如图所示

Spark Core和弹性分布式数据集(RDD)

  • Spark Core是整个Spark的基础,提供了分布式任务调度和基本的I/O功能

  • Spark的基础的程序抽象是弹性分布式数据集RDD,它是一个可以并行操作,支持容错的数据集合

  • RDD可以通过引用外部存储系统的数据集创建创建,也可以通过现有的RDD转换得到

  • RDD抽象提供了Java、Scala、Python等语言的API

  • RDD简化了编程的复杂性,操作RDD类似通过Scala或者Java8的Streaming操作本地数据集合

Spark SQL

  • Spark SQL在Spark Core的基础上提出了DataSet和DataFrame的数据抽象化概念

  • Spark SQL提供了在DataSet和DataFrame之上执行SQL的能力

  • Spark SQL提供了DSL,可以通过Scala、Java、Python等语言操作DataSet和DataFrame

  • 支持使用JDBC和ODBC操作SQL语言

Spark Streaming

  • Spark Streaming充分利用Spark Core的快速开发能力来运行流式分析

  • Spark Streaming截取小批量的数据并可以对之运行RDD Transformation

  • Spark Streaming提供了在同一个程序中同时使用流分析和批量处理分析的能力

GraphX

  • GraphX是分布式图计算框架,提供了一组可以表达图计算的API,GraphX还对这种抽象化提供了优化运行

二、Spark集群

Spark的运行方式

先来了解几个名词:

  • 集群:一组协同工作的计算机,分工合作对外表现的向一台计算机一样,所有运行的任务有软件来控制和调度

  • 集群管理工具:调度任务到集群的软件

  • 常见的集群管理工具有:Hadoop YARN,Apache Mesos,Kubernetes

Spark 的运行模式大方向分为两种:

  • 单机:使用线程模拟并行运行的程序

  • 集群,使用集群管理器来和不同类型的集群交互,将任务运行在集群中

Spark Standalone模式下几个名词概念

  • Master:负责总控,调度,管理和协调Worker,保留资源状况等

  • Worker:用于启动Executor执行Tasks,定期向Master汇报

  • Driver:运行在Client或者Worker中,负责创建基础环境和任务分配

Spark在集群模式下的支持的管理方式分两个方向:

  • Spark自带集群管理器:Spark Standalone

在Standalone集群中,分为两个角色Master和Worker,在Standalone集群启动的时候会创建固定数量的Worker。
Driver的启动分为两种模式:Client和Cluster,在Client模式下,Driver运行在Client端,在Client启动的时候被启动,在Cluster模式下,Driver运行在某个Worker中,随着应用的提交而启动

  • 第三方集群管理器:Hadoop YARN,Apache Mesos,Kubernetes

在Yarn集群模式下运行Spark程序,首先会和RM交互,开启ApplicationMaster,其中运行了Driver,Driver创建基础环境后,会由RM提供对应的容器,运行Executor,Executor会再向Driver注册自己,并申请Task执行

Spark Standalone模式部署

在使用第三方集群管理器时Spark不需要进行部署操作,所有本篇中只介绍Standalone模式部署

部署教程参考:《一起学习Spark集群搭建》

三、入门操作

自带Spark示例运行

安装完成Spark后,我们运行一下Spark自带的一个演示程序:蒙特卡洛算法求圆周率


#进入Spark安装目录
cd {SPARK_HOME}./bin/spark-submit \
#指定运行的主类
--class org.apache.spark.examples.SparkPi \
#指定master地址
--master spark://spark13:7077,spark12:7077,spark11:7077 \
#指定executor的内存
--executor-memory 1G \
#指定executor使用的核心数
--total-executor-cores 2 \
#指定jar包的位置
/app/spark/spark-2.4.4-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.4.jar \
#计算Pi所需要的的一个入参
100

spark-shell使用

Spark-Shell 是Spark提供的一个基于Scala语言的交互式解释器,Spark-Shell可以直接在Shell中编写代码执行,这是一种快速使用Spark的方式,由于可以采用交互式命令行进行编程,所以适用快速数据探索和分析,下面演示一个Spark-Shell的使用示例

启动spark-shell:{SPARK_HOME}/bin/spark-shell --master spark://spark13:7077


#读取hdfs上文件
val rdd1 = sc.textFile("hdfs://spark11:8020/data.txt")
#将每行按照空格分隔出多个单词
val rdd2 = rdd1.flatMap(line=>line.split(" "))
#将每个单词给词频为1
val rdd3 = rdd2.map(word=>(word,1))
#按照Key进行聚合操作
val rdd4 = rdd3.reduceByKey((curr,agg)=>curr+agg)
#从rdd4中取出数据
rdd4.collect

spark独立应用编写

引入pom依赖


<dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId>
</dependency><build><plugins><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version><executions><execution><id>compile-scala</id><phase>generate-sources</phase><goals><goal>add-source</goal><goal>compile</goal></goals></execution></executions><configuration><scalaVersion>2.11.12</scalaVersion><args><arg>-target:jvm-1.8</arg></args><jvmArgs><jvmArg>-Xss8196k</jvmArg></jvmArgs></configuration></plugin></plugins>
</build>

示例代码读取hdfs上文件内容进行WordCount


//local模式直接在本地即可运行
object SparkTest {def main(args: Array[String]): Unit = {val sparkConf = new SparkConf()//设置spark应用名称.setAppName("SparkTest")//设置Spark运行方式为local方式,在集群模式运行时,将这一行去掉.setMaster("local[*]")val sparkContext = new SparkContext(sparkConf)//读取hdfs上文件val sourceFile = sparkContext.textFile("hdfs://spark11:8020/data.txt")//对读取的内容进行按空格分隔后在统计词频val resultRdd = sourceFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((curr, agg) => curr + agg)//从rdd中获取结果并打印val result = resultRdd.collect()result.foreach(r=>println(r))sparkContext.stop()}}//在集群运行时,上面代码去掉   .setMaster("local[*]")这一行,然后打成jar包
//spark-submit进行提交到集群运行
./bin/spark-submit --class site.teamo.learning.spark.SparkTest --master spark://spark11:7077,spark12:7077,spark13:7077 /app/spark/spark-test-1.0-SNAPSHOT.jar

总结

经过以上学习,帮助大家对Spark有了基本认识,也学习了Spark的部署安装,最后我们有演示了几个入门案例,帮助大家入门Spark后续,我们会从基础开始学习和使用spark,然后再到理解器原理等知识,欢迎关注后续的文章

个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识

觉得不错就点个赞叭QAQ

一起学习Spark入门相关推荐

  1. Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l&qu ...

  2. Spark入门(Python)

    Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到"大数据(Big Data)"广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰 ...

  3. Spark入门(Python版)

    Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到"大数据(Big Data)"广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰 ...

  4. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Sp ...

  5. 数据分析从零到精通第二课 Hive和Spark入门

    03 离线利器:大数据离线处理工具 Hive 的常用技巧 今天为你介绍数据分析师最常用的数据处理工具 Hive 的一些使用技巧.这些技巧我们在工作中使用得比较频繁,如果运用得当,将为我们省去不少时间精 ...

  6. Spark 入门简介

    1. 简介 Spark 的身世 Spark 是一个通用的并行计算框架,由加州伯克利大学(UC Berkeley)的 AMP 实验室开发于 2009 年,并于 2010 年开源,2013 年成长为 Ap ...

  7. python——spark入门

    Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到"大数据(Big Data)"广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰 ...

  8. 比读文档更易上手的Spark入门教程来啦!

    Spark 开创至今,已经走过了近 12 年.12 年间,时代的脚步不断前进,我们看到互联网不断发展,各种初创公司崭露头角,在公司日常业务中需要处理的数据量也飞速增长.数据中心也从云下逐渐迁往云上,从 ...

  9. spark入门及一些demo

    spark入门 1.背景 2.大数据系统中的一些不足.MapReduce的优缺点 3.spark是什么及特性 4.spark架构及运行原理 5.spark中的一些概念 6.一些demo 这篇文章主要写 ...

最新文章

  1. git 修改上次提交信息 与 撤销此操作.
  2. 一步一步重写 CodeIgniter 框架 (8) —— 视图的嵌套输出与返回
  3. 禁用Alt + F4关闭窗体的一些常用方法
  4. 组合数(nyoj32)
  5. flex socket java_使用Java编写Socket服务器,并且与Flex通信(二)
  6. Java loadlibrary分析及如何unload
  7. 喜马拉雅音频批量下载源码
  8. java jsp 乱码_JAVA/JSP 中文乱码
  9. 世界各国时区表以及与北京时差
  10. 大数据之Redis:Redis之一主二仆模式
  11. Java编程中经常遇到的英文词汇
  12. 如何查看Eclipse是32位还是64位?
  13. Git使用基础---各种常见错误总结
  14. Java之图片裁剪工具类-yellowcong
  15. 计算机cpu的字母,电脑处理器后面的字母你认识几个?不认识跟我来学学(intel篇)...
  16. 谷歌SEO老域名攻略
  17. linux如何打开服务setup,Linux的setup命令启动服务名称和功能
  18. 2017年8月21日 星期一
  19. ubuntu 18.04 局域网无法访问内部DNS的解决办法
  20. word参考文献查重

热门文章

  1. 网站CC防护的正确方式,你get到了吗?
  2. Eclipse Theia 揭秘之技术架构篇
  3. 微信支付 postman_微信开放支付分查询功能,凭分值可享受超1000种信用服务!
  4. 为设计机器人手臂,NASA发布威客任务
  5. PeopleSoft开发:创建页面PAGE
  6. studio gradle中 Read timed out
  7. 深入理解css3中的flex-grow、flex-shrink、flex-basis (转)
  8. 费曼你这么皮,是要被爸爸布置作业的 胡哥被P
  9. 图像的几何变换 OpenCV-Python v4.7.0
  10. 土壤养分检测仪真的有用吗?