大数据应用技术实验报告七 Spark

Spark好在哪里?
Spark的中间数据放到内存中,对于迭代运算效率更高。
Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的数据集操作类型有很多
①Transformations转换操作:map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等。
②actions行动操作:Count, collect, reduce, lookup, save等。

例:一个Spark的“Hello World”程序
读取一个HDFS文件,计算包含字符串“Hello World”行数
val sc= new SparkContext(“spark://localhost:7077”,”Hello World”, “YOUR_SPARK_HOME”,”YOUR_APP_JAR”)
val fileRDD = sc.textFile(“hdfs://192.168.0.103:9000/examplefile”)
val filterRDD = fileRDD.filter(_.contains(“Hello World”))
filterRDD.cache()
filterRDD.count()
//创建SparkContext对象
在spark程序运行起来后,程序就会创建sparkContext,解析用户的代码,当遇到action算的时候开始执行程序,但是在执行之前还有很多前提工作要在sparkContext中做的。

val fileRDD = sc.textFile(“hdfs://192.168.0.103:9000/examplefile”)
//从HDFS文件中读取数据创建一个RDD
RDD是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。RDD提供了一种高度受限的共享内存模型.

val filterRDD = fileRDD.filter(_.contains(“Hello World”))
//对fileRDD进行转换操作得到一个新的RDD,即filterRDD。

filterRDD.cache()
//对filterRDD进行持久化
把它保存在内存或磁盘中(这里采用cache接口把数据集保存在内存中),方便后续重复使用,当数据被反复访问时(比如查询一些热点数据,或者运行迭代算法),这是非常有用的,而且通过cache()可以缓存非常大的数据集,支持跨越几十甚至上百个节点。

filterRDD.count()
// count()是一个行动操作,用于计算一个RDD集合中包含的元素个数。

Spark的编程模型
三种编程语言:Scala、Java、Python
Spark的转换操作、行动操作
RDD执行过程为DAG
根据RDD分区的依赖关系划分阶段

大数据应用技术实验报告七 Spark_第1张图片
一、Spark与Scala版本兼容问题:
Spark运行在Java 8 +,Python 2.7 + / 3.4 +和R 3.1+上。对于Scala API,Spark 2.4.2使用Scala 2.12。您需要使用兼容的Scala版本(2.12.x)。
请注意,自Spark 2.2.0起,对2.6.5之前的Java 7,Python 2.6和旧Hadoop版本的支持已被删除。自2.3.0起,对Scala 2.10的支持被删除。自Spark 2.4.1起,对Scala 2.11的支持已被弃用,将在Spark 3.0中删除。
https://spark.apache.org/docs/latest/index.html

二、官网下载安装Scala:scala-2.12.8.tgz
https://www.scala-lang.org/download/
tar -zxvf scala-2.12.8.tgz -C /opt/module
mv scala-2.12.8 scala
测试:scala -version
启动:scala

三、官网下载安装Spark:spark-2.4.2-bin-hadoop2.7.tgz
https://www.apache.org/dyn/closer.lua/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz
解压、重命名
启动spark
①先启动hadoop 环境
start-all.sh
②启动spark环境
进入到SPARK_HOME/sbin下运行start-all.sh
/opt/module/spark/sbin/start-all.sh
[注] 如果使用start-all.sh时候会重复启动hadoop配置,需要./在当前工作目录下执行命令
jps 观察进程 多出 worker 和 mater 两个进程。
查看spark的web控制页面:http://bigdata128:8080/
显示spark的端口是7070
③启动Spark Shell
此模式用于interactive programming,先进入bin文件夹后运行:spark-shell
SecureCRT 下 spark-shell 下scala> 命令行无法删除,解决办法:
https://blog.csdn.net/nicolewjt/article/details/87368749
④退出Spark Shell
scala> :quit

四、使用Spark Shell编写代码
读取本地文件
在这里插入图片描述
显示第一行内容
在这里插入图片描述
读取HDFS文件
在这里插入图片描述
对上述hdfs根目录下f1.txt文件进行词频统计
在这里插入图片描述
查看结果
在这里插入图片描述

五、用Scala语言编写Spark独立应用程序
见参考资料:Spark2.1.0入门:第一个Spark应用程序:WordCount

六、用Java语言编写Spark独立应用程序

参考资料:
Spark学习之路 (五)Spark伪分布式安装
https://www.cnblogs.com/qingyunzong/p/8903714.html#_label4_0

spark1.2.0版本搭建伪分布式环境
https://blog.csdn.net/stark_summer/article/details/43495623

Spark2.1.0入门:第一个Spark应用程序:WordCount
http://dblab.xmu.edu.cn/blog/1311-2/

子雨大数据之Spark入门教程(Scala版)
http://dblab.xmu.edu.cn/blog/spark/#more-924

Spark入门:Spark运行架构
http://dblab.xmu.edu.cn/blog/972-2/

Spark入门:RDD的设计与运行原理
http://dblab.xmu.edu.cn/blog/985-2/

分布式计算归根到底还是一个Map和Reduce操作,Map操作对每个数据块进行计算,Reduce操作对结果进行汇总,现在一些NoSQL分布式数据库其实也是这么一套计算框架,只是map和reduce太基础,太简陋,实现相关的业务时开发比较复杂,不符合生产力发展的需求,这样Spark对map和reduce进行了抽象和封装提出了RDD的概念

RDD的提出是Spark的最大的进步,它让我们不再关注计算本身,以前我们老想着map,reduce啥的,RDD对数据集进行抽象,我们的关注点变成了数据集本身,又借鉴了函数式编程的一些思想,我们可以对数据集做各种各样的操作(spark的transformation和action),Spark框架底层转换了map和reduce的操作,大大的提高了生成力。当然还加入了一些优化,比如map的输出不需要落地,其实要做大数据的计算怎么可能不落地。做大数据的聚集操作时磁盘和网络IO依旧是制约速度的主要原因 https://www.cnblogs.com/gaoxing/p/4916785.html

《深入理解SPARK:核心思想与源码分析》一书对Spark1.2.0版本的源代码进行了全面而深入的分析,旨在为Spark的优化、定制和扩展提供原理性的指导。阿里巴巴集团专家鼎力推荐、阿里巴巴资深Java开发和大数据专家撰写。
本书分为三篇:
准备篇(第1~2章),介绍了Spark的环境搭建、设计理念与基本架构,帮助读者了解一些背景知识。
核心设计篇(第3~7章),着重讲解SparkContext的初始化、存储体系、任务提交与执行、计算引擎及部署模式的原理和源码分析。通过这部分的内容,读者可以通过源码剖析更加深入理解Spark的核心设计与实现,以便在实际使用中能够快速解决线上问题并对性能进行调优。
扩展篇(第8~11章),主要讲解基于Spark核心的各种扩展及应用,包括SQL处理引擎、Hive处理、流式计算框架Spark Streaming、图计算框架GraphX、机器学习库MLlib等内容。通过阅读这部分内容,读者可以扩展实际项目中对Spark的应用场景,让Spark焕发活力。

与 Hadoop 对比,如何看待 Spark 技术?
https://www.zhihu.com/question/26568496/answer/41608400

Spark RDD API(scala)
https://www.cnblogs.com/jinggangshan/p/8116948.html

一文读懂大数据计算框架与平台
http://gngj.gog.cn/system/2017/05/02/015659295.shtml

你可能感兴趣的:(spark)