当前位置:   article > 正文

大数据——spark一文全知道_大数据spark

大数据spark

1、spark概述

spark是专为大规模数据处理而设计的快速通用计算引擎,与Hadoop的MapReduce功能类似,但它是基于内存的分布式计算框架,存储还是采用HDFS。

MapReduce和Spark的区别

  • MapReduce的MapReduce之间需要通过磁盘进行数据传递,Spark直接存在内存中,所以速度更快。
  • MapReduce的Task调度和启动开销大,而Spark的Task在线程中开销小一些。
  • MapReduce编程不够灵活,Spark的API丰富。
  • MapReduce的Map和Reduce都要一次shuffle,而Spark可以减少shuffle。

两者框架的区别:

功能 Hadoop组件 Spark组件
批处理 MapReduce、Hive或者Pig Spark Core、Spark SQL
交互式计算 Impala、presto Spark SQL
流式计算 Storm Spark Streaming
机器学习 Mahout Spark ML、Spark MLLib

Spark具有以下优点:

  • 基于内存速度快;
  • Java、Python和R语言可以开发spark易用性好;
  • spark框架组件丰富,通用性高;
  • 可以运行在多种存储结构上,兼容性高。

Spark的缺点:

  • 内存消耗大。

2、Spark数据集

Spark的数据集合采用RDD(Resilient Distributed Dataset)弹性分布式数据集,它是一个不可变、可分区和可并行计算的集合。

  • 不可变:RDD1到RDD2时,RDD1任然存在;
  • 可分区:可分为多个partition;
  • 并行计算;
  • Dataset是指数据集,主要用于存放数据;
  • Distributed是指分布式存储,并且可以进行分布式计算;
  • Resilient弹性的特点:
    • 数据可以保存在磁盘中,也可以在内存中;
    • 数据分布式存储也是弹性的:
      • RDD分在多个节点上存储,与HDFS的分布式存储原理类似:HDFS文件以128M为基准切分为多个block存储在各个节点上,而RDD则会被切分为多个partition,这些partition在不同的节点上;
      • spark读取HDFS时,会把HDFS上的block读到内存上对应为partition;
      • spark计算结束时,会把数据存储到HDFS上,可以对应到Hive或者HBase上,以HDFS为例:RDD的每一个partition的大小小于128M时,一个partition对应HDFS的block;大于128M时,则会切分为多个block。

3、RDD的数据操作

RDD的数据操作也叫做算子,一共包括三类算子:transformation、action和persist,其中前两种进行数据处理,persist进行数据存储操作。

  • transformation:是将一个已经存在的数据集转化为一个新的数据集,map就是一个transformation操作,把数据集的每一个元素传给函数并返回新的RDD
  • action:获取数据进行运算后的结果,reduce就是一个action操作,一般聚合RDD所有元素的操作,并返回最终计算结果。
  • persist:缓存数据,可以把数据缓存在内存上,也可以缓存在磁盘上,甚至可以到磁盘其他节点上。

我们要了解所有的transformation的操作都是lazy:即不会立刻计算结果,而是记录下数据集的transformation操作,只有调用了action操作之后才会计算所有的transformation,这样会让spark运行效率更高。
在这里插入图片描述
pyspark启动
进入SPARK_HOME/sbin⽬录下执⾏

pyspark
  • 1

在这里插入图片描述
sparkUI
可以在spark UI中看到当前的Spark作业 在浏览器访问当前centos的4040端⼝192.168.19.137:4040
在这里插入图片描述
启动RDD
在这里插入图片描述

3.1 transformation算子

  • map(func):将func函数作用到数据集的每一个元素上,返回一个新的RDD
rdd1 = sc.parallelize([1,2,3,4,5,6,7,8,9],3)
rdd2 = rdd1.map(lambda x:x+1)
print(rdd2.collect())
  • 1
  • 2
  • 3

[2, 3, 4, 5, 6, 7, 8, 9, 10]

  • filter(func):筛选func函数中为true的元素,返回一个新的RDD
rdd1 = sc.parallelize([1,2,3,4,5,6,7
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/901807
    推荐阅读
    相关标签
      

    闽ICP备14008679号