重生之我是敲代码的

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的热备份。

    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作业等),其中指定了动作执行的顺序。

Oozie使用hPDL(一种XML流程定义语言)来描述这个图。

spark的生态圈

1、Spark Core
  Spark Core 是整个Spark生态系统的核心组件,是一个分布式大数据处理框架。Spark Core提供了多种资源调度管理,通过内存计算、有向无环图(DAG)等机制保证分布式计算的快速,并引入了RDD 的抽象保证数据的高容错性,其重要特性描述如下:

  Spark Core提供了多种运行模式,不仅可以使用自身运行模式处理任务,如本地模式、Standalone,而且可以使用第三方资源调度框架来处理任务,如YARN、MESOS等。相比较而言,第三方资源调度框架能够更细粒度管理资源。
Spark Core提供了有向无环图(DAG)的分布式并行计算框架,并提供内存机制来支持多次迭代计算或者数据共享,大大减少迭代计算之间读取数据的开销,这对于需要进行多次迭代的数据挖掘和分析性能有极大提升。另外在任务处理过程中移动计算而非移动数据(数据本地性),RDDPartition 可以就近读取分布式文件系统中的数据块到各个节点内存中进行计算。
在Spark 中引入了RDD的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”对它们进行重建,保证了数据的高容错性。
2、Spark SQL
Spark SQL 的前身是Shark,它发布时Hive 可以说是SQL on Hadoop 的唯一选择(Hive 负责将SQL 编译成可扩展的MapReduce 作业),鉴于Hive 的性能以及与Spark 的兼容,Shark 由此而生。 
  Shark 即Hive on Spark,本质上是通过Hive 的HQL 进行解析,把HQL 翻译成Spark 上对应的RDD 操作,然后通过Hive 的Metadata 获取数据库里的表信息,实际为HDFS 上的数据和文件,最后由Shark 获取并放到Spark 上运算。Shark 的最大特性就是速度快,能与Hive 的完全兼容,并且可以在Shell 模式下使用rdd2sql 这样的API,把HQL 得到的结果集继续在Scala环境下运算,支持用户编写简单的机器学习或简单分析处理函数,对HQL 结果进一步分析计算。 
  在2014 年7 月1 日的Spark Summit 上,Databricks 宣布终止对Shark 的开发,将重点放到Spark SQL 上。在此次会议上,Databricks 表示,Shark 更多是对Hive 的改造,替换了Hive 的物理执行引擎,使之有一个较快的处理速度。然而,不容忽视的是,Shark 继承了大量的Hive代码,因此给优化和维护带来大量的麻烦。随着性能优化和先进分析整合的进一步加深,基于MapReduce 设计的部分无疑成为了整个项目的瓶颈。因此,为了更好的发展,给用户提供一个更好的体验,Databricks 宣布终止Shark 项目,从而将更多的精力放到Spark SQL 上。 
  Spark SQL 允许开发人员直接处理RDD,同时也可查询在 Hive 上存在的外部数据。SparkSQL 的一个重要特点是能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL 命令进行外部查询,同时进行更复杂的数据分析。其特点如下:

引入了新的RDD 类型SchemaRDD,可以像传统数据库定义表一样来定义SchemaRDD。 SchemaRDD由定义了列数据类型的行对象构成。SchemaRDD 既可以从RDD 转换过 来,也可以从Parquet 文件读入,还可以使用HiveQL从Hive 中获取。
内嵌了Catalyst 查询优化框架,在把SQL 解析成逻辑执行计划之后,利用Catalyst 包里的一些类和接口,执行了一些简单的执行计划优化,最后变成RDD 的计算。
为什么Spark SQL 的性能会得到这么大的提升呢?主要是Spark SQL 在以下几点做了优化。 

字节码生成技术(Bytecode Generation):Spark 1.1.0 在Catalyst 模块的Expressions 
增加了Codegen 模块,使用动态字节码生成技术,对匹配的表达式采用特定的代码动态编译。另外对SQL 表达式都做了CG 优化。CG优化的实现主要还是依靠Scala 2.10运行时的反射机制(Runtime Reflection)。
Scala 代码优化:Spark SQL 在使用Scala编写代码的时候,尽量避免低效的、容易GC的代码;尽管增加了编写代码的难度,但对于用户来说接口统一。
内存列存储(In-Memory Columnar Storage):Spark SQL 的表数据在内存中存储不是采用原生态的JVM对象存储方式,而是采用内存列存储。
3、Spark Streaming
Spark Streaming 是一个对实时数据流进行高吞吐、高容错的流式处理系统,可以对多种数据源(如Kafka、Flume、Twitter 和ZeroMQ 等)进行类似Map、Reduce 和Join 等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘,如下图:

相比其他的处理引擎要么只专注于流处理,要么只负责批处理(仅提供需要外部实现的流处理API 接口),而Spark Streaming 最大的优势是提供的处理引擎和RDD 编程模型可以同时进行批处理与流处理。 
  对于传统流处理中一次处理一条记录的方式而言,Spark Streaming 使用的是将流数据离散化处理(Discretized Streams),通过该处理方式能够进行秒级以下的数据批处理。在SparkStreaming 处理过程中,Receiver 并行接收数据,并将数据缓存至Spark 工作节点的内存中。经过延迟优化后,Spark 引擎对短任务(几十毫秒)能够进行批处理,并且可将结果输出至其他系统中。与传统连续算子模型不同,其模型是静态分配给一个节点进行计算,而Spark 可基于数据的来源以及可用资源情况动态分配给工作节点。 

spark的特点

  运行速度快:Spark基于内存计算,相对于Hadoop性能提高了几十倍,而其主要原因正是因为Spark基于内存计算和引入DAG执行引擎。
  易用性好:Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写。(Scala是一种高效、可扩展的语言,能够用简介的代码处理较为复杂的工作。)
  通用性强:Spark生态圈中的组件:Spark Core提供内存计算框架,Spark SQL的即席查询,Spark Streaming的实时处理,MLlib的机器学习和GraphX的图处理。它们都是有AMP实验室提供,能够无缝地集成,并提供一站式解决平台。
  随处运行:Spark具有很强的适应性,能够读取HDFS,HBase,S3和Tachyon为持久层读写原生数据;能够以Mesos,YARN和自身携带的Standalone作为资源管理器调度作业来完成Spark应用程序的计算。

mapreduce的运行框架

  写好MapReduce程序打成jar包交给client端,client把jar包提交到JobTracker。JobTracker把这个作业拆分成很多份,然后分配给TaskTracker去执行。JobTracker和TaskTracker是主从关系,通过心跳机制管理。TaskTracker并不是随机分配任务的,这里有个概念叫:数据本地化。意思是:将map task分配给含有该map处理的数据块(block)的TaskTracker上,运算向数据移动。在分配reduce任务时并不考虑数据本地化。

MR和Spark的对比


针对这两款计算框架从下边几个方面进行对比

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

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

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

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

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

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

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

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

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

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

Linux操作系统简单命令实训练习

1、Linux操作系统的使用

pwd命令

ls命令

cd命令

mkdir命令

rm命令

cp命令

mv命令

cat命令

tar命令

useradd命令

passwd命令

chown命令

chmod命令

su命令

hostname命令

hostnamectl命令

ip命令

systemctl命令

export命令

echo命令

source命令

结构化数据和非结构化数据

结构化数据

结构化数据是指按照一定的规则和格式进行组织和存储的数据。它具有明确的数据类型和关系,可以通过预定义的模式或模型进行描述和解释。常见的结构化数据包括关系型数据库中的表格数据、电子表格中的数据、XML文件中的数据等。结构化数据通常可以通过查询和分析工具进行处理和分析,从中提取有用的信息和洞察。与结构化数据相对的是非结构化数据,如文本、图像、音频和视频等,它们没有明确的结构和格式,处理和分析起来更加困难。

非结构化数据


非结构化数据是指没有明确的结构和格式的数据,它不符合传统的表格、行列或关系型数据库的组织形式。非结构化数据的特点是多样性、复杂性和不规则性,常见的非结构化数据包括文本文档、电子邮件、社交媒体帖子、音频和视频文件、图像、日志文件等。

与结构化数据不同,非结构化数据没有明确的数据模型或模式,因此处理和分析非结构化数据更具挑战性。传统的关系型数据库和查询语言无法直接处理非结构化数据,需要使用特定的技术和工具进行处理,如自然语言处理、文本挖掘、图像识别、语音识别等。

非结构化数据在现实生活中广泛存在,例如社交媒体上的用户评论、新闻文章、音频和视频文件中的内容、传感器数据等。对非结构化数据的分析和挖掘可以帮助企业和组织发现隐藏的信息、洞察用户需求、进行情感分析、进行风险评估等。

冷备,热备和温备

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值