史上最简单的Spark教程-第一章:运行第一个Spark程序

5,795 阅读5分钟

史上最简单的Spark教程-第一章:运行第一个Spark程序

史上最简单的spark教程、所有代码示例地址: github.com/Mydreamandr…

(提前声明:文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章,写作不易,转载请注明)

什么是Spark?

网上有关spark的介绍一搜一大堆,这里咱们就简单的说下它的场景和优点:

  • 1、Apache Spark是一种包含流处理能力的下一代批处理框架。与Hadoop的MapReduce引擎基于各种相同原则开发而来的Spark主要侧重于通过完善的内存计算和处理优化机制加快批处理工作负载的运行速度
  • 2、Spark可作为独立集群部署(需要相应存储层的配合),或可与Hadoop集成并取代MapReduce引擎
  • 3、与MapReduce不同,Spark的数据处理工作全部在内存中进行,只在一开始将数据读入内存,以及将最终结果持久存储时需要与存储层交互。所有中间态的处理结果均存储在内存中
  • 4、除了引擎自身的能力外,围绕Spark还建立了包含各种库的生态系统,可为机器学习、交互式查询等任务提供更好的支持。相比MapReduce,Spark任务易于编写
  • 5、Spark的另一个重要优势在于多样性。该产品可作为独立集群部署,或与现有Hadoop集群集成。该产品可运行批处理和流处理,运行一个集群即可处理不同类型的任务

Spark组件

经过上面简单的了解、那么Spark到底包含了哪些组件、我在这里列举一下、暂时大家跟这些组件混个眼熟就可以了、之后我会带着大家会一个个攻破它们的

spark是一个实现快速并且通用的集群计算框架,它的核心功能组件包含:

  • 1、spark core: 实现spark的基本功能
    • 任务调度,内存管理,错误恢复,与存储系统交互等模块
    • RDD:[弹性分布式数据集]API定义
  • 2、spark sql:  spark操作结构化数据的程序包
    • 通过sparkSql可以使用sql或者hsql查询数据
    • sparksql支持多种数据源
  • 3、spark  streaming: 实时流计算组件
    • 提供操作数据流的API
  • 4、MLlib:机器学习库,丰富强大
  • 5、Graphx:图计算,图像算法
  • 6、集群管理器:(类似于Hadoop的Yarn)
    • 为了满足从单节点到上千节点之间的伸缩计算,实现的简易调度器

以上就是一些Spark中常用的组件、可以看到Spark的生态还是很强大的、从大数据-机器学习领域都有涉及、这要学会了老板不加薪那还是人吗?(笑脸

安装Spark

  • 1、首先我们需要一台虚拟机或者云服务器、我这里选择的是Centos7.5
  • 2、Spark下载地址spark.apache.org/downloads.h…、(这里我选择的是2.2.3、该系列的所有教程都是基于Spark2.2.3的哦、尽量保持一致
  • 3、下载完成后解压 tar -zxvf spark.......    [spark解压即可使用,前提是jdk环境OK]
  • 3、安装JDK、配置环境变量[/etc/profile]、配置生效 :source/etc/profile
  • 4、java -version 验证

Spark就安装完了、然后进入你的Spark解压目录、查看\bin目录下的源码包

  • 1、python,R目录:源代码
  • 2、README.md:入门帮助
  • 3、bin:一些可执行命令
  • 4、examples:包含有java,python,r语言的入门Demo源码

入门案例

Spark包中已经给我们提供了Python、Scala的shell、我们用shell来跑一个Spark的案例看看效果

  • 1、运行Python Shell
    • 进入:spark/bin 目录
    • 执行:./python-shell
  • 1、运行Scala Shell
    • 进入:spark/bin 目录
    • 执行:./spark-shell

执行shell后稍等片刻会出现Spark图标 【welcome to spark】

接着开始编写我们的spark小程序来看下效果

val lines = sc.textFile("/usr/local/spark/spark-2.2.3-bin-hadoop2.7/README.md") 
//第一步操作括号中的路径是我的安装目录,README.md是spark系统文件(spark安装后本身就自带的文件),请确保你们的文件也在此位置

lines.count()         //输出总count行数

lines.first()            //输出RDD中的第一个元素[README.md第一行]

执行结果:

ctrl+D退出shell

  • Spark提供的Java-wordcount案例(简单看下就行、后续会展开讲

总结

通过上面的简单案例、我们已经成功接触到了spark、我在这里简单说下这个spark程序执行的过程、执行期间spark内部是如何运作的

  • 1、首先就是我们的变量lines、它其实就是一个RDD,是从电脑上的本地文本文件创建出来的、至于RDD是什么,简单的说(后续会深入讲、不懂也没关系:
  • 2、在spark中,我们要进行计算,就需要通过分布式数据集的操作表达我们的计算意图、这些计算会自动的在集群上并行计算,这样的数据集就叫做RDD(resilient distributed dataset)弹性分布式数据集
  • 3、RDD就是spark对分布式数据和计算的基本抽象
  • 4、我们可以在这个RDD上运行各种并行操作,比如我们刚才的 count()和first()

该系列教程已经在CSDN全部写完了、着急学习的可以去CSDN查看、地址: blog.csdn.net/youbitch1/a…

不着急的关注我的掘金、等我更新即可、掘金上面更新的spark教程和csdn会有些许的差异、我在掘金发的时候会把原来写好的再审查一遍、不好的地方我会改进后再发出来、csdn就不改了、懒得改了(笑