0


上一世当上失败的Java工程师,这一世我卷土重来怒学spark

云上大数据作业-3.7

1.Hadoop 生态圈组件介绍

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

根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。接下来对Hadoop生态圈中出现的相关组件做一个简要介绍。

1、HDFS(分布式文件系统)

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

client:切分文件,访问HDFS时,首先与NameNode交互,获取目标文件的位置信息,然后与DataNode交互,读写数据

NameNode:master节点,每个HDFS集群只有一个,管理HDFS的名称空间和数据块映射信息,配置相关副本信息,处理客户端请求。

DataNode:slave节点,存储实际数据,并汇报状态信息给NameNode,默认一个文件会备份3份在不同的DataNode中,实现高可靠性和容错性。

Secondary NameNode:辅助NameNode,实现高可靠性,定期合并fsimage和fsedits,推送给NameNode;紧急情况下辅助和恢复NameNode,但其并非NameNode的热备份。

Hadoop 2为HDFS引入了两个重要的新功能 ——Federation和高可用(HA):

Federation允许集群中出现多个NameNode,之间相互独立且不需要互相协调,各自分工,管理自己的区域。 DataNode 被用作通用的数据块存储设备。每个 DataNode 要向集群中所有NameNode 注册,并发送心跳报告,执行所有 namenode的命令。

HDFS中的高可用性消除了Hadoop 1中存在的单点故障,其中,NameNode故障将导致集群中断。HDFS的高可用性提供故障转移功能(备用节点从失败的主NameNode接管工作的过程)以实现自动化。

2、MapReduce(分布式计算框架)

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

Jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给Tasktracker。

Tacktracker:slave节点,运行 Map task和Reduce task;并与Jobtracker交互,汇报任务状态。

Map task:解析每条数据记录,传递给用户编写的map()函数并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。

Reduce task:从Map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的Reduce()函数执行。

3、Spark(分布式计算框架)

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

Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器

Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。

Driver: 运行Application 的main()函数

Executor:执行器,是为某个Application运行在worker node上的一个进程

Spark将数据抽象为RDD(弹性分布式数据集),内部提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。

Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的

Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。

Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据,通过短时批处理实现的伪流处理。

MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。

GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作

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是真流处理。

5、Yarn/Mesos(分布式资源管理器)

YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。

Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。

6、Zookeeper(分布式协作服务)

解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

7、Sqoop(数据同步工具)

Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。

Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。

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。

9、HBase(分布式列存储数据库)

HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。

HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。

HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

10、Flume(日志收集工具)

Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。

同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。

Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM。单个Agent由Source、Sink和Channel三大组件构成

Source:从客户端收集数据,并传递给Channel。

Channel:缓存区,将Source传输的数据暂时存放。

Sink:从Channel收集数据,并写入到指定地址。

Event:日志文件、avro对象等源文件。

11、Kafka(分布式消息队列)

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。

生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。KafKa内部氛围很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming。

12、Oozie(工作流调度器)

Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。

Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。

2.重点介绍mapreduce概述

1.1 MapReduce定义

MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。
MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并行运行在一个Hadoop集群上。

1.2 MapReduce优缺点

1.2.1 优点
1)MapReduce 易于编程
它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。

2)良好的扩展性

当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。

3)高容错性

MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。

4)适合PB级以上海量数据的离线处理

可以实现上千台服务器集群并发工作,提供数据处理能力。

1.2.2 缺点

1)不擅长实时计算
MapReduce无法像MySQL一样,在毫秒或者秒级内返回结果。

2)不擅长流式计算

流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的。

3)不擅长DAG(有向无环图)计算

多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

3.重点介绍spark技术特点和概述

  1. Spark 框架概述
    Spark 是加州大学伯克利分校AMP实验室(Algorithms Machines and People Lab)开发的通用大数据框架。Spark生态圈也称为BDAS,是伯克利AMP实验室所开发的,力图在算法(Algorithms)、机器(Machines)和人(Person)三种之间通过大规模集成来展现大数据应用的一个开源平台。AMP实验室运用大数据、云计算等各种资源以及各种灵活的技术方案,对海量数据进行分析并转化为有用的信息,让人们更好地了解世界。
1.2 Spark 四大特点

Spark 使用Scala语言进行实现,它是一种面向、函数式编程语言,能够像操作本地集合一样轻松的操作分布式数据集。Spark具有运行速度快、易用性好、通用性强和随处运行等特点。

1. 速度快

由于 Apache Spark 支持内存计算,并且通过 DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比 Hadoop 的 MapReduce快 100 倍,在硬盘中要快 10 倍。

Spark处理数据与MapReduce处理数据相比,有如下两个不同点:

  • 其一、Spark处理数据时,可以将中间处理结果数据存储到内存中

  • 其二、Spark调度以DAG方式,并且每个任务Task执行以线程(Thread)方式,并不是天MapReduce以进程(Process)方式执行。

2. 易于使用

Spark 的版本已经更新到 Spark 2.4.5,支持了包括 Java、Scala、Python 、R和SQL语言在内的多种语言。

**3. 通用性强

在 Spark 的基础上,Spark 还提供了包括 Spark SQL、Spark Streaming、MLib 及 GraphX 在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。其中,Spark SQL 提供了结构化的数据处理方式,Spark Streaming 主要针对流式处理任务(也是本书的重点),MLib 提供了很多有用的机器学习算法库,GraphX提供图形和图形并行化计算。**

4. 运行方式多样

Spark 支持多种运行方式,包括在 Hadoop 和 Mesos 上,也支持 Standalone的独立运行模式,同时也可以运行在云Kubernetes(Spark 2.3开始支持)上。

4.对比mapreduce和spark的区别

Spark和MapReduce都是可以处理海量数据,但是在处理方式和处理速度上存在着差异,总结如下:

1.spark处理数据是基于内存的,而MapReduce是基于磁盘处理数据的。

MapReduce是将中间结果保存到磁盘中,减少了内存占用,牺牲了计算性能。

Spark是将计算的中间结果保存到内存中,可以反复利用,提高了处理数据的性能。

2.Spark在处理数据时构建了DAG有向无环图,减少了shuffle和数据落地磁盘的次数

Spark 计算比 MapReduce 快的根本原因在于 DAG 计算模型。一般而言,DAG 相比MapReduce 在大多数情况下可以减少 shuffle 次数。Spark 的 DAGScheduler 相当于一个改进版的 MapReduce,如果计算不涉及与其他节点进行数据交换,Spark 可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘 IO 的操作。但是,如果计算过程中涉及数据交换,Spark 也是会把 shuffle 的数据写磁盘的!有一个误区,Spark 是基于内存的计算,所以快,这不是主要原因,要对数据做计算,必然得加载到内存,Hadoop 也是如此,只不过 Spark 支持将需要反复用到的数据给 Cache 到内存中,减少数据加载耗时,所以 Spark 跑机器学习算法比较在行(需要对数据进行反复迭代)

3.Spark是粗粒度资源申请,而MapReduce是细粒度资源申请

粗粒度申请资源指的是在提交资源时,spark会提前向资源管理器(yarn,mess)将资源申请完毕,如果申请不到资源就等待,如果申请到就运行task任务,而不需要task再去申请资源。

MapReduce是细粒度申请资源,提交任务,task自己申请资源自己运行程序,自己释放资源,虽然资源能够充分利用,但是这样任务运行的很慢。

5.结构化数据与非结构化数据是什么?

一、结构化数据

结构化数据即行数据,存储在数据库里的,可以用二维表结构来逻辑表达实现的数据。

二、非结构化数据
相对于结构化数据 而言的, 不方便用数据库二维逻辑表来表现的数据。
包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。

6.Linux简单操作命令实训练习(讲义里面的Linux相关命令)

命令

格式

含义

pwd

pwd

显示当前所在目录。

ls

ls [选项] [文件|目录]

显示指定目录中的文件或子目录信息。

cd

cd <路径>

切换当前用户所在的工作目录。

mkdir

mkdir [选项] 目录

创建目录。

rm

rm [选项] <文件>

删除文件或目录。

cp

cp [选项] <文件> <目标文件>

复制文件或目录。

mv

mv [选项] <文件> <目标文件>

移动文件或对其改名。

cat

cat [选项] [文件]

查看文件内容。

tar

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

为文件和目录创建档案。

命令

格式

含义

useradd

useradd用户名

创建新用户。

passwd

passwd用户名

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

chown

chown [选项]

将文件或目录的拥有者改为指定的用户或组。

chmod

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

修改文件或目录的访问权限。
模式为文件或目录的权限表示,有三种表示方法:

(1)数字表示

(2)字符赋值

(3)字符加减权限

su

su [-] 用户名

将当前操作员的身份切换到指定用户。

sudo

sudo命令

让普通用户执行需要特殊权限的命令。

命令

格式

含义

vi

vi [文件名]

Linux的常用文本编辑器,有三个工作模式:

(1)命令模式

启动 vi,便进入命令模式。常用的命令:

i切换到输入模式。

x 删除当前光标所在处的字符。

: 切换到末行模式。

(2)输入模式

编辑文件内容,按 Esc 键返回命令模式。

(3)末行模式

保存、查找或者替换等,需进入末行模式。常用命令:

Set nu:每一行显示行号

r 文件名:读取指定的文件。

w文件名:将编辑内容保存到指定的文件内。

q:退出vi

wq:保存文件并退出vi

q!:强制退出vi,不管是否保存文档内容。

命令

格式

含义

clear

Clear

清除屏幕。

hostname

hostname [选项]

显示和设置系统的主机名称。

hostnamectl

格式1:hostnamectl

格式2:hostnamectl set-hostname <host-name>

格式1:显示当前主机的名称和系统版本。

格式2:永久设置当前主机的名称。

ip

格式1:ip link <选项> dev <设备名>

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

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

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

systemctl

systemctl <选项> service_name

管理系统中的服务

命令

格式

含义

nmtui

nmtui

该命令调出一个设置窗口,可以设置主机名称、增加一个网卡、设置IP地址等。

reboot

reboot

重新启动计算机。

poweroff

poweroff

关闭计算机操作系统并且切断系统电源。

export

export [选项] [变量名]

将Shell变量输出为环境变量,或者将Shell函数输出为环境变量。

echo

echo [字符串]

在终端设备上输出字符串或变量提取后的值。

source

source [文件]

重新执行刚修改的初始化文件,使之立即生效。

pwd 命令

ls 命令

cd 命令

mkdir 命令

rm 命令

cp 命令

mv 命令

cat 命令

tar 命令

useradd 命令

passwd 命令

chown 命令

chmod 命令

su 命令

命令模式

clear 命令

hostname 命令

hostnamectl 命令

ip 命令

systemctl 命令

reboot 命令

poweroff 命令

export 命令

echo 命令

标签: java spark 开发语言

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

“上一世当上失败的Java工程师,这一世我卷土重来怒学spark”的评论:

还没有评论