Spark学习(一)---Spark简介和运行环境

1.Spark介绍

Hadoop中的MapReduce框架在设计之初并不是为了满足循环迭代式数据流处理,因此在多并行运行的数据可复用场景(如:机器学习,图像挖掘算法、交互式数据挖掘算法)中存在诸多效率问题。所以Spark就是在传统的MR计算框架的基础上,利用其计算过程的优化,从而大大加快了数据分析、挖掘的运行和读写速度,并且将计算单元缩小到更适合并行计算和重复使用的RDD模型。

Spark和Hadoop的根本差异就在于多个作业(job)之间的数据通信问题:Spark多个作业之间数据通信是基于内存的,而Hadoop框架是基于磁盘的。

1.1 Spark核心模块

在这里插入图片描述

Spark Core
Spark Core中提供了Spark最基本和核心的功能,Spark其他的功能都是在Spark Core的基础上进行扩展的。
Spark SQL
Spark SQL是Spark用来操作结构化数据的组件,通过Spark SQL,用户可以使用SQL或者HQL来查询数据
Spark Streaming
Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API
Spark MLlib
Spark MLlib是Spark提供的一个机器学习的算法库,MLlib不仅提供了模型评估,数据导入等额外的功能,还提供了一些机器学习的原语
Spark GraphX
GraphX是Spark面向图计算提供的框架和算法库

1.2 使用Spark写一个WordCount

package com.atguigu.bigdata.spark.core

import org.apache.spark.{SparkConf, SparkContext}

class Spark_demo_WordCount {

}

object Spark_demo_WordCount{
  def main(args: Array[String]): Unit = {
    System.setProperty("hadoop.home.dir", "E:\\BigDataLearn\\hadoop-3.2.3")
    //1.建立和Spark框架的连接
    val sparkConf=new SparkConf().setMaster("local").setAppName("WordCount")
    val sc = new SparkContext(sparkConf)
    //2.执行业务操作

//    //读取数据,一行一行的获取数据
//    val lines = sc.textFile("datas")
//
//    //将一行一行的数据拆分(扁平化操作)
//    val words = lines.flatMap((lines: String) =>
//      lines.split(" ")
//    )
//
//    //将数据根据单词进行分组,便于统计
//    val wordGroup = words.groupBy((word: String) => word)
//
//    //对分组后的数据进行转化
//    val value = wordGroup.map((tuple) => {
//      (tuple._1, tuple._2.size)
//    })
//
//
//    //将转换结果采集到控制台打印
//    for( e<-value)
//    {
//      println(e)
//    }


    //wordcount不同的实现
    val lines = sc.textFile("datas")

    val words = lines.flatMap((line: String) => line.split(" "))

    val wordTuple = words.map((w:String)=>{
      (w,1)
    })
    val wordGroup = wordTuple.groupBy((tuple) => {
      tuple._1
    })
    for(e<-wordGroup)
      {
        println(e)
      }


    val value = wordGroup.map {
      case (key:String, list:Iterable[(String,Int)]) => {
        list.reduce((t1, t2) => {
          (t1._1, t1._2 + t2._2)
        })

      }
    }


    val tuples = value.collect()
    for(e<-tuples)
      {
        println(e)
      }

    //3.spark关闭连接
    sc.stop()
  }
}

1.2 Spark运行环境

Spark作为一个数据处理框架和计算引擎,被设计在所有的集群环境中运行,在国内工作中主流的环境为yarn,不过逐渐容器式的环境也慢慢流行起来。
在这里插入图片描述

1.2.1 Local模式

所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境,一般用于教学,调试和演示等。

1.2.2 Standalone 模式

local 本地模式毕竟只是用来进行练习演示的,真实工作中还是要将应用提交到对应的
集群中去执行,这里我们来看看只使用 Spark 自身节点运行的集群模式,也就是我们所谓的
独立部署(Standalone)模式。Spark 的 Standalone 模式体现了经典的 master-slave 模式。
在这里插入图片描述

1.2.3 高可用模式(HA)模式

所谓的高可用是因为当前集群中的 Master 节点只有一个,所以会存在单点故障问题。所以为了解决单点故障问题,需要在集群中配置多个 Master 节点,一旦处于活动状态的 Master发生故障时,由备用 Master 提供服务,保证作业可以继续执行。这里的高可用一般采用Zookeeper 设置

1.2.4 Yarn模式

独立部署(Standalone)模式由 Spark 自身提供计算资源,无需其他框架提供资源。这
种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但是你也要记住,Spark 主
要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以还是
和其他专业的资源调度框架集成会更靠谱一些。所以接下来我们来学习在强大的 Yarn 环境
下 Spark 是如何工作的(其实是因为在国内工作中,Yarn 使用的非常多)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值