技术标签: spark
Spark是Lightning-fast unified analytics engine
- 快如闪电的统一的分析引擎(不参与数据持久化)。
快
(1)Spark基于内存的计算引擎,相比于MapReduce磁盘计算,速度自然
快
- 大众认知
(2)Spark使用先进的DAG(矢量计算)计算模型,将一个复杂的任务拆分成若干个stage(阶段),
这样复杂的任务Spark只需要一个job即可完成。(如果使用MapReduce计算模型可能需要串连若干个Job)
(3) Spark实现DAG计算将任务划分为若干个阶段,同时也提供了对stage阶段计算数据的缓存能力,这样就极大提升计算效率和容错。
统一:Spark统一大数据常见计算例如:批处理(替代MapReduce)、流处理(替代Storm)、统一SQL(替代了Hive)、Machine Learning(替代Mahout 基于MapReduce计算方案)、支持GraphX存储-图形关系存储(存储数据结构)(替代了早期Neo4j的功能)
Spark的诞生仅仅是为了替换早期的Hadoop的MapReduce计算引擎。Spark并没有存储解决方案,在Spark的架构中,底层存储方案依然延续Hadooop的HDFS/Hbase.由于Hadoop的MapReduce是大数据时代出现的第一类大数据分析工具,因为出现比较早仅仅为了满足大数据计算的刚性需求(能够做到对大数据的计算,并且可以保证在一个合理的时间范围内)。因此伴随着科技的进步,互联网的快速发展,人们开始对大数据计算提出了更苛刻要求,例如 使用 MapReduce算法去实现 推荐、聚合、分类、回归
等科学问题(算法),因为这些算法的实现较为复杂,计算过程比较繁琐,当使用MapReduce计算模型去实现的时候,延迟有无限的放大了,原因有两个:① MapReduce计算阶段过于简单 Map-> Reduce ②MapReduce 计算无法对计算结果缓存,必须将计算数据持久化到磁盘③ 应对复杂计算(迭代计算),MapReduce就变成了名副其实的磁盘迭代计算。
Spark的设计中汲取了Map Reduce的设计经验,在2009 年Spark在加州伯克利AMP实验室诞生,2010年首次开源(同年MapReduce进行一次改革,将classic MapRedcue 升级为Yarn),2013年6开始在Apache孵化,2014年2月份正式成为Apache顶级项目(于此同时有一款当时不怎么出名Apache Flink(流处理
)也在2014年12月份也成为Apache顶级项目)。由于Spark计算底层引擎使用批处理
计算模型实现,非常容易被广大深受MapReduce计算折磨程序员所接受,所以就导致了Spark 的关注度直线提升(甚至人们忽略Flink
存在)。
从上图可以看到Spark是一个基于内存的迭代,使用先进DAG(有向无环图)讲一个任务拆分若干个stage,这样程序就可以极大地利用系统的计算资源,同时使用内存策略缓存数据,实现任务的故障容错。
为何Spark如此欢迎?
不仅如此,人们宣扬Spark的时候提出One Stack ruled them(mapreduce、storm、hive、mahout、neo4j) all
.一站式解决方案让人们激动不已。于此同时Spark在架构设计上启动承上启下的作用,企业可以延续一代大数据架构,直接使用Spark接管计算架构,存储和资源管理可以复用,因此平台转变|迁移成本低。
clientNode
:程序,Job的入口类
ResourceManager
:资源的管理器,负责管理所有NodeManager,负责启动MrAppmaster
NodeManager
:负责向ResourceManager汇报自身计算资源(一台物理主机运行NodeManager,该NodeManager默认会将该台物理主机的计算资源抽象成8个等分,一个等分称为Container)。负责启动Container进程(MRAppmaster|YarnChild)
MRAppMaster
:一个job任务在启动初期都会先分配一个Container用于去运行MRAppMaster
用于检测和管理当前job的计算进程YarnChild
YarnChild
:具体负责计算的JVM进程,主要运行Map Task
或者Reduice Task
.
缺点:
1)任务划分粗糙Map -> Reduce
2 ) MapTask|ReduceTask是通过进程
方式实现任务的计算,启动成本太高。
3)MapReduce会将Map阶段的计算中间结果溢写到本地磁盘,在Map节点磁盘IO操作频繁。
MapReduce计算资源是在任务运行过程中MRappMaster动态申请。
Driver
:用户的程序,其中包含DAGSchedule和TaskSchedule分别负责任务stage拆分和任务的提交。
ClusterManager
:组要负责计算节点管理(Master|ResouceManager),以及资源的分配。
Executor-进程
:Spark的每一个job再启动前期都会申请计算资源(Yarn申请JVM进程Container、Standalone申请Core线程)。
Task
: 计算的线程(Spark的计算是以线程为单位)
Spark计算的优点
- Spark 使用DAG将任务拆分成若干个阶段,可以实现复杂迭代计算
2)Spark的计算中间结果是可以缓存在计算节点的内存中,加速计算速度
3)Spark使用线程的方式实现计算,实现更细粒度的计算资源管理。
Spark是在计算任务初期,就已经申请到计算资源。可以很好的解决资源竞争的问题(使用Executor进程实现任务的计算隔离)。
[root@CentOS ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.221.133 CentOS
[root@CentOS ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@CentOS ~]# chkconfig iptables off
[root@CentOS ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
d5:fc:7d:65:12:82:c1:02:d3:c2:46:1c:62:78:02:01 root@CentOS
The key's randomart image is:
+--[ RSA 2048]----+
|Eo .o+=+ ..o. . |
| o...=.o oo . . |
| o . . .. o . o|
| . . +.|
| S . o|
| .|
| |
| |
| |
+-----------------+
[root@CentOS ~]# ssh-copy-id CentOS
The authenticity of host 'centos (192.168.221.133)' can't be established.
RSA key fingerprint is 15:20:f6:5f:b5:0b:53:b1:cf:9b:09:45:53:ab:f1:a2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'centos,192.168.221.133' (RSA) to the list of known hosts.
root@centos's password:
Now try logging into the machine, with "ssh 'CentOS'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
[root@CentOS ~]# rpm -ivh jdk-8u191-linux-x64.rpm
warning: jdk-8u191-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ########################################### [100%]
1:jdk1.8 ########################################### [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@CentOS ~]# vi .bashrc
JAVA_HOME=/usr/java/latest
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.
export JAVA_HOME
export PATH
export CLASSPATH
[root@CentOS ~]# source .bashrc
[root@CentOS ~]# jps
4803 Jps
[root@CentOS ~]# tar -zxf hadoop-2.9.2.tar.gz -C /usr/
[root@CentOS ~]# vi .bashrc
HADOOP_HOME=/usr/hadoop-2.9.2
JAVA_HOME=/usr/java/latest
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
CLASSPATH=.
export HADOOP_HOME
export JAVA_HOME
export PATH
export CLASSPATH
[root@CentOS ~]# source .bashrc
[root@CentOS ~]# vi /usr/hadoop-2.9.2/etc/hadoop/core-site.xml
<!--nn访问入口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://CentOS:9000</value>
</property>
<!--hdfs工作基础目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop-2.9.2/hadoop-${user.name}</value>
</property>
[root@CentOS ~]# vi /usr/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
<!--block副本因子-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--配置Sencondary namenode所在物理主机-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>CentOS:50090</value>
</property>
<!--设置datanode最大文件操作数-->
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
<!--设置datanode并行处理能力-->
<property>
<name>dfs.datanode.handler.count</name>
<value>6</value>
</property>
[root@CentOS ~]# vi /usr/hadoop-2.9.2/etc/hadoop/slaves
CentOS
[root@CentOS ~]# tar -zxf spark-2.4.3-bin-without-hadoop.tgz -C /usr/
[root@CentOS ~]# mv /usr/spark-2.4.3-bin-without-hadoop/ /usr/spark-2.4.3
[root@CentOS ~]# cd /usr/spark-2.4.3/
[root@CentOS spark-2.4.3]# mv conf/spark-env.sh.template conf/spark-env.sh
[root@CentOS spark-2.4.3]# mv conf/slaves.template conf/slaves
[root@CentOS spark-2.4.3]# vi conf/spark-env.sh
SPARK_WORKER_INSTANCES=2
SPARK_MASTER_HOST=CentOS
SPARK_MASTER_PORT=7077
SPARK_WORKER_CORES=4
SPARK_WORKER_MEMORY=2g
LD_LIBRARY_PATH=/usr/hadoop-2.9.2/lib/native
SPARK_DIST_CLASSPATH=$(hadoop classpath)
export SPARK_MASTER_HOST
export SPARK_MASTER_PORT
export SPARK_WORKER_CORES
export SPARK_WORKER_MEMORY
export LD_LIBRARY_PATH
export SPARK_DIST_CLASSPATH
export SPARK_WORKER_INSTANCES
[root@CentOS spark-2.4.3]# vi conf/slaves
CentOS
[root@CentOS spark-2.4.3]# ./sbin/start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /usr/spark-2.4.3/logs/spark-root-org.apache.spark.deploy.master.Master-1-CentOS.out
CentOS: starting org.apache.spark.deploy.worker.Worker, logging to /usr/spark-2.4.3/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-CentOS.out
[root@CentOS spark-2.4.3]# jps
10752 Jps
7331 DataNode
7572 SecondaryNameNode
7223 NameNode
10680 Worker
10574 Master
安装成功后,可以访问http://ip:8080访问
![https://gitee.com/PengFei-io/pic_bed/raw/master/20200516/b36zWlCBZSpE.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUGVuZ0ZlaS1pby9waWNfYmVkL3Jhdy9tYXN0ZXIvMjAyMDA1MTYvYjM2eldsQ0JaU3BFLnBuZw?x-oss-process=image/format,png
[root@CentOS spark-2.4.3]# ./bin/spark-shell --master spark://CentOS:7077 --deploy-mode client --total-executor-cores 2
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://CentOS:4040
Spark context available as 'sc' (master = spark://CentOS:7077, app id = app-20190812200525-0000).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.3
/_/
Using Scala version 2.11.12 (Java HotSpot
文章浏览阅读9.9k次,点赞5次,收藏11次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
文章浏览阅读4.6k次。1.下载下载echart微信小程序demo和库echarts-for-weixin2.引入到微信小程序中1)创建一个新的快速启动模板微信小程序项目参考例子路由:/pages/index/index2)存放echart库须将demo所有的ec-canvas里面的文件复制到微信小程序目录里面本例子存放在根目录的lib里面 3)引入某页面的XXX.json,..._微信小程序入门echarts
文章浏览阅读2.1k次,点赞3次,收藏24次。#include <GL/glut.h>#include <stdlib.h>#include<math.h>#include <iostream>using namespace std;int SCREEN_WIDTH = 400; //屏幕尺寸int SCREEN_HEIGHT = 400;int posx1 = 150;int posy1 = 200;int posx2 = 250;int posy2 = 200;int sel_opengl点击选择基本图元并染色
文章浏览阅读108次。特殊教育学校七年级环境教育教学计划特殊教育学校七年级环境教育教学计划李红榜◆学生情况分析:七年级共有学生10人,学生有一定的环保意识和环保知识,但不系统、不全面。极少开展综合实践活动。通过本册教材的学习,使他们掌握环保的有关知识,通过开展大量的实践活动,做环保的小主人。◆教学总目标1、学生了解一些生态环境问题的产生和发展,感知这些环境问题带来的危害,树立环保意识,转变浪费资源、破环环境的生活方式。...
文章浏览阅读774次,点赞7次,收藏2次。以上是我对点亮一个小灯程序的部分总结,这个程序我试过了可以点亮,如果想要点亮最左侧小灯就改为(sbit LED = P0^7;_keil 5小夜灯系统代码编写
文章浏览阅读547次,点赞7次,收藏11次。探索LSKY-PRO-Docker:一站式云原生开发平台项目地址:https://gitcode.com/HalcyonAzure/lsky-pro-docker在数字化转型的大潮中,云原生技术已经成为了企业和开发者的重要工具。LSKY-PRO-Docker 是一个强大且易用的一站式云原生开发平台,旨在简化和加速您的DevOps流程。在这篇文章中,我们将深入探讨该项目的技术特性、应用场景及优...
文章浏览阅读5.2k次,点赞3次,收藏10次。大行为:深度行为分析新时代的挑战和机遇_行为理解 深度学习
文章浏览阅读129次。进入Anaconda\DLLS目录,查看libssl-1_1-x64.dll的日期进入Anaconda\Library\bin目录,比较两者日期如果不一致,将DLLS中的替换bin中的再次尝试,ok_安装scikit-learn时 无法定位程序输入点
文章浏览阅读238次。∙\bullet∙Hello World的条件输出描述获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:如果输入值是0,直接输出"Hello World"..._输入10+100 1/20输出110.00 0.05
文章浏览阅读2.9k次,点赞4次,收藏43次。以前做stm32嵌入式开发均使用的是破解版的keil软件,现在工作需要无法按照此步骤进行,最近针对ST官方免费软件STM32CubeIDE进行了相关调研工作。1 STM32CubeIDE简介目前主流的STM32开发环境是ARM公司的KEIL软件, 由于KEIL对于STM32大部分型号是收费的, 使用需要破解, 存在版权问题。 并且使用KEIL编译大型工程, 编译太慢了, 编译耗时长。STM32CubeIDE是ST公司推出的免费多功能STM32开发工具,采用了行业标准的开放式许可条..._stm32cubeide免费吗
文章浏览阅读1.6k次。ng-repeathtml {{answer}} jsmodule_augular ng-repeat
文章浏览阅读1k次。Flink任务本地运行时报异常:java.lang.NoClassDefFoundError: scala/math/Ordering$$anon$9需引入依赖,如下所示:<dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-reflect</artifactId> <version>2.12.11</version>_java.lang.noclassdeffounderror: scala/math/ordering$$anon$9