Spark已经取代Hadoop成为最活跃的开源大数据项目,但是,在选择大数据框架时,企业不能因此就厚此薄彼
近日,著名大数据专家Bernard Marr在一篇文章中分析了Spark和 Hadoop 的异同
Hadoop和Spark均是大数据框架,都提供了一些执行常见大数据任务的工具,但确切地说,它们所执行的任务并不相同,彼此也并不排斥
虽然在特定的情况下,Spark据称要比Hadoop快100倍,但它本身没有一个分布式存储系统
而分布式存储是如今许多大数据项目的基础,它可以将 PB 级的数据集存储在几乎无限数量的普通计算机的硬盘上,并提供了良好的可扩展性,只需要随着数据集的增大增加硬盘
因此,Spark需要一个第三方的分布式存储,也正是因为这个原因,许多大数据项目都将Spark安装在Hadoop之上,这样,Spark的高级分析应用程序就可以使用存储在HDFS中的数据了
与Hadoop相比,Spark真正的优势在于速度,Spark的大部分 *** 作都是在内存中,而Hadoop的MapReduce系统会在每次 *** 作之后将所有数据写回到物理存储介质上,这是为了确保在出现问题时能够完全恢复,但Spark的d性分布式数据存储也能实现这一点
另外,在高级数据处理(如实时流处理、机器学习)方面,Spark的功能要胜过Hadoop
在Bernard看来,这一点连同其速度优势是Spark越来越受欢迎的真正原因
实时处理意味着可以在数据捕获的瞬间将其提交给分析型应用程序,并立即获得反馈
在各种各样的大数据应用程序中,这种处理的用途越来越多,比如,零售商使用的推荐引擎、制造业中的工业机械性能监控
Spark平台的速度和流数据处理能力也非常适合机器学习算法,这类算法可以自我学习和改进,直到找到问题的理想解决方案
这种技术是最先进制造系统(如预测零件何时损坏)和无人驾驶汽车的核心
Spark有自己的机器学习库MLib,而Hadoop系统则需要借助第三方机器学习库,如Apache Mahout
实际上,虽然Spark和Hadoop存在一些功能上的重叠,但它们都不是商业产品,并不存在真正的竞争关系,而通过为这类免费系统提供技术支持赢利的公司往往同时提供两种服务
例如,Cloudera 就既提供 Spark服务也提供 Hadoop服务,并会根据客户的需要提供最合适的建议
Bernard认为,虽然Spark发展迅速,但它尚处于起步阶段,安全和技术支持基础设施方还不发达,在他看来,Spark在开源社区活跃度的上升,表明企业用户正在寻找已存储数据的创新用法
Spark已经取代Hadoop成为最活跃的开源大数据项目,但是,在选择大数据框架时,企业不能因此就厚此薄彼
近日,著名大数据专家Bernard Marr在一篇文章中分析了Spark和 Hadoop 的异同
Hadoop和Spark均是大数据框架,都提供了一些执行常见大数据任务的工具,但确切地说,它们所执行的任务并不相同,彼此也并不排斥
虽然在特定的情况下,Spark据称要比Hadoop快100倍,但它本身没有一个分布式存储系统
而分布式存储是如今许多大数据项目的基础,它可以将 PB 级的数据集存储在几乎无限数量的普通计算机的硬盘上,并提供了良好的可扩展性,只需要随着数据集的增大增加硬盘
因此,Spark需要一个第三方的分布式存储,也正是因为这个原因,许多大数据项目都将Spark安装在Hadoop之上,这样,Spark的高级分析应用程序就可以使用存储在HDFS中的数据了
与Hadoop相比,Spark真正的优势在于速度,Spark的大部分 *** 作都是在内存中,而Hadoop的MapReduce系统会在每次 *** 作之后将所有数据写回到物理存储介质上,这是为了确保在出现问题时能够完全恢复,但Spark的d性分布式数据存储也能实现这一点
另外,在高级数据处理(如实时流处理、机器学习)方面,Spark的功能要胜过Hadoop
在Bernard看来,这一点连同其速度优势是Spark越来越受欢迎的真正原因
实时处理意味着可以在数据捕获的瞬间将其提交给分析型应用程序,并立即获得反馈
在各种各样的大数据应用程序中,这种处理的用途越来越多,比如,零售商使用的推荐引擎、制造业中的工业机械性能监控
Spark平台的速度和流数据处理能力也非常适合机器学习算法,这类算法可以自我学习和改进,直到找到问题的理想解决方案
这种技术是最先进制造系统(如预测零件何时损坏)和无人驾驶汽车的核心
Spark有自己的机器学习库MLib,而Hadoop系统则需要借助第三方机器学习库,如Apache Mahout
实际上,虽然Spark和Hadoop存在一些功能上的重叠,但它们都不是商业产品,并不存在真正的竞争关系,而通过为这类免费系统提供技术支持赢利的公司往往同时提供两种服务
例如,Cloudera 就既提供 Spark服务也提供 Hadoop服务,并会根据客户的需要提供最合适的建议
Bernard认为,虽然Spark发展迅速,但它尚处于起步阶段,安全和技术支持基础设施方还不发达,在他看来,Spark在开源社区活跃度的上升,表明企业用户正在寻找已存储数据的创新用法
一、关系概览
二、Job/Stage/Task关系
一个Spark程序可以被划分为一个或多个Job,划分的依据是RDD的Action算子,每遇到一个RDD的Action *** 作就生成一个新的Job。
每个spark Job在具体执行过程中因为shuffle的存在,需要将其划分为一个或多个可以并行计算的stage,划分的依据是RDD间的Dependency关系,当遇到Wide Dependency时因需要进行shuffle *** 作,这涉及到了不同Partition之间进行数据合并,故以此为界划分不同的Stage。
Stage是由Task组组成的并行计算,因此每个stage中可能存在多个Task,这些Task执行相同的程序逻辑,只是它们 *** 作的数据不同。
一般RDD的一个Partition对应一个Task,Task可以分为ResultTask和ShuffleMapTask。
补充说明:
多个Stage可以并行(S1/S2),除非Stage之间存在依赖关系(S3依赖S1+S2)。
三、RDD/Partition/Records/Task关系
通常一个RDD被划分为一个或多个Partition,Partition是Spark进行数据处理的基本单位,一般来说一个Partition对应一个Task,而一个Partition中通常包含数据集中的多条记录(Record)。
注意不同Partition中包含的记录数可能不同。Partition的数目可以在创建RDD时指定,也可以通过reparation和coalesce等算子重新进行划分。
通常在进行shuffle的时候也会重新进行分区,这是对于key-valueRDD,Spark通常根据RDD中的Partitioner来进行分区,目前Spark中实现的Partitioner有两种:HashPartitioner和RangePartitioner,当然也可以实现自定义的Partitioner,只需要继承抽象类Partitioner并实现numPartitions and getPartition(key: Any)即可。
四、运行层次图
Spark 的运行模式有 Local(也称单节点模式),Standalone(集群模式),Spark on Yarn(运行在Yarn上),Mesos以及K8s等常用模式,本文介绍前三种模式。
Spark-shell 参数
Spark-shell 是以一种交互式命令行方式将Spark应用程序跑在指定模式上,也可以通过Spark-submit提交指定运用程序,Spark-shell 底层调用的是Spark-submit,二者的使用参数一致的,通过- -help 查看参数:
sparkconf的传入有三种方式:
1通过在spark应用程序开发的时候用set()方法进行指定
2通过在spark应用程序提交的时候用过以上参数指定,一般使用此种方式,因为使用较为灵活
3通过配置spark-defaultconf,spark-envsh文件进行指定,此种方式较shell方式级别低
Local模式
Local 模式是最简单的一种Spark运行方式,它采用单节点多线程(cpu)方式运行,local模式是一种OOTB(开箱即用)的方式,只需要在spark-envsh导出JAVA_HOME,无需其他任何配置即可使用,因而常用于开发和学习
方式:/spark-shell - -master local[n] ,n代表线程数
Standalone模式
Spark on Yarn
on Yarn的俩种模式
客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和excutor,另外ApplicationMaster和executor都装在在container里运行,container默认的内存是1g,ApplicationMaster分配的内存是driver-memory,executor分配的内存是executor-memory同时,因为Driver在客户端,所以程序的运行结果可以在客户端显示,Driver以进程名为SparkSubmit的形式存在。
Cluster 模式
1由client向ResourceManager提交请求,并上传Jar到HDFS上
这期间包括四个步骤:
a)连接到RM
b)从RM ASM(applicationsManager)中获得metric,queue和resource等信息。
c)upload app jar and spark-assembly jar
d)设置运行环境和container上下文
2ResourceManager向NodeManager申请资源,创建Spark ApplicationMaster(每个SparkContext都有一个ApplicationManager)
3NodeManager启动Spark App Master,并向ResourceManager ASM注册
4Spark ApplicationMaster从HDFS中找到jar文件,启动DAGScheduler和YARN Cluster Scheduler
5ResourceManager向ResourceManager ASM注册申请container资源(INFO YarnClientImpl: Submitted application)
6ResourceManager通知NodeManager分配Container,这是可以收到来自ASM关于container的报告。(每个container的对应一个executor)
7Spark ApplicationMaster直接和container(executor)进行交互,完成这个分布式任务。
进入spark安装目录下的conf文件夹
[atguigu@hadoop102 module] mv slavestemplate slaves
[atguigu@hadoop102 conf] vim slaves
hadoop102
hadoop103
hadoop104
4)修改spark-envsh文件,添加如下配置:
[atguigu@hadoop102 conf]$ vim spark-envsh
SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077
5)分发spark包
[atguigu@hadoop102 module] sbin/start-allsh
注意:如果遇到 “JAVA_HOME not set” 异常,可以在sbin目录下的spark-configsh 文件中加入如下配置:
export JAVA_HOME=XXXX
官方求PI案例
spark-submit
--class orgapachesparkexamplesSparkPi
--master spark://server-2:7077
--executor-memory 1G
--total-executor-cores 2
/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar
100
spark-shell
--master spark://server-2:7077
--executor-memory 1g
--total-executor-cores 2
spark-shell --master spark://server-2:7077 --executor-memory 1g --total-executor-cores 2
参数:--master spark://server-2:7077 指定要连接的集群的master
Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。
安装使用
1)修改hadoop配置文件yarn-sitexml,添加如下内容:
2)修改spark-envsh,添加如下配置:
[atguigu@hadoop102 conf]$ vi spark-envsh
YARN_CONF_DIR=/opt/module/hadoop-272/etc/hadoop
3)分发配置文件
[atguigu@hadoop102 conf] xsync spark-envsh
4)执行一个程序
spark-submit
--class orgapachesparkexamplesSparkPi
--master yarn
--deploy-mode client
/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar
100
注意:在提交任务之前需启动HDFS以及YARN集群。
日志查看
修改配置文件spark-defaultsconf
添加如下内容:
sparkyarnhistoryServeraddress=server-2:18080
sparkhistoryuiport=18080
2)重启spark历史服务
[atguigu@hadoop102 spark] sbin/start-history-serversh
starting orgapachesparkdeployhistoryHistoryServer, logging to /opt/module/spark/logs/spark-atguigu-orgapachesparkdeployhistoryHistoryServer-1-hadoop102out
3)提交任务到Yarn执行
spark-submit
--class orgapachesparkexamplesSparkPi
--master yarn
--deploy-mode client
/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar
100
如何在Spark集群的work节点上启动多个Executor
部署这种模式,需要修改conf目录下的spark-envsh文件。在其中新增如下配置选项: export HADOOP_HOME= /home/hadoop/hadoop-200-cdh450 export HADOOP_CONF_DIR= $HADOOP_HOME/etc/hadoop SPARK_EXECUTOR_INSTANCES=2 SPARK_EXECUTOR_CORE
在集群模式下 ,spark 是采用的主从结构,一个中央协调节点被称为驱动器driver ,多个工作节点被成为执行器 executor 。分别对应多个Java 进程,,driver & executor 一起被称为一个spark 应用
spark 应用通过一个叫集群管理器的外部服务来启动 也就是我们熟悉的 standalong & Yarn Mesos and so on
Spark 驱动器是执行应用程序中main 方法的进程,它执行用户编写的用来创建SparkContext 创建 RDD 以及进行RDD 转换和行动 *** 作的codes
驱动器程序在spark 中的主要作用 :
把用户程序转化为任务
为执行器节点调度任务
Apache Spark是一个强大的开源处理引擎,最初由Matei Zaharia开发,是他在加州大学伯克利分校的博士论文的一部分。
Apache Spark是快速、易于使用的框架,允许你解决各种复杂的数据问题,无论是半结构化、结构化、流式,或机器学习、数据科学。网页链接
1、 Spark VSHadoop哪些异同点
Hadoop:布式批处理计算强调批处理用于数据挖掘、析
Spark:基于内存计算源集群计算系统目让数据析更加快速, Spark 种与 Hadoop 相似源集群计算环境两者间存些同处些用同处使 Spark 某些工作负载面表现更加优越换句说Spark 启用内存布数据集除能够提供交互式查询外优化迭代工作负载
Spark Scala 语言实现 Scala 用作其应用程序框架与 Hadoop 同Spark Scala 能够紧密集其 Scala 像 *** 作本集合象轻松 *** 作布式数据集
尽管创建 Spark 支持布式数据集迭代作业实际 Hadoop 补充 Hadoop 文件系统并行运行通名Mesos第三集群框架支持行Spark 由加州伯克利校 AMP 实验室 (Algorithms,Machines,and People Lab) 发用构建型、低延迟数据析应用程序
虽 Spark 与 Hadoop 相似处提供具用差异新集群计算框架首先Spark 集群计算特定类型工作负载设计即些并行 *** 作间重用工作数据集(比机器习算)工作负载优化些类型工作负载Spark 引进内存集群计算概念内存集群计算数据集缓存内存缩短访问延迟
数据处理面相信家hadoop已经耳熟能详基于GoogleMap/Reduce实现Hadoop发者提供map、reduce原语使并行批处理程序变非简单优美Spark提供数据集 *** 作类型种像Hadoop提供MapReduce两种 *** 作比map,filter, flatMap,sample, groupByKey, reduceByKey, union,join, cogroup,mapValues, sort,partionBy等种 *** 作类型些 *** 作称Transformations同提供Count,collect, reduce, lookup, save等种actions些种数据集 *** 作类型给层应用者提供便各处理节点间通信模型再像Hadoop唯Data Shuffle种模式用户命名物化控制间结区等说编程模型比Hadoop更灵
2、Spark容错性面否比其工具更优越性
Spark论文《Resilient Distributed Datasets: AFault-TolerantAbstraction for In-Memory Cluster Computing》没看容错性做倒提布式数据集计算做checkpoint两种式checkpoint dataloggingthe updates貌似Spark采用者文提虽者看似节省存储空间由于数据处理模型类似DAG *** 作程由于图某节点错由于lineage chains依赖复杂性能引起全部计算节点重新计算本低说存数据存更新志做checkpoint由用户说算吧相于都没说皮球踢给用户所我看由用户根据业务类型衡量存储数据IO磁盘空间代价重新计算代价选择代价较种策略取代给间结进行持久化或建立检查点Spark记住产某些数据集 *** 作序列节点现故障Spark根据存储信息重新构造数据集认错其节点帮助重建
3、Spark于数据处理能力效率哪些特色
Spark提供高性能数据处理能力使用户快速反馈体验更另类应用做数据挖掘Spark充利用内存进行缓存利用DAG消除必要步骤所比较合适做迭代式运算相部机器习算通迭代收敛算所适合用Spark实现我些用算并行化用Spark实现R语言便调用降低用户进行数据挖掘习本
Spark配流数据处理模型与Twitter Storm框架相比Spark采用种趣且独特办Storm基本像放入独立事务管道其事务布式处理相反Spark采用模型收集事务短间内(我假设5秒)批处理式处理事件所收集数据自RDD使用Spark应用程序用组进行处理作者声称种模式缓慢节点故障情况更加稳健且5秒间间隔通于数应用已经足够快种统流式处理与非流式处理部
总结
几看Hadoop权威指南、hbase权威指南、hive权威指南、规模布式存储系统、zoopkeeper、数据互联网规模数据挖掘与布式处理等书同补充能静完整看完本书相错
以上就是关于请简要描述一下hadoop,spark,mpi三种计算框架的特点以及分别适用于什么样的场景全部的内容,包括:请简要描述一下hadoop,spark,mpi三种计算框架的特点以及分别适用于什么样的场景、spark也是基于hadoop的吗它和hadoop是并列的还是和mapreduce是并列的、Job、Stage、Task划分过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)