Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spark Quick #22

Open
w4n9H opened this issue Aug 10, 2018 · 0 comments
Open

Spark Quick #22

w4n9H opened this issue Aug 10, 2018 · 0 comments
Labels
Java Java系,比如Scala,Clojure,Spark等

Comments

@w4n9H
Copy link
Owner

w4n9H commented Aug 10, 2018

Spark Quick

  • Spark是一个专门为大量数据处理的类MR分布式计算框架
  • Spark将计算中间结果保存在内存中,提升计算速度
  • Spark基于Scala语言中实现的,将Scala用作其应用程序框架

Spark组件和架构

基本组件:

  • Spark Core:包含Spark的基本功能;主要定义RDD,及其相关的API
  • Spark SQL:通过类SQL与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作
  • Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据
  • Spark MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作
  • Spark GraphX :控制图、并行图操作和计算的一组算法和工具的集合

基本架构:

  • 集群管理器:Mesos,YARN
  • 存储:HDFS,S3,Cassandra
  • 流式数据:Kafka,ZeroMQ,MQTT

集群构成:

  • Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。
  • Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。
  • Driver: 运行Application的main()函数
  • Executor:执行器,是为某个Application运行在worker node上的一个进程

与Hadoop的区别

  1. spark只是计算平台,hadoop是及计算,存储,管理的生态系统
  2. spark可以脱离hadoop运行,四大组件可以解决绝大多数计算问题
  3. saprk基于内存速度更快,基于scala让程序可读性和易用性更强

Spark 安装 (ubuntu18.04)

1.安装jdk1.8.0,scala2.12.6,sbt,spark2.3.1
2.执行spark-shell,成功进入scala shell即安装成功
3.执行pyspark,可进入python shell

val textFile = sc.textFile("file:///home/w4n9/Apps/spark-2.3.1-bin-hadoop2.7/README.md")
textFile.count
val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)

RDD (Resilient Distributed Datasets弹性分布式数据集)

把一个超大的数据集(RDD),切分成N个小块(Partition),找M个执行器(M < N),每个执行器拿一块或多块数据进行计算,最后再将结果收集在一起,得出最终结果。RDD是一个lazy类型,只有在执行时才会加载,加载时这些数据块来自存储或者内存。并且RDD提供了相当多种类的操作API。
这么看来Spark的机制和Elasticsearch有点类似,索引就相当于RDD,shard相当于数据块Partition,执行查询时也是每个shard先进行各自的计算,然后汇总,ES的query类似spark sql。
ES和Spark不同的地方在于,ES缺少主动读取并处理流式数据的能力(Spark Streaming),以及对索引数据进行科学计算的能力(Spark MLlib)

  • 关于数据倾斜的问题,当某些Partition过大时,会加长整个job的计算时间,而当数据在Partition分布不均时,groupBy这种操作也会出现不准确的问题,需要通过选择合适的key以及适当的Partition数量避免这种情况的发生。
  • 序列化(持久化),为了避免异常关机导致内存数据丢失,Spark肯定有一个持久化的过程,避免这种情况,而且Spark在Shuffle的时候要将数据先存储到磁盘中,存储的内容是经过序列化的,这个时候序列化和反序列化的速度也会影响job速度。

Spark SQL

  • Spark SQL 基于 DataSet/DataFrame,是一种列式存储的类RDD数据类型(RDD变种?,又或者是类似hbase),
  • Spark SQL允许使用标准的SQL语句或者HiveQL的关系查询表达式来分析数据,比较适合做简单的数据分析和聚合。
  • 可以通过spark-sql进入sql的shell,可以直接执行sql查询语句。
  • 此外Spark SQL可以访问Hive/Impala或者其他关系数据库。

Spark Steaming

Spark支持对输入流进行监听和处理,能对其进行分区,以接近实时的方式来进行计算聚合。

  • Kafka
  • HDFS / S3
  • ZeroMQ / MQTT

流的传输是以小批量的方式进行的,Spark内部会以将输入数据分成小批量的数据块,然后执行RDD聚合操作,将小块的数据合并成大块的数据,避免数据块过多的情况。

Spark MLlib

RDD提供的API中包含了大量的机器学习算法:

  • 基本统计(概要统计,随即数据生成)
  • 分类与回归(线性模型,朴素贝叶斯,决策树)
  • 协同过滤(交替最小二乘)
  • 聚类(k-means,Gaussian)
  • 降维(奇异值分解,主成分分析)
  • 特征提取与变换
  • 频繁模式挖掘(FP-growth,关联规则)
  • 优化(随机梯度下降,优先内存BFGS)

但是一个都看不懂,emmm

Spark GraphX

关于图
图是由顶点和边组成的,并非代数中的图,图可以对事物以及事物之间的关系建模,图可以用来表示自然发生的连接数据。比如社交网络,地图。
常用应用:

  • 人物画像
  • 地图应用中找到最短路径
@w4n9H w4n9H added the Java Java系,比如Scala,Clojure,Spark等 label Aug 10, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Java Java系,比如Scala,Clojure,Spark等
Projects
None yet
Development

No branches or pull requests

1 participant