CAP理论

可用性(Consistency),
一致性(Availability),
分区容忍性(Tolerance)

三者取二
传统HPC并行计算架构,使用SAN共享底层框架,难扩展,一个节点故障系统不运行

MapReduce

计算向数据靠拢:数据不迁移,在节点上计算,再汇总结果
spark中,map将函数作用到数据集的每一个元素上,生成一个新的分布式的数据集(RDD)返回

flatMap会先执行map的操作,再将所有对象合并为一个对象,返回值是一个Sequence

reduceByKey会寻找相同key的数据,当找到这样的两条记录时会对其value(分别记为x,y)做(x,y) => x+y的处理,即只保留求和之后的数据作为value。
反复执行这个操作直至每个key只留下一条记录。

map任务,切分,形成分片,输出键值对。
先存到缓存,启动溢写进程,写入磁盘。
并不是直接写进磁盘,而是要分区,排序,可能有合并(combine)。

master部署程序,slave执行map或reduce任务
对于执行map的机器,

  1. 拆分,数据分片,从分布式数据库,读数据集,生成key-value,
  2. 根据map的逻辑,输出处理结果,先写缓存,再写磁盘,磁盘中是大文件,要发送reduce
  3. reduce拉回数据到本地,处理结果是key-value,再写输出文件。

hadoop批处理,storm流处理框架。
RDD受控共享模型,只读。
转换和动作两类操作。
DAG图具有容错机制,不需要冗余备份或日志记录。
窄依赖不断开(同一个stage,流水线作业),宽依赖断开(不同stage)。

master-slave架构

一个master服务器和若干slave服务器
master服务器,用作业跟踪器JobTracker,负责整个作业的调度和处理以及失败和恢复
slave服务器,负责具体执行TaskTracker, 负责接受JobTracker的作业,完成具体处理。

Scala 语言特点

Scala 是一门 以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。
  1)Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。
  2)Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。
  3)Scala单作为一门语言来看,非常的简洁高效。
  4)Scala在设计时,马丁·奥德斯基是参考了Java的设计思想,可以说Scala是源于Java,同时马丁·奥德斯基也加入了自己的思想,将函数式编程语言的特点融合到JAVA中, 因此,对于学习过Java的同学,只要在学习Scala的过程中,搞清楚Scala和Java相同点和不同点,就可以快速的掌握Scala这门语言。

spark库

(1)Spark SQL:
首先使用SQL语句解析器(SqlParser)将SQL转换为语法树(Tree),并且使用规则执行器(RuleExecutor)将一系列规则(Rule)应用到语法树,最终生成物理执行计划并执行。其中,规则执行器包括语法分析器(Analyzer)和优化器(Optimizer)。

(2)Spark Streaming:
用于流式计算。Spark Streaming支持Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和简单的TCP套接字等多种数据输入源。输入流接收器(Receiver)负责接入数据,是接入数据流的接口规范。Dstream是Spark Streaming中所有数据流的抽象,Dstream可以被组织为Dstream Graph。Dstream本质上由一系列连续的RDD组成。

(3)GraphX:
Spark提供的分布式图计算框架。GraphX主要遵循整体同步并行(bulk Synchronous parallel,BSP)计算模式下的Pregel模型实现。GraphX提供了对图的抽象Graph,Graph由顶点(Vertex),边(Edge)及继承了Edge的EdgeTriplet三种结构组成。GraphX目前已经封装了最短路径,网页排名,连接组件,三角关系统计等算法的实现,用户可以选择使用。

(4)MLlib:
Spark提供的机器学习框架。机器学习是一门设计概率论、统计学、逼近论、凸分析、算法复杂度理论等多领域的交学科。MLlib目前已经提供了基础统计、分析、回归、决策树、随机森林、朴素贝叶斯、保序回归、协同过滤、聚类、维数缩减特征提取与转型、频繁模式挖掘、预言模型标记语言、管道等多种数理统计、概率论、数据挖掘方面的数学算法。

spark sql作用:统一数据访问,RDD,HIVE,扩展兼容

启动顺序

Hadoop---->Spark----->ZooKeeper---->HBase
除了ZooKeeper需要每个机器挨个启动,其他的进程只需要启动主节点

各个模块调用关系

在这里插入图片描述
在这里插入图片描述

启动过程

1.spark集群启动后,Worker向Master注册信息
2.spark-submit命令提交程序后,driver和application也会向Master注册信息
3.创建SparkContext对象:主要的对象包含DAGScheduler和TaskScheduler
4.Driver把Application信息注册给Master后,Master会根据App信息去Worker节点启动Executor
5.Executor内部会创建运行task的线程池,然后把启动的Executor反向注册给Dirver
6.DAGScheduler:负责把Spark作业转换成Stage的DAG(Directed Acyclic Graph有向无环图),
根据宽窄依赖切分Stage,然后把Stage封装成TaskSet的形式发送个TaskScheduler;       
同时DAGScheduler还会处理由于Shuffle数据丢失导致的失败;
7.TaskScheduler:维护所有TaskSet,分发Task给各个节点的Executor(根据数据本地化策略分发Task),
监控task的运行状态,负责重试失败的task;
8.所有task运行完成后,SparkContext向Master注销,释放资源;
注:job的失败不会重试

提交任务

spark-submit
(1) --class 指向程序中的主类。
例如:–class “helloworld”
(2) --master 是指集群的master URL。

–master local[K] 这是在本地运行,并且启动K个worker节点
master spark:/ /host:port standalone

其它参数

./bin/ spark-submit
–class
–master
–deploy-mode
–conf = \ …#其他参数,详情请参考spark-submit --help \ <jar的路径> \

hdfs上传和下载到本地的命令

hadoop fs -get file(或者端口) 复制文件到本地文件系统
hdfs dfs -put file 上传文件。从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。

部署

standalone,mesos,yarn三种部署方式

在集群中运行应用程序JAR包向Hadoop YARN集群管理器提交应用,需要把yarn-cluster作为主节点参数递给spark-submit。
1、如果使用root用户进行安装。 vi /etc/profile 即可 系统变量
2、如果使用普通用户进行安装。 vi ~/.bashrc 用户变量

分布式集群管理大概可分为以下几点:节点管理、设备的管理、集群容量管理、集群策略管理、服务管理以及节点故障处理等,一般采用一个主节点(Master),其他节点都为从节点(Slave)的设计方式

spark master默认会占用8080和7077等端口,8080用于网页访问,7077用于和slave间通信。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐