0


关于Spark和MapReduce,一篇文带你看清楚

一、Hadoop生态圈

Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。

Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈结构大致如图所示:

根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。

1.1.HDFS(分布式文件系统)
HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

1.2.MapReduce(分布式计算框架)
MapReduce是一种基于磁盘的分布式并行批处理计算模型,用于处理大数据量的计算。其中Map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,Reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。

1.3.Spark(分布式计算框架)
Spark是一种基于内存的分布式并行计算框架,不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

1.4.Flink(分布式计算框架)
Flink是一个基于内存的分布式并行处理框架,类似于Spark,但在部分设计思想有较大出入。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。

Flink VS Spark

Spark中,RDD在运行时是表现为Java Object,而Flink主要表现为logical plan。所以在Flink中使用的类Dataframe api是被作为第一优先级来优化的。但是相对来说在spark RDD中就没有了这块的优化了。
Spark中,对于批处理有RDD,对于流式有DStream,不过内部实际还是RDD抽象;在Flink中,对于批处理有DataSet,对于流式我们有DataStreams,但是是同一个公用的引擎之上两个独立的抽象,并且Spark是伪流处理,而Flink是真流处理。`

1.5.Yarn/Mesos(分布式资源管理器)
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。
Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。

1.6.Zookeeper(分布式协作服务)
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

1.7.Sqoop(数据同步工具)
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。

1.8.Hive/Impala(基于Hadoop的数据仓库)
Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。
Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与Apache Hive不同,Impala不基于MapReduce算法。 它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此执行效率高于Apache Hive。

1.9.HBase(分布式列存储数据库)
HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

1.10.Flume(日志收集工具)
Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。
同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。

1.11.Kafka(分布式消息队列)
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。
生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。KafKa内部氛围很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming。

1.12.Oozie(工作流调度器)
Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。
Oozie使用hPDL(一种XML流程定义语言)来描述这个图。

二、Spark的生态圈

2.1、Spark介绍

Spark官网:https://spark.apache.org/
定义:基于内存式计算的分布式统一化的数据分析引擎

功能:

  • 数据分析引擎工具栈
  • 实现离线数据批处理,类似于MapReduce,写代码做处理
  • 实现交互式即时数据查询:类似于Hive、Presto、Impala,使用SQL做即席查询分析
  • 实现实时数据处理:类似于Storm、Flink实现分布式的实时计算
  • 实现机器学习的开发:代替传统一些机器学习工具

2.2、场景:所有需要对数据进行分布式的查询、计算、机器学习都可以使用Spark来完成

工作中Spark目前主要的应用场景:SparkSQL做离线计算,实时计算使用Flink来实现

2.3、SparkSQL、Presto、Impala:都是基于SQL的内存式计算引擎

  • SparkSQL:性能垫底,功能最全面,使用成本最低
  • Presto:性能其次,支持多数据源接口:Hive、ES、Kafka
  • Impala:性能最高,语法兼容性很差,用于对Hive和Hbase数据查询统计
  • SparkCore:最底层核心的模块,所有上层计算底层都是SparkCore,面试中核心
  • SparkSQL:功能最强大的模块,既能做离线也能做实时,既能写SQL也能写代码,底层环视SparkCore,使用Spark的核心
  • Spark Streaming:准时计算的模块,底层也是SparkCore,使用离线来模拟实时
  • Spark MLib:机器学习的算法库,主要用于实现推荐系统等应用的算法库
  • Spark GreaphX:图计算,基于图数据结构实现一些计算
  • 开发语言:Python,SQL,Scala,Java,R
  • SQL:简单但不灵活,不能满足复杂开发任务
  • 编程语言:灵活但不简单,不适合做简单的统计分析
  • Batch/Streaming data:统一化离线计算和实时计算开发方式,支持多种开发语言
  • SQL analytics:通用的SQL分析快速构建分析报表,运行速度快于大多数数仓计算引擎
  • Data science at scale:大规模的数据科学引擎,支持PB级别的数据进行探索性数据分析,不需要使用采样
  • Machine learning:可以支持在笔记本电脑上训练机器学习算法,并使用相同的代码扩展到数千台机器的集群上。

三、MapReduce的运行框架并于spark做对比

3.1、框架图

Input→Mapper→shuffle→Reducer→Output

MapReduce 角色:
Client:作业提交发起者

JobTracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业

TaskTracker: 保持JobTracker通信,在分配的数据片段上执行MapReduce任务

TaskScheduler:任务调度器

HDFS:保存数据和配置信息

Heartbeat:心跳(指按照一定的频率在运行,类似于心脏无休止的跳动)机制

3.2、MapReduce与Spark的对比

3.2.1、通用性
Spark
一栈式,主要说的是,Spark不仅仅可以进行离线计算(SparkCore),同时还可以进行流式处理(SparkStreaming)、交互式计算(SparkShell,SparkSQL,StructStreaming,
图计算(SparkGraphx),机器学习(SparkMLLib),也就是说我们可以在一个项目中,同时可以使用上述所有的框架,这是Spark相比较于其它框架最大的优势。可以使用多中语言进行编程

MR
mapreduce主要是擅长离线的计算,不擅长实时计算

3.2.2、内存和磁盘的使用情况
Spark
Spark是基于RDD,主要使用内存进行储存计算的源数据及过程的数据,避免了写磁盘的IO操作,速度自然比较快

MR
mapreduce基于磁盘的计算,计算的过程中需要大量的溢写磁盘的操作,IO瓶颈比较明显,速度自然不好

3.2.3、API
Spark
Spark编程过程中系统提供了大量的算子,transformation和action算子,功能之强大是MR无法比拟的,编程自由度比较高

MR
MR的编程API只是提供了 map和reduce的操作,编程局限性比较大,什么操作都需要往规定好的模式上去套,死板

3.2.4、系统自由度
Spark
Spark给用户提供了诸多的参数进行设置,适应不同场景的应用,比如sort,系统并没有强制进行sort,如果需要可以进行相应参数的设置,去掉自动排序的功能之后提高效率

MR
maoreduce的shuffle的过程中相当的复杂,虽然shuffle的过程是奇迹发生的地方,但是这里边做的事太多了,很多没有法子去掉,也就是说有可能对于场景无用的操作也做了,比如排序,本身其实我们有可能不需要sort,但是基于MR的特性,它必须依靠sort,这样白白浪费了性能

3.2.5系统容错性
Spark
Spark中有个血缘关系,在计算过程中如果出现问题造成数据丢失,系统不用重新计算,只需要根据血缘关系找到最近的中间过程数据进行计算,而且基于内存的中间数据存储增加了再次使用的读取的速度

MR
MR的过程中的中间文件溢写磁盘,如计算过程中出现数据的丢失,只能重新来过.严重影响时效性

四、Linux操作系统简单命令

4.1:pwd 命令

格式:pwd

功能:显示当前所在目录(即工作目录)。

4.2:ls 命令

格式:ls [选项] [文件|目录]

功能:显示指定目录中的文件或子目录信息。当不指定文件或目录时,显示 当前工作目录中的文件或子目录信息。

命令常用选项如下:

-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来。

-l :长格式显示,包含文件和目录的详细信息。

-R :连同子目录内容一起列出来。

说明:命令“ls –l”设置了别名:ll,即输入 ll 命令,执行的是 ls –l 4 命令。

4.3:cd 命令

格式:cd

功能:用于切换当前用户所在的工作目录,其中路径可以是绝对路径也可以 是相对路径。

4.4:mkdir 命令

格式: mkdir [选项] 目录

功能:用于创建目录。创建目录前需保证当前用户对当前路径有修改的权 限。参数 -p 用于创建多级文件夹。

4.5:rm 命令

格式: rm [选项]

功能:用于删除文件或目录,常用选项-r -f,-r 表示删除目录,也可以用于 删除文件,-f 表示强制删除,不需要确认。删除文件前需保证当前用户对当 前路径有修改的权限。

4.6:cp 命令

格式: cp [选项]

功能:复制文件或目录。

4.7:mv 命令

格式:mv [选项]

功能:移动文件或对其改名。

常用选项-i -f -b,-i 表示若存在同名文件,则向用户 询问是否覆盖;-f 直接覆盖已有文件,不进行任何提示;-b 当文件存在时,覆盖 前为其创建一个备份。

4.8:cat 命令

格式:cat [选项] [文件]

功能:查看文件内容。常用选项:-n 显示行号(空行也编号)。

4.9:tar 命令

格式:tar [选项] [档案名] [文件或目录]

功能:为文件和目录创建档案。利用 tar 命令,可以把一大堆的文件和目录 全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便 于网络传输是非常有用的。该命令还可以反过来,将档案文件中的文件和目 录释放出来。

常用选项: -c 建立新的备份文件。 -C 切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于 仅压缩特定目录里的内容或解压缩到特定目录。 -x 从归档文件中提取文件。 -z 通过 gzip 指令压缩/解压缩文件,文件名为*.tar.gz。 -f 指定备份文件。 -v 显示命令执行过程。

4.10:useradd 命令

格式:useradd 用户名

功能:创建新用户,该命令只能由 root 用户使用。

4.11:passwd 命令

格式:passwd 用户名

功能:设置或修改指定用户的口令。

4.12:chown 命令

格式:chown [选项]

功能:将文件或目录的拥有者改为指定的用户或组,用户可以是用户名或者 用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件 列表支持通配符。选项“-R”表示对目前目录下的所有文件与子目录进行相同 的拥有者变更。

4.13:chmod 命令

格式:chmod [-R] 模式 文件或目录

功能:修改文件或目录的访问权限。选项“-R”表示递归设置指定目录下的所 有文件和目录的权限。 模式为文件或目录的权限表示,有三种表示方法。

(1) 数字表示 用 3 个数字表示文件或目录的权限,第 1 个数字表示所有者的权限,第 2个 数字表示与所有者同组用户的权限,第 3 个数字表示其他用户的权限。每类 用户都有 3 类权限:读、写、执行,对应的数字分别是 4、2、1。一个用户 的权限数字表示为三类权限的数字之和,如一个用户对 A 文件拥有读写权 限,则这个用户的权限数字为 6(4+2=6)。

(2)字符赋值 用字符 u 表示所有者,用字符 g 表示与所有者同组用户,用字符 o 表示其他 用户。用字符 r、w、x 分别表示读、写、执行权限。用等号“=”来给用户赋 权限。

(3)字符加减权限 用字符 u 表示所有者,用字符 g 表示与所有者同组用户,用字符 o 表示其他 用户。用字符 r、w、x 分别表示读、写、执行权限。用加号“+”来给用户加 权限,加号“-”来给用户减权限。

4.14:ip 命令

CentOS 7 已不使用 ifconfig 命令,其功能可通过 ip 命令代替。

格式 1:ip link dev

功能:对网络设备(网卡)进行操作,选项 add、delete、show、set 分别对 应增加、删除、查看和设置网络设备。

格式 2:ip address dev <设备名>

功能:对网卡的网络协议地址(IPv4/IPv6)进行操作,选项 add、change、 del、show 分别对应增加、修改、删除、查看 IP 地址。

4.15:poweroff 命令

格式:poweroff

功能:用来关闭计算机操作系统并且切断系统电源。如果确认系统中已经没 有用户存在且所有数据都已保存,需要立即关闭系统,可以使用 poweroff 命令。 注意:本操作无需在平台系统执行 [root@master ~]# poweroff

4.16:export 命令

格式:export [选项] [变量名]

功能:用于将 Shell 变量输出为环境变量,或者将 Shell 函数输出为环境变 量。一个变量创建时,它不会自动地为在它之后创建的 Shell进程所知,而 命令export 可以向后面的 Shell 传递变量的值。当一个Shell 脚本调用并执行 时,它不会自动得到父脚本(调用者)里定义的变量的访问权,除非这些变 量已经被显式地设置为可用。export 命令可以用于传递一个或多个变量的值 到任何子脚本。

常用选项: -f 代表[变量名称]中为函数名称。 -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行 环境中。 -p 列出所有的 Shell 赋予程序的环境变量。

定义环境变量,并赋值 MYENV=8

4.17:source 命令

格式:source [文件]

功能:用于重新执行刚修改的初始化文件,使之立即生效,而不必注销用 户,重新登录。

五、结构化数据和非结构化数据

什么是结构化数据?

结构化数据:指关系模型数据,即以关系数据库表形式管理的数据,结合到典型场景中更容易理解,比如企业ERP、OA、HR里的数据。

什么是非结构化数据?

非结构化数据:指数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。如word、pdf、ppt及各种格式的图片、视频等。

其实除了结构化数据和非结构化数据,还有一类是半结构化数据,那什么是半结构化数据?

什么是半结构数据?

半结构化数据:指非关系模型的、有基本固定结构模式的数据,例如日志文件、XML文档、JSON文档、E-mail等;

结构化数据类型是一种用户定义的数据类型,它包含一些非原子的元素,更确切地说,这些数据类型是可以分割的,它们既可以单独使用,又可以在适当情况下作为一个独立的单元使用。本文将向您介绍结构化数据类型的概念,并通过使用一些示例,向您展示如何建立并运用结构化类型、类型层次结构和类型化表。

**结构化数据类型 **是一种用户定义的数据类型,它包含了一系列的属性,每一个属性都有一个数据类型。属性 是专门用来帮助描述类型实例的特性。

非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本、图象、声音、影视、超媒体等信息)。

六、冷备,热备和温备

6.1、冷备/热备/温备
热备(在线备份):在数据库运行时直接备份,对数据库操作没有任何影响。
冷备(离线备份):在数据库停止时进行备份。
温备:在数据库运行时加全局读锁备份,保证了备份数据的一致性,但对性能有影响。

6.2、热备流程
备份开始时,记录重做日志的日志序号(LSN)。
复制共享表空间和独立表空间的文件。
复制完后,再次记录重做日志的日志序号(LSN)。
通过前面记录的日志序号来复制在备份时产生的重做日志。

**6.3、冷备的优点: **

只需拷贝文件,非常快速
拷贝即可,容易归档
文件拷贝回去,即可恢复到某个时间点上
能与归档方法相结合

6.4、冷备份的不足:

只能提供到数据库文件备份的时间点的恢复
在冷备过程中,数据库必须是关闭状态,不能工作
不能按表或按用户恢复

6.5、热备的优点:

可在表空间或数据文件级备份
备份时数据库可用
可达到秒级恢复到某时间点
可对几乎所有数据库实体作恢复
数据完整性与一致性好

6.6、热备份的不足:

维护较复杂
设备要求高,网络环境稳定性要求高
若热备份不成功,所得结果不可用

标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/2203_75510234/article/details/136554615
版权归原作者 時肆547 所有, 如有侵权,请联系我们删除。

“关于Spark和MapReduce,一篇文带你看清楚”的评论:

还没有评论