Hadoop介绍

.Hadoop的前世今生 2003-2005 Nutch的创始人Doug Cutting受到启发,实现了DFS和MapReduce机制 Hadoop作为Nutch的一部分被引入Apache基金会,随后又从Nutch中剥离,成为一套完整独立的软件,起名为Hadoop 2004-2009 Hadoop成为Apache顶级项目。 Hive、MapReduce、HDFS、Avro以 及Chukwa成为Hadoop的子项目。 2010-2011 Avro、HBase、Hive、Pig、ZooKeeper陆续脱离Hadoop,成为Apache顶级项目。 Hadoop1.0.0版本发布,标志着Hadoop已经初具生产规模。 2012-2013 Hadoop 2.0.0-alpha版本发布、 Impala加入Hadoop生态圈、 Hadoop2.0.0版本发布

2014-2017 

Spark成为Apache顶级项目 Hadoop3.0.0版本发布。

Hadoop的优势 扩容能力强:Hadoop是在可用的计算机计算机集群间分配数据并完成计算任务,这些集群可以方便地扩展到数以千计的节点。 成本低:Hadoop通过廉价的计算机组成服务器集群来分发及处理数据,相比使用大型机乃至超级计算机的处理系统,成本低很多。 高效率:通过并发数据,动态并行处理数据,使得处理数据非常快。 可靠性:能自动维护数据的多份复制。 高容错性

Hadoop的生态系统 广义上:随着Hadoop的不断发展,Hadoop生态体系越来越完善,现如今已经发展成一个庞大的生态体系

HDFS分布式文件系统:HDFS是Hadoop的分布式文件系统,它是Hadoop生态系统中的核心项目之一,是分布式计算中数据存储管理基础。 MapReduce分布式计算框架:是一种计算模型,用于大规模数据集(大于1TB)的并行运算 Yarn资源管理框架:是Hadoop2.0中的资源管理器,它可为上层应用提供统一的资源管理和调度。 sqoop数据迁移工具:sqoop是一款开源的数据导入导出工具,主要用于在Hadoop与传统的数据库间进行数据的转化。 Mahout数据挖掘算法库:开源项目,它提供了一些可扩展的机器的机器学习领域经典算法的实现,在帮助开发人员方便快捷地创建智能应用程序。 Hbase分布式存储系统:是HBase是Google Bigtable克隆版,它是一个针对对结构化数据的可伸缩,高可靠,高性能,分布式和面向列的动态模式数据库。 Zookeeper分布式协作服务:是一个分布式的,开放源码的分布式应用程序协调服务, 是Google的Chubby一个开源的实现,是Hadoop和HBase的重要组件。

Hive基于Hadoop的数据仓库:Hive是基于Hadoop的一个分布式数据仓库工具,可以将结构化的数据文件映射为一张数据库表,将SQL语句转换为MapReduce任务进行运行。

Flume日志收集工具:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Hadoop的运行模式 1.单机模式

单机模式是Hadoop的默认模式,安装时不需要修改配置文件。这时Hadoop运行在一 台计算机上,不需要启动 HDFS和YARN,运行时也不用Hadoop的守护进程。MapReduce相比运行处理数据时只有一个Java进程,MapO和Reduce()任务作为同一个进程的不同部分来 得处理速 执行,同时MapReduce使用本地文件系统进行数据的输入输出,而不是分布式文件系统。这种模式主要用于对MapReduce程序的逻辑进行调试,确保程序的正确。

2.伪分布式模式   

 Hadoop安装在一台计算机上,安装时需要修改相应的配置文件,用一台计算机模拟多台主机的集群。Hadoop运行时需要启动 HDFS和 YARN,NameNode、DataNode、 ResourceManager、NodeManager这些守护进程都在同一台机器上运行,是相互独立的Java进程。在这种模式下,Hadoop使用的是分布式文件系统,各个作业也是由MRAppMaster来管理的独立进程。伪分布式模式类似于完全分布式模式,因此,这种模式常用来进行学习和开发测试Hadoop程序的执行是否正确提供。

 3.完全分布式模式  

在多台计算机上安装JDK和Hadoop,组成相互连通的集群,安装时需要修改相应的配置文件。运行时,Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。

mapreduce概述

mapreduce是hadoop的计算框架,它与hdfs关系紧密。可以说它的计算思想是基于分布式文件而设计的

MR计算模型 MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。也可以说它是:“分布式计算的始祖”。

计算流程是:输入分片 —> map阶段 —> combiner阶段(可选) —> shuffle阶段 —> reduce阶段

输入分片(input split) 在进行map计算之前,mapreduce会根据输入文件计算输入分片,每个输入分片针对一个map任务。

关于 mapreduce分片算法为:        假如我们设定hdfs的块的大小是64mb,输入有三个文件,大小分别是3mb、65mb和127mb,那么mapreduce会把3mb文件分为一个输入分片,65mb则是两个输入分片而127mb也是两个输入分片.换句话说我们可以通过合并小文件做输入分片调整,那么就不会有5个map任务,而且每个map执行的数据大小不均的情况发生。 关于读取其它数据源:        例如mysql,先将mysql数据读取到hdfs上,然后通过以上分片算法分片 map阶段 map操作都是本地化操作也就是在数据存储节点上进行,负责将当前存储节点上的数据,整理成K,V格式。要程序员编写。

K,V格式:

K:存储用于关键的字段信息(类似于sql中, join的条件字段) V:其它数据信息 (类似于sql中,整行) combiner阶段 combiner阶段是程序员可选择的,combiner其实也是一种reduce操作。它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作。例如我们对文件里的单词频率做统计,map计算时候如果碰到一个hadoop的单词就会记录为1,但是这篇文章里hadoop可能会出现n多次,那么map输出文件冗余就会很多,因此在reduce计算前对相同的key做一个合并操作,那么文件会变小,这样就提高了宽带的传输效率,毕竟hadoop计算力宽带资源往往是计算的瓶颈也是最为宝贵的资源,但是combiner操作是有风险的,使用它的原则是combiner的输入不会影响到reduce计算的最终输入,例如:如果计算只是求总数,最大值,最小值可以使用combiner,但是做平均值计算使用combiner的话,最终的reduce计算结果就会出错。

combine时一个本地化的reduce操作,对相同的key做一个合并操作,提高带宽的利用率

shuffle阶段 将map的输出作为reduce的输入的过程就是shuffle了,这个是mapreduce优化的重点地方。

1.每个 Map 任务的计算结果都会写入到本地文件系统 map写入磁盘的过程十分的复杂,内存开销是很大的,map在做输出时候会在内存里开启一个环形内存缓冲区,这个缓冲区专门用来输出的,默认大小是100mb,并且在配置文件里为这个缓冲区设定了一个阀值,默认是0.80,如果缓冲区的内存达到了阀值的80%时候,这个守护线程就会把内容写到磁盘上,这个过程叫spill

2.等Map任务快要计算完成的时候,MapReduce 计算框架会启动 shuffle 过程.在 Map 任务进程调用一个 Partitioner 接口,对 Map 产生的每个 进行 Reduce 分区选择,然后通过 HTTP 通信发送给对应的 Reduce 进程。 MapReduce 框架默认的 Partitioner 用 Key 的哈希值对 Reduce任务数量取模,相同的 Key 一定会落在相同的 Reduce 任务 ID 上 3.如果reduce对顺序有要求,可以定义每个partition的边界,大的数据到一个Reduce,后序只要把各个reduce的结果相加就行。可能会导致每个partition上分配到的记录数相差很大,hadoop提供了采样器帮我们预估整个边界,以使数据的分配尽量平均。 Reduce 任务进程对收到的数据进行排序和合并,相同的 Key 放在一起,组成一个 传递给 Reduce 执行

4.如果我们定义了combiner函数,那么排序前还会执行combiner操作。1步骤中的数据结点,也会进行2,3步骤的模拟。产生结果后再继续2,3步骤。

reduce阶段

针对shuffle阶段准备好的输入开始计算。

介绍Spark技术特点和概述

Spark特点

一、速度快

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

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

Spark处理数据时,可以将中间处理结果数据存储到内存中 Spark Job调度以DAG方式,并且每个任务Task执行以线程方式,并不是像MapReduce以进程方式执行

二、易于使用

Spark的版本已经更新到了Spark3.1.2(截止日期2021.06.01),支持了包括Java、Scala、Python、R和SQL语言在内的多种语言。为了兼容Spark2.x企业级应用场景,Spark仍然持续更新Spark2版本

三、通用性强

在Spark的基础上,Spark还提供了包括Spark SQL、Spark Streaming、MLib及GraphX在内的多个工具库,我们可以在一个应用中无缝的使用这些工具库

四、运行方式

Spark支持多种运行方式,包括在Hadoop和Mesos上,也支持Standalone的独立运行模式,同时也可以运行在云Kubernets(Spark2.3开始支持)上 对于数据源而言,Spark支持从HDFS、HBase、Cassandra及Kafka等多种途径获取和数据

五、代码简洁

Spark支持使用Scala、Python等语言编写代码,Scala和Python的代码相对于Java的代码而言比较简洁

Spark概述

第一阶段:Spark最初由美国加州伯克利大学( UC Berkelcy)的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序

第二阶段:2013年Spark加入Apache孵化器项日后发展迅猛,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一( Hadoop磁盘MR离线式、Spark基于内存实时数据分析框架、Storm数据流分析框架 )

第三阶段:

对比mapreduce和spark的区别

尽管 Spark 相对于 Hadoop 而言具有较大优势,但 Spark 并不能完全替代 Hadoop,Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS,但是中间结果可以存放在内存中;调度可以使用 Spark 内置的,也可以使用更成熟的调度系统 YARN 等。

结构化数据与非结构化数据是什么

结构化数据和非结构化数据是两种常见的数据类型,它们在数据存储和处理方面有着不同的特点。

结构化数据

结构化数据是指按照预定义的模式和格式进行组织和存储的数据。它通常以表格形式存在,每个数据项都有明确定义的字段和数据类型。结构化数据可以使用关系型数据库进行存储和管理,可以通过SQL等查询语言进行检索和分析。常见的结构化数据包括用户信息、订单记录、销售数据等。

非结构化数据

非结构化数据是指没有明确格式和模式的数据,它的组织形式不规则且不易被机器直接理解和处理。非结构化数据可以是文本、图像、音频、视频等形式。由于非结构化数据的复杂性,传统的关系型数据库难以有效存储和处理非结构化数据。因此,针对非结构化数据的存储和处理,通常采用其他技术,如文本挖掘、图像识别、自然语言处理等。

Linux简单操作命令实训练习

1. 实验一:Linux 常用命令

2.实验任务二:用户操作

3.实验任务三:文本操作

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: