一起学习Spark入门
操作系统: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入门相关推荐
- Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l&qu ...
- Spark入门(Python)
Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到"大数据(Big Data)"广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰 ...
- Spark入门(Python版)
Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到"大数据(Big Data)"广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰 ...
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Sp ...
- 数据分析从零到精通第二课 Hive和Spark入门
03 离线利器:大数据离线处理工具 Hive 的常用技巧 今天为你介绍数据分析师最常用的数据处理工具 Hive 的一些使用技巧.这些技巧我们在工作中使用得比较频繁,如果运用得当,将为我们省去不少时间精 ...
- Spark 入门简介
1. 简介 Spark 的身世 Spark 是一个通用的并行计算框架,由加州伯克利大学(UC Berkeley)的 AMP 实验室开发于 2009 年,并于 2010 年开源,2013 年成长为 Ap ...
- python——spark入门
Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到"大数据(Big Data)"广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰 ...
- 比读文档更易上手的Spark入门教程来啦!
Spark 开创至今,已经走过了近 12 年.12 年间,时代的脚步不断前进,我们看到互联网不断发展,各种初创公司崭露头角,在公司日常业务中需要处理的数据量也飞速增长.数据中心也从云下逐渐迁往云上,从 ...
- spark入门及一些demo
spark入门 1.背景 2.大数据系统中的一些不足.MapReduce的优缺点 3.spark是什么及特性 4.spark架构及运行原理 5.spark中的一些概念 6.一些demo 这篇文章主要写 ...
最新文章
- git 修改上次提交信息 与 撤销此操作.
- 一步一步重写 CodeIgniter 框架 (8) —— 视图的嵌套输出与返回
- 禁用Alt + F4关闭窗体的一些常用方法
- 组合数(nyoj32)
- flex socket java_使用Java编写Socket服务器,并且与Flex通信(二)
- Java loadlibrary分析及如何unload
- 喜马拉雅音频批量下载源码
- java jsp 乱码_JAVA/JSP 中文乱码
- 世界各国时区表以及与北京时差
- 大数据之Redis:Redis之一主二仆模式
- Java编程中经常遇到的英文词汇
- 如何查看Eclipse是32位还是64位?
- Git使用基础---各种常见错误总结
- Java之图片裁剪工具类-yellowcong
- 计算机cpu的字母,电脑处理器后面的字母你认识几个?不认识跟我来学学(intel篇)...
- 谷歌SEO老域名攻略
- linux如何打开服务setup,Linux的setup命令启动服务名称和功能
- 2017年8月21日 星期一
- ubuntu 18.04 局域网无法访问内部DNS的解决办法
- word参考文献查重