史上最简单的spark分布式计算教程第一章-快速运行你的第一个spark程序

快速入门spark:

史上最简单的spark教程 所有代码示例地址:https://github.com/Mydreamandreality/sparkResearch

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

(文章参考:Elasticsearch权威指南,Spark快速大数据分析文档,Elasticsearch官方文档,实际项目中的应用场景)

(帮到到您请点点关注,文章持续更新中!)

Git主页    https://github.com/Mydreamandreality

什么是spark?

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

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

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

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

    2. 核心功能组件:

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

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

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

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

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

        2. sparksql支持多种数据源

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

        1. 提供操作数据流的API

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

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

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

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

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

      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]

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

        1. python,R目录:源代码

        2. README.md:入门帮助

        3. bin:一些可执行命令

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

    4. 入门案例:

      1. spark中的pythonShell和ScalaShell命令:

      2. 运行pythonShell

        1. 进入spark/bin目录

          1. ./python-shell

        2. 运行ScalaShell

          1. 进入spark/bin目录

            1. ./spark-shell

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

        4. 开始编写sparkShell:

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

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

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

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

          5. ctrl+D退出shell

    5. 以上的shell是如何运作的?
      1. 变量lines其实就是一个RDD,是从电脑上的本地文本文件创建出来的

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

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

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

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

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

 

 

examples中的java代码示例:

史上最简单的spark分布式计算教程第一章-快速运行你的第一个spark程序

 执行shell示例:

史上最简单的spark分布式计算教程第一章-快速运行你的第一个spark程序史上最简单的spark分布式计算教程第一章-快速运行你的第一个spark程序

 

 

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

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

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

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

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

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

个人的学习过程都以文档的方式记录下分享出来

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

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

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

(*^▽^*)

(*^▽^*)