史上最简单的spark系列教程

什么是spark?

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

  1. Apache Spark是一种包含流处理能力的下一代批处理框架。与Hadoop的MapReduce引擎基于各种相同原则开发而来的Spark主要侧重于通过完善的内存计算和处理优化机制加快批处理工作负载的运行速度

  2. Spark可作为独立集群部署(需要相应存储层的配合),或可与Hadoop集成并取代MapReduce引擎

  3. 与MapReduce不同,Spark的数据处理工作全部在内存中进行,只在一开始将数据读入内存,以及将最终结果持久存储时需要与存储层交互。所有中间态的处理结果均存储在内存中

  4. 除了引擎自身的能力外,围绕Spark还建立了包含各种库的生态系统,可为机器学习、交互式查询等任务提供更好的支持。相比MapReduce,Spark任务易于编写

  5. Spark的另一个重要优势在于多样性。该产品可作为独立集群部署,或与现有Hadoop集群集成。该产品可运行批处理和流处理,运行一个集群即可处理不同类型的任务

  1. 初级阶段:

    -----------------------------------------------------------------------------------------------------

    1. 变量lines其实就是一个RDD,是从电脑上的本地文本文件创建出来的

    2. 在spark中,我们要进行计算,就需要通过分布式数据集的操作表达我们的计算意图

    3. 这些计算会自动的在集群上并行计算,这样的数据集就叫做RDD(resilient distributed dataset)弹性分布式数据集

    4. RDD就是spark对分布式数据和计算的基本抽象

    5. 至于RDD是什么,简单的说:

    6. 我们可以在这个RDD上运行各种并行操作,比如我们刚才的 count()和first()

    1. spark中的pythonShell和ScalaShell命令:

    2. 运行pythonShell

    3. val lines = sc.textFile("/usr/local/spark/spark-2.2.3-bin-hadoop2.7/README.md") 

    4. //第一步操作括号中的路径是我的安装目录,README.md是spark系统文件,请确保你们的文件也在此位置

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

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

    7. ctrl+D退出shell

    1. 进入spark/bin目录

    2. ./spark-shell

    1. ./python-shell

    2. 进入spark/bin目录

    3. 运行ScalaShell

    4. 稍等片刻会有类似springboot启动图标的spark图标[welcome to spark]

    5. 开始编写sparkShell:

    1. 查看spark/bin目录下的源码包:

    2. python,R目录:源代码

    3. README.md:入门帮助

    4. bin:一些可执行命令

    5. examples:包含有java,python,r语言的入门Demo源码

    1. 下载地址:http://spark.apache.org/downloads.html(选择合适自己的版本)

    2. 安装JDK8以上

    3. 解压JDK,配置环境变量[/etc/profile],配置生效  source/etc/profile 可参考上一章:Hadoop环境部署

    4. java -version 验证

    5. 下载spark,我选择的版本是2.2.3

    6. 解压 tar -zxvf spark.......    [spark解压即可使用,前提是jdk环境OK]

    7. spark core: 实现spark的基本功能

    8. spark sql:  spark操作结构化数据的程序包

    9. spark  streaming: 实时流计算组件

    10. MLlib:机器学习库,丰富强大

    11. Graphx:图计算,图像算法

    12. 集群管理器:(类似于Hadoop的Yarn)

    1. 任务调度,内存管理,错误恢复,与存储系统交互等模块

    2. RDD:[弹性分布式数据集]API定义

    3. 通过sparkSql可以使用sql或者hsql查询数据

    4. sparksql支持多种数据源

    1. 提供操作数据流的API

    2. 为了满足从单节点到上千节点之间的伸缩计算,实现的简易调度器

    1. 什么是spark: spark是一个实现快速并且通用的集群计算框架

    2. 核心功能组件:

    3. 下载运行Demo {我的操作环境:Centos7.5}:


    4. 入门案例:

    5. 以上的shell是如何运作的?

 

 

examples中的java代码示例:

 执行shell示例:

 

 

上一篇搭建Hadoop单机环境运行MapReduce后本来是计划搭建完全分布式环境的

但是公司内部开会讨论后,考虑效率以及业务场景,决定不使用MapReduce做批计算

原因是太慢....而且后期需要集成其他流处理框架,建模才能满足不同需求

现决定采用spark技术栈做批处理和流处理,底层还是Hadoop的HDFS分布式文件系统

Elasticsearch实时索引,logstash清洗数据,kafka队列

最近的文章都会以spark学习为主

有什么问题还是一块讨论,一块学习

ElasticsearchJavaApi高级使用和Springboot的教程抽空就会更新出来,

有什么问题请大家及时指正,谢啦


猜你喜欢

转载自blog.51cto.com/14193448/2531396