暂时未有相关云产品技术能力~
1、打开centos的yum文件夹cd /etc/yum.repos.d/2、用wget下载repo文件wget http://mirrors.aliyun.com/repo/Centos-7.repo如果wget命令不生效,说明还没有安装wget工具yum -y install wget回车进行安装,当前目录是/etc/yum.repos.d/,刚刚下载的Centos-7.repo也在这个目录上。3、备份系统原来的repo文件mv CentOS-Base.repo CentOS-Base.repo.bak4、替换系统原理的repo文件mv Centos-7.repo CentOS-Base.repo5、执行yum源更新命令yum clean all yum makecache yum update
一、Spark概述(1)概述Spark,是一种"One Stack to rule them all"的大数据计算框架,期望使用一个技术堆栈就完美地解决大数据领域的各种计算任务。Apache官方,对Spark的定义就是:通用的大数据快速处理引擎。Spark使用Spark RDD、Spark SQL、 Spark Streaming,MLlib,GraphX成功解决了大数据领城中,离线批处理、交互式查询、实时流计算、机器学习与图计算等最重要的任务和问题。Spark除了一站式的特点之外,另外一个最重要的特点,就是基于内存进行计算,从而让它的速度可以达到MapReduce、Hive的数倍甚至数十倍!现在已经有很多大公司正在生产环境下深度地使用Spark作为大数据的计算框架,包括eBay.Yahool、 BAT、网易、京东、华为、大众点评、优酷土豆、搜狗等等。Spark同时也获得了多个世界顶级IT厂商的支持,包括IBM、 Intel等。Spark,是一种通用的大数据计算框架,I正如传统大数据技术Hadoop的MapReduce、Hive引擎,以及Storm流式实时计算引擎等,Spark包含了大数据领城常见的各种计算框架:比如Spark Core用于离线计算,Spark SQL用于交互式查询,Spark Streaming用于实时流式计算,Spark MILlib用于机器学习,Spark GraphX用于图计算。Spark主要用于大数据的计算,而Hadoop以后主要用于大数据的存储(比如HDFS、Hive,HBase等),以及资源调度(Yarn)。Spark+Hadoop的组合,是未来大数据领域最热门的组合,也是最有前景的组合!(2)Spark整体架构(3)Spark特性(1)spark 计算速度快spark将每个任务构建成DAG进行计算,内部的计算过程通过弹性式分布式数据集RDD在内存在进行计算,相比于hadoop的mapreduce效率提升了100倍。(2)易于使用spark 提供了大量的算子,开发只需调用相关api进行实现无法关注底层的实现原理。通用的大数据解决方案相较于以前离线任务采用mapreduce实现,实时任务采用storm实现,目前这些都可以通过spark来实现,降低来开发的成本。同时spark 通过spark SQL降低了用户的学习使用门槛,还提供了机器学习,图计算引擎等。(3)支持多种的资源管理模式学习使用中可以采用local 模型进行任务的调试,在正式环境中又提供了standalone,yarn等模式,方便用户选择合适的资源管理模式进行适配。(4)社区支持spark 生态圈丰富,迭代更新快,成为大数据领域必备的计算引擎。(4)Spark与MRMapReduce能够完成的各种离线批处理功能,以及常见算法(比如二次排序、topn等),基于Spark RDD的核心编程,都可以实现,并且可以更好地、更容易地实现。而且基于Spark RDD编写的离线批处理程序,运行速度是MapReduce的数倍,速度上有非常明显的优势。Spark相较于MapReduce速度快的最主要原因就在于,MapReduce的计算模型太死板,必须是map-reduce模式,有时候即使完成一些诸如过滤之类的操作,也必须经过map-reduce过程,这样就必须经过shuffle过程。而MapReduce的shuffle过程是最消耗性能的,因为shuffle中间的过程必须基于磁盘来读写。而Spark的shuffle虽然也要基于磁盘,但是其大量transformation操作,比如单纯的map或者filter等操作,可以直接基于内存进行pipeline操作,速度性能自然大大提升。但是Spark也有其劣势。由于Spark基于内存进行计算,虽然开发容易,但是真正面对大数据的时候(比如一次操作针对10亿以上级别),在没有进行调优的情况下,可能会出现各种各样的问题,比如OOM内存溢出等等。导致Spark程序可能都无法完全运行起来,就报错挂掉了,而MapReduce即使是运行缓慢,但是至少可以慢慢运行完。此外,Spark由于是新崛起的技术新秀,因此在大数据领域的完善程度,肯定不如MapReduce,比如基于HBase、Hive作为离线批处理程序的输入输出,Spark就远没有MapReduce来的完善。实现起来非常麻烦。(5)Spark Streaming与StormSpark Streaming 与Storm都可以用于进行实时流计算。但是他们两者的区别是非常大的。其中区别之一,就是,SparkStreaming 和Storm的计算模型完全不一样,Spark Streaming是基于RDD的,因此需要将一小段时间内的,比如1秒内的数据,收集起来,作为一个RDD,然后再针对这个batch的数据进行处理。而Storm却可以做到每来一条数据,都可以立即进行处理和计算。因此,Spark Streaming实际上严格意义上来说,只能称作准实时的流计算框架;西Storm是真正意义上的实时计算框架此外,Storm支持的一项高级特性,是Spark Streaming暂时不具备的,即Storm支持在分布式流式计算程序(Topolopy)在运行过程中,可以动态地调整并行度,从而动态提高并发处理能力。而Spark Streaming是无法动态调整并行度的。但是Spark Streaming也有其优点,首先Spark Streaming由于是基于batch进行处理的,因此相较于Storm基于单条数据进行处理,具有数倍甚至数十倍的吞吐量。此外,Spark Streaming由于也身处于Spark生态圈内,因此Spark Streaming可以与Spark Core、 Spark SQL,甚至是Spark Mllib.Spark GraphX进行无缝整合。流式处理完的数据,可以立即进行各种map、reduce转换操作,可以立即使用sql进行查询,甚至可以立即使用machine learning或者图计算算法进行处理。这种一站式的大数据处理功能和优势,是Storm无法匹敌的。因此,综合上述来看,通常在对实时性要求特别高,而且实时数据量不稳定,比如在白天有高峰期的情况下,可以选择使用Storm。但是如果是对实时性要求一般,允许1秒的准实时处理,而且不要求动态调整并行度的话,选择Spark Streaming是更好的选择。(6)Spark SQL与HiveSpark SQL实际上并不能完全替代Hive,因为Hive是一种基于HDFS的数据仓库,并且提供了基于SQL模型的,针对存储了大数据的数据仓库,进行分布式交互查询的查询引擎。严格的来说, Spark SQL能够替代的,是ive的查询引擎,而不是Hive本身,实际上即使在生产环境下, SparkSQL也是针对Hive数据仓库中的数据进行查询, Spark本身自己是不提供存储的,自然也不可能替代Hive作为数据仓库的这个功能。Spark SQL的一个优点,相较于Hive查询引擎来说,就是速度快,同样的SQL语句,可能使用Hive的查询引擎,由于其底层基于 MapReduce,必须经过 shuffle过程走磁盘,因此速度是非常缓慢的。很多复杂的SQL语句,在hive中执行都需要一个小时以上的时间。而 Spark SQLSpark由于其底层基于自身的基于内存的特点,因此速度达到了Hive查询引擎的数倍以上。而 Spark SQL相较于Hive的另外一个优点,就是支持大量不同的数据源,包括ive、json、 parquet、jdbc等等此外, Spark SQLSpark由于身处技术堆栈内,也是基于RDD来工作,因此可以与 Spark的其他组件无缝整合使用,配合起来实现许多复杂的功能。比如 Spark SQL支持可以直接针对hdfs文件执行sq语句!二、Spark基本原理(1)Spark CoreSpark Core是Spark的核心,其包含如下几个部分:(1)spark 基础配置sparkContext是spark应用程序的入口,spark应用程序的提交和执行离不开sparkContext,它隐藏了网络通信,分布式部署,消息通信,存储体系,计算存储等,开发人员只需要通过sparkContext等api进行开发即可。sparkRpc 基于netty实现,分为异步和同步两种方式。事件总线主要用于sparkContext组件间的交换,它属于监听者模式,采用异步调用。度量系统主要用于系统的运行监控。(2)spark 存储系统它用于管理spark运行中依赖的数据存储方式和存储位置,spark的存储系统优先考虑在各节点以内存的方式存储数据,内存不足时将数据写入磁盘中,这也是spark计算性能高的重要原因。我们可以灵活的控制数据存储在内存还是磁盘中,同时可以通过远程网络调用将结果输出到远程存储中,比如hdfs,hbase等。(3)spark 调度系统spark 调度系统主要由DAGScheduler和TaskScheduler组成。DAGScheduler 主要是把一个Job根据RDD间的依赖关系,划分为多个Stage,对于划分后的每个Stage都抽象为一个或多个Task组成的任务集,并交给TaskScheduler来进行进一步的任务调度。而TaskScheduler 负责对每个具体的Task进行调度。具体调度算法有FIFO,FAIR:FIFO调度:先进先出,这是Spark默认的调度模式。FAIR调度:支持将作业分组到池中,并为每个池设置不同的调度权重,任务可以按照权重来决定执行顺序。(2)Spark SQLspark sql提供了基于sql的数据处理方法,使得分布式的数据集处理变的更加简单,这也是spark 广泛使用的重要原因。目前大数据相关计算引擎一个重要的评价指标就是:是否支持sql,这样才会降低使用者的门槛。spark sql提供了两种抽象的数据集合DataFrame和DataSet。DataFrame 是spark Sql 对结构化数据的抽象,可以简单的理解为spark中的表,相比较于RDD多了数据的表结构信息(schema).DataFrame = Data + schemaRDD是分布式对象集合,DataFrame是分布式Row的集合,提供了比RDD更丰富的算子,同时提升了数据的执行效率。DataSet 是数据的分布式集合 ,它具有RDD强类型的优点 和Spark SQL优化后执行的优点。DataSet可以由jvm对象构建,然后使用map,filter,flatmap等操作函数操作。关于Spark SQL可以看这篇文章:https://blog.csdn.net/weixin_45366499/article/details/108749586(3)Spark Streaming这个模块主要是对流数据的处理,支持流数据的可伸缩和容错处理,可以与Flume和Kafka等已建立的数据源集成。Spark Streaming的实现,也使用RDD抽象的概念,使得在为流数据编写应用程序时更为方便。关于Spark Streaming可以看这篇文章:https://blog.csdn.net/weixin_45366499/article/details/108816335(4)Spark基本工作原理Spark基本工作原理的理解,其最主要的是要搞清楚什么是RDD以及RDD的特性。深刻理解了RDD的特性,也就理解了数据在spark中是如何被处理的(spark的基本工作原理)那么RDD是什么,官方说法:RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。最简单的理解:RDD就是源数据的抽象,或者叫映射,或者就代表。也就是说,数据要被spark进行处理,在处理之前的首要任务就是要将数据映射成RDD,对于spark来说,RDD才是我们处理数据的规则,我只认RDD,只有RDD,通过我spark的计算引擎,才能发挥巨大的威力!(1)分布式数据集RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。(2)弹性RDD的数据默认情况下存放在内存中的,但是在内存资源不足时,Spark会自动将RDD数据写入磁盘。(3)迭代式处理对节点1、2、3、4上的数据进行处理完成之后,可能会移动到其他的节点内存中继续处理!Spark 与Mr最大的不同在与迭代式计算模型:Mr分为两个阶段,map和reduce,两个阶段处理完了就结束了,所以我们在一个job中能做的处理很有限,只能在map和reduce中处理;而spark计算过程可以分为n个阶段,因为他是内存迭代式的,我们在处理完一个阶段之后,可以继续往下处理很多阶段,而不是两个阶段。所以Spark相较于MR,计算模型可以提供更强大的功能。(4)容错性RDD最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上的RDD partition,因为节点故障,导致数据丢了,那么RDD会自动通过自己的数据来源重新计算该partition。这一切对使用者是透明的。
一、Spark SQL概念它主要用于结构化数据处理和对Spark数据执行类SQL的查询。通过Spark SQL,可以针对不同格式的数据执行ETL操作(如JSON,Parquet,数据库)然后完成特定的查询操作。一般来说,Spark每支持一种新的应用开发,都会引入一个新的Context及相应的RDD,对于SQL这一特性来说,引入的就是SQLContext和SchemaRDD。注意:在Spark1.3之后,SchemaRDD已经更名为DataFrame,但它本质就类似一个RDD,因为可以将DataFrame无缝的转换成一个RDD。二、Spark SQL的特点提供标准化的SQL支持和子查询支持支持多种数据源: Hive、 RDD、Parquet、 JSON、 JDBC等。多种性能优化技术: in memory columnar storage、byte code generation、cost model动态评估等。组件扩展性:对于SQL的语法解析器、分析器以及优化器,用户都可以自已重新开发,并且动态扩展。1、内存列存储(in-memory columnar storage)内存列存储意味着,Spark SQL的数据,不是使用Java对象的方式来进行存储,而是使用面向列的内存存储的方式来进行存储。也就是说,每一列,作为一个数据存储的单位。从而大大优化了内存使用的效率。采用了内存列存储之后,减少了对内存的消耗,也就避免了gc大量数据的性能开销。2、字节码生成技术(byte code generation)Spartk SQL在其catalyst模块的expressions中增加了codegen模块,对于SQL语句中的计算表达式,比如select num +num from t这种的sql,就可以使用动态字节码生成技术来优化其性能。3、Scala代码编写的优化对于Scala代码编写中,可能会造成较大性能开销的地方,自己重写,使用更加复杂的方式,来获取更好的性能。比如Option样例类、for循 环、map/filter/foreach等高 阶函数,以及不可变对象,都改成了用null、while循 环等来实现,并且重用可变的对象。三、Spark SQL 与 Hive 的区别前面介绍了spark sql的基本概念,下面介绍一下Spark SQL 与 Hive 的区别。什么是Spark SQLSpark SQL是Spark中专门用来处理结构化数据(每一行数据都遵循Schema信息建表时表的字段及其类型)的一个模块提供了 DataFrame/Dataset 的对分布式数据处理的基本抽象其实之上是一个分布式的 SQL 引擎什么是 Hive数据仓库,能使用 SQL 读取、写入和管理存在于分布式存储架构上的大数据集结构可以映射到已经存储的数据上用户连接 Hive 可以使用命令行工具和 JDBC 驱动两者的区别都支持ThriftServer服务,为JDBC提供解决方案,区别如下:Spark SQL是Spark的一个库文件Spark SQL 元数据可有可无Spark SQL 中 schema 是自动推断的支持标准 SQL 语句,也支持 HQL 语句等从开发角度来讲,即支持SQL方式开发,也支持HQL开发,还支持函数式编程(DSL)实现SQL语句Hive是一个框架Hive中必须有元数据,一般由 MySql 管理,必须开启 metastore 服务Hive 中在建表时必须明确使用 DDL 声明 schema只支持 HQL 语句Hive:处理海量数据,比如一个月、一个季度、一年的数据量,依然可以处理,虽然很慢;Spark SQL:这种情况下 Spark SQL 不支持,无法处理;
2022年05月