Spark计算框架(四)
我们知道 Spark 的基本架构是 Master 和 Worker 组成的,Task 的分配和执行又是由 Driver 进程和 Excutor 进程
去配合完成的,那关于他们内部是怎么运行的,有哪些对象呢,这里将 做详细阐述。
广播变量和累加器
广播变量
广播变量理解图
广播变量使用
context.broadCast
val conf = new SparkConf()conf.setMaster("local").setAppName("brocast")val sc = new SparkContext(conf)val list = List("hello xasxt")val broadCast = sc.broadcast(list)val lineRDD = sc.textFile("./words.txt")lineRDD.filter { x => broadCast.value.contains(x) }.foreach { println ...
Spark计算框架(三)
关于 Spark 算子的应用案例有很多,这里介绍一些一些不常见但是很有用的算子,以及几个小案例的源码介绍。
补充算子
transformations
mapPartitionWithIndex
类似于 mapPartitions,除此之外还会携带分区的索引值。
repartition
增加或减少分区。会产生shuffle。
coalesce
coalesce 常用来减少分区,第二个参数是减少分区的过程中是否产生 shuffle。
true 为产生 shuffle,false 不产生 shuffle。默认是 false。
如果 coalesce 设置的分区数比原来的 RDD 的分区数还多的话,第二个参数设置为 false 不会起作用,如果设置成 true,效果和 repartition 一样。即 repartition(numPartitions) = coalesce(numPartitions,true)
groupBykey
作用在 K,V 格式的 RDD 上。根据 Key 进行分组。作用在(K,V),返回(K,Iterable )。
zip
将两个 RD ...
Spark计算框架(二)
关于Spark的任务提交方式,总的分为 Client 提交和 Cluster 提交两种。这里以 Standalone 和 Yarn 为例详细阐述他们在 Spark 中提交任务的流程。
Spark任务提交方式
注意:使用Standalone-Cluster方式提交任务时,必须保证所有的节点上(放在Spark/lib/ 下)都有这个jar包,示例中使用的jar包系统默认都有。但使用Yarn方式时只需提交的节点存在jar包即可,因为在Yarn中会共享这个jar包!!!
Standalone方式
1、Standalone-Client 提交
提交命令
./spark-submit --master spark://sean01:7077 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
或者
./spark-submit --master spark://sean01:7077 --deploy-mode client --class org.apache ...
Spark计算框架(一)
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。
Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架。
Spark介绍
Spark 基于 MapReduce 算法实现的分布式计算,拥有Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job中间输出和结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。Spark 是 Scala 编写,方便快速编程。
spark相比MapReduce重要的点:
spark的中间结果依然保存在内存中。
Apache Spark使用最先进的DAG(有向无环图)调度程序。
这两个特点使得 spark 非常适用于迭代计算,在迭代计算中比MR快100倍。
Spark的四大特性
1、高效性
在迭代计算中运行速度提高100倍。
Apache Spark使用最先进的DAG调度程序,查询优化程序和物理执行引擎,实现批量和流式数据 ...
流式处理Storm
Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。
官网 http://storm.apache.org
Storm简介
Storm进程常驻内存,数据不经过磁盘,在内存中处理。
流式处理
1、流式处理(异步)
客户端提交数据进行结算,并不会等待数据计算结果。
2、逐条处理
例:ETL
3、统计分析
例:计算PV、UV、访问热点 以及 某些数据的聚合、加和、平均等
客户端提交数据之后,计算完成结果存储到Redis、HBase、MySQL或者其他MQ当中,
客户端并不关心最终结果是多少。
实时请求
1、实时请求应答服务(同步)
客户端提交数据请求之后,立刻取得计算结果并返回给客户端
2、Drpc
3、实时请求处理
例:图片特征提取
高可靠性
1、异常处理
2、消息可靠性保障机制。
可维护性
StormUI 图形化监控接口
Storm与MR、Spark对比
Storm对比Mapreduce
Storm:进程、线程常驻内存运行,数据不进入磁盘,数据通过网络传递。
MapReduce:为TB、P ...
消息队列Kafka
Kafka 是一个高吞吐、低延迟分布式的消息队列系统。kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒。
官网:https://kafka.apache.org
Kafka 简介
Kafka 架构
kafka 集群有多个 Broker 服务器组成,每个类型的消息被定义为 topic。
同一 topic 内部的消息按照一定的 key 和算法被分区(partition)存储在不同的 Broker 上。
消息生产者 producer 和消费者 consumer 可以在多个 Broker 上生产/消费 topic。
Broker:服务器节点
消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群;
Topic:消息主题(类型)
主题是对一组消息的抽象分类,比如例如page view日志、click日志等都可以以topic的形式进行抽象划分类别。在物理上,不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可使得数据的生产者或消费者不必关心数据存于 ...
spring框架总结
Spring 简介
什么是 Spring
Spring 是一个轻量级的 DI / IOC 和 AOP 容器的开源框架,来源于 Rod Johnson 在其著作**《Expert one on one J2EE design and development》**中阐述的部分理念和原型衍生而来。
Spring 提倡以**“最少侵入”**的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载 Spring。
适用范围:任何 Java 应用
Spring 的根本使命:简化 Java 开发
框架中常用术语
框架:
是能完成一定功能的半成品。
框架能够帮助我们完成的是:项目的整体结构布局、一些基础功能、规定了类和对象如何创建,如何协作等,当我们开发一个项目时,框架帮助我们完成了一部分功能,我们自己再完成一部分,那这个项目就完成了。
非侵入式设计:
从框架的角度可以理解为:无需继承框架提供的任何类
这样我们在更换框架时,之前写过的代码几乎可以继续使用。
轻量级和重量级:
轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简 ...
关于Scala中的方法详解
在编程语言 Scala 中有很多常用的方法。这里做逐一讲解,仅供参考!
String方法
char charAt(int index)返回指定位置的字符 从0开始 int compareTo(Object o)比较字符串与对象 int compareTo(String anotherString)按字典顺序比较两个字符串 int compareToIgnoreCase(String str)按字典顺序比较两个字符串,不考虑大小写 String concat(String str)将指定字符串连接到此字符串的结尾 boolean contentEquals(StringBuffer sb)将此字符串与指定的 StringBuffer 比较。 static String copyValueOf(char[] data)返回指定数组中表示该字符序列的 String static String copyValueOf(char[] data, int offset, int count)返回指定数组中表示该字符序列的 String boolean endsWith(String suffi ...