一、hadoop概述
hadoop起源
hadoop起源于apache nutch项目,apache nutch 项目起源于apache lucene项目,这三个项目的创始人都是doug cutting。
2003年谷歌发表关于gfs(google file system,google文件系统)分布式存储系统的论文。
2004年:doug cutting和mike cafarella基于gfs论文实现nutch的分布式文件系统ndfs。
2004年发表关于mapreduce分布式计算框架的论文。
2005年:doug cutting和mike cafarella基于mapreduce论文在nutch上实现mapreduce系统。
2006年2月:mapreduce和hdfs(ndfs重新命名为hdfs)成为lucene的一个子项目,称为hadoop,apache hadoop项目正式启动。
2008年1月:hadoop升级成为apache顶级项目。此时,hadoop发展到0.15.3版本。
hadoop 生态圈
广义上来说,hadoop是指大数据的一个生态圈,包括很多软件框架。
sqoop主要用于传统关系型数据库和hadoop之间传输数据。
flume是海量日志收集系统,提供对日志数据进行简单处理的能力,如过滤、格式转换等,能够将日志写往各种数据目标。
hdfs是hadoop体系中数据存储管理的基础,它是一个分布式文件系统,具有高容错性,提供高吞吐率的数据访问,能够有效处理海量数据集。
hbase是一个建立在hdfs之上,面向列的针对结构化和半结构化数据的动态数据库。hbase提供了对大规模数据的随机、实时读写访问, hbase中保存的数据可以使用mapreduce来处理,它将数据存储和并行计算完美地结合在一起。
kafka是一种高吞吐量的分布式消息系统,它主要用于处理活跃的流式数据。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。yarn是通用资源管理系统,为上层应用提供统一资源管理调度。
mapreduce是面向大型数据处理的并行计算模型和方法,仅适合离线数据处理。
spark提供一个通用并行计算框架用于处理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理需求。
hive是一种数据仓库技术,用于查询和管理存储在分布式环境下的大数据集,通常用于离线分析。
mahout是一个开源的数据挖掘算法库,实现了一些可扩展的机器学习领域经典算法。
storm是一个分布式的、容错的实时处理系统。可用于“流处理”之中,实时处理消息并更新数据库。storm也可用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
oozie是 hadoop 平台的一种工作流调度引擎,用于协调多个hadoop作业的执行。
azkaban是一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。
zookeeper是一个分布式数据管理和协调框架,保证分布式环境中数据的一致性,是hadoop组件的一个监管系统。
hadoop 的运行模式
单机模式
(1)hadoop的默认模式,安装时不需要修改配置文件。
(2)hadoop运行在一台计算机上,不需要启动hdfs和yarn。
(3)mapreduce运行处理数据时只有一个java进程,使用本地文件系统进行数据的输入输出。
(4)用于对mapreduce程序的逻辑进行调试,确保程序的正确。
伪分布式模式
(1)hadoop安装在一台计算机上,需要修改相应的配置文件,用一台计算机模拟多台主机的集群。
(2)需要启动hdfs和yarn,是相互独立的java进程。
(3)mapreduce运行处理数据时是每个作业一个独立进程,输入输出使用分布式文件系统。
(4)用来进行学习和开发测试hadoop程序的执行是否正确。
完全分布式模式
(1)在多台计算机上安装jdk和hadoop,组成相互连通的集群,需要修改相应的配置文件。
(2)hadoop的守护进程运行在由多台主机搭建的集群上。
真正的生产环境。
hadoop 优点
(1)扩容能力强:hadoop是在可用的计算机集群间分配数据并完成计算任务,这些集群可以方便地扩展到数以千计的节点。
(2)成本低:通过普通廉价的计算机组成服务器集群来分发以及处理数据,相比使用大型机乃至超级计算机成本低很多。
(3)高效率:通过并发数据,hadoop可以在节点之间动态并行处理数据,使得处理速度非常快。
(4)高可靠性:能自动维护数据的多份复制,并且在任务失败后能自动地重新部署计算任务。
hadoop的核心组件——hdfs
hdfs 定义
hdfs(hadoop distributed file system),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。适合一次写入,多次读出的场景,不支持文件修改,可以过来做数据分析。
优点:
(1)容错性高:主要有多个副本
(2)适合处理大数据:数据规模 可达到 pb级别,文件量能够处理百万这个量级
(3)可构建在廉价机器上
缺点:
(1)数据访问有延时,做不到毫秒级别的
(2)大量小文件不能高效存储,namenode会占用大量内存
(3) 可追加写入,不可随机修改,不支持并发写入(不支持多线程写入)
hdfs架构图
相关组件的介绍
namenode
名称节点,hdfs的管理者。
(1)管理hdfs的名字空间,维护管理所有文件的元数据。
(2)管理datanode上的数据块,决定文件数据块存储到哪个datanode。
(3)处理客户端的读写请求。
(4)按用户确定的副本策略管理hdfs中数据的副本
datanode(数据节点)
负责存储数据。
(1)存储实际的数据块,每个hdfs数据块默认大小为128mb,存储在本地文件系统的单独文件中。
(2)处理客户端的读写请求,执行数据块的读和写。
(3)向 namenode 定期汇报数据块信息,并定时向 namenode 发送心跳信号保持联系。
fsimage和edits文件
(1)fsimage文件存储文件的元数据,hdfs运行时会将该文件加载到内存中。
(2)edits文件记录对文件的写操作(修改)。
(3)写文件操作只会对内存中的元数据进行修改,不会对fsimage文件进行修改。
secondarynamenode
用于合并元数据文件fsimage。
(1)将namenode上的fsimage和edits文件复制到本地,并将两者合并生成新的fsimage文件,再将新的fsimage文件复制回namenode。
(2)不是namenode的备份,但可以帮助恢复namenode,因为其上保存了大部分的元数据信息。
secondarynamenode,用于合并元数据文件fsimage。
(1)将namenode上的fsimage和edits文件复制到本地,并将两者合并生成新的fsimage文件,再将新的fsimage文件复制回namenode。
(2)不是namenode的备份,但可以帮助恢复namenode,因为其上保存了大部分的元数据信息。
client
就是客户端。
(1)文件切分。文件上传hdfs的时候,client将文件切分成一个一个的block,然后进行上传;
(2)与 namenode 交互,获取文件的位置信息;
(3)与 datanode 交互,读取或者写入数据;
(4) client提供一些命令来管理 hdfs,比如 nanenode 格式化;
(5) client可以通过一些命令来访问 hdfs,比如对 hdfs 增删查改操作;
hdfs - 优缺点
优点:
(1)适合处理大数据:hdfs能够处理tb级甚至pb级的数据,文件数量也可达百万以上。
(2)高容错性:自动保存数据的多个副本,当某一副本丢失,可以自动重备。
(3)低成本运行:hdfs可以运行在廉价的商用计算机上。通过多副本机制提高可靠性。
缺点:
(1)不适合处理低延时的数据访问。
(2)不适合处理大量的小文件:小文件太多会消耗namenode的内存。同时小文件的寻址时间超过读取时间,也违背了hdfs的设计目标。
(3)不支持并发写入和文件随机修改:hdfs的文件同时只能有一个用户进行写操作,也仅支持文件的数据追加。
二、mapreduce的特点及运行架构
mapreduce是一种用于处理大规模数据集的编程模型和处理框架,最初由google开发,在后来由apache hadoop项目采用,并被广泛应用于分布式计算环境中。它的主要特点和运行架构如下:
mapreduce的特点:
- 简单易用:mapreduce模型提供了简单的抽象,使得开发人员可以专注于编写处理数据的逻辑,而不必关注底层的并行和分布式处理细节。
- 分布式处理: mapreduce适用于大规模数据集的并行处理。它将输入数据分割成小块,并在多个计算节点上进行并行处理,以加速数据处理过程。
- 容错性: mapreduce具有高度的容错性,能够处理计算节点故障。当一个节点失败时,mapreduce会重新调度任务到其他节点上,确保整个作业的完成。
- 可扩展性: 可以通过简单地添加更多的计算节点来扩展mapreduce系统的处理能力,使其适应不断增长的数据规模。
- 简化编程模型: mapreduce采用了一种简单而灵活的编程模型,将数据处理任务分解为两个主要阶段:map阶段和reduce阶段,简化了大规模数据处理的复杂性。
- 自动数据分片: mapreduce会自动将输入数据切分为小的数据块,并分配给不同的计算节点进行处理,使得处理任务能够更加均衡地分布在整个集群中。
- 并行化处理:mapreduce将任务分解为独立的map和reduce阶段,并行处理输入数据集的不同部分,从而有效利用了集群中的计算资源。
- 适用于各种类型的计算任务:mapreduce模型适用于各种类型的数据处理任务,包括数据清洗、数据转换、数据分析等。
mapreduce的运行架构:
- jobtracker和tasktracker: 在hadoop中,mapreduce作业通常由一个主节点(jobtracker)和多个工作节点(tasktracker)组成。jobtracker负责作业的调度和任务分配,而tasktracker则在各个计算节点上执行具体的任务。
- map阶段: 输入数据被切分为多个数据块,然后通过一系列的map任务并行处理。每个map任务对输入数据执行用户定义的映射函数,生成一组中间键值对(intermediate key-value pairs)。
- 分区和排序: 中间键值对被分区为一组,并在每个分区内进行排序。这一过程的目的是将相同键的所有值都聚集在一起,以便更有效地进行reduce操作。
- shuffle阶段: 在shuffle阶段,map的输出被重新分配到reduce任务。这一阶段包括数据的排序、分区和传输,确保相同键的所有值被发送到相同的reduce任务。
- reduce阶段: reduce任务按照键对相应的值进行聚合和处理。用户定义的reduce函数被应用于每个键的所有值,生成最终的输出。
- 持久化和输出: reduce任务的输出被写入hdfs(hadoop分布式文件系统)或其他指定的存储系统,作为mapreduce作业的最终结果。
总体而言,mapreduce通过将大规模数据处理任务分解为独立的map和reduce阶段,并允许这些阶段在分布式环境中并行运行,实现了高效的大规模数据处理。
三、spark的特点与mapreduc的区别
spark的特点
快速:
- spark 使用内存计算,能够在内存中高效地处理数据,大大提高了计算速度。相比于传统的基于磁盘的计算框架,如 hadoop mapreduce,spark 能够将中间结果保存在内存中,避免了频繁的磁盘读写操作,因此速度更快。
- spark 还引入了基于弹性分布式数据集(rdd)的计算模型,它将数据分片存储在集群的多个节点上,并能够在节点间并行执行操作,进一步提高了处理速度。
易用:
- spark 提供了丰富的高级 api 和易于使用的编程接口,包括 scala、java、python 和 r 等语言的 api,以及 dataframe 和 dataset api。这些 api 使得开发者可以以更简洁、更直观的方式编写复杂的数据处理和分析任务,而无需深入了解底层的并行计算原理。
- spark 的交互式 shell 和可视化工具(如 spark ui)也使得开发者可以方便地调试和优化代码,提高了开发效率。
通用:
- spark 不仅支持批处理任务,还能够处理流式数据、交互式查询、机器学习和图计算等多种工作负载。无论是对实时数据处理、数据挖掘还是机器学习等应用场景,spark 都能够提供强大的支持。
- spark 还提供了丰富的库和扩展,如 spark sql、mllib、graphx 和 spark streaming 等,使得开发者可以方便地构建各种复杂的数据处理和分析应用。
随处运行:
- spark 可以在各种不同的环境中运行,包括本地机器、集群、云平台和容器化环境等。它支持多种资源管理器,如独立模式、yarn、mesos 和 kubernetes,因此可以轻松地部署和运行在各种不同的计算平台上。
- spark 还支持跨平台的部署,使得开发者可以在不同的环境中无缝切换,提高了灵活性和可扩展性。
代码简洁:
- spark 提供了简洁、优雅的编程模型和 api,使得开发者可以用更少的代码实现复杂的数据处理和分析任务。例如,使用 dataframe api 可以方便地进行数据操作和转换,而无需手动编写复杂的 map 和 reduce 函数。
- spark 还支持函数式编程范式,如 map、filter、reduce 等操作,这些函数式编程的特性使得代码更易读、更易维护,并且能够有效地利用并行计算的优势。
与mapreduced的区别
-
快速:
- spark:spark 的内存计算和高效的调度机制使其处理速度比 mapreduce 快得多。通过将数据保留在内存中进行计算,spark 避免了 mapreduce 中频繁的磁盘读写操作,从而显著提高了性能。
- mapreduce:相对而言,mapreduce 更依赖于磁盘 i/o,每个计算步骤都需要将数据写入磁盘,这会增加处理时间。
-
易用:
- spark:spark 提供了丰富的高级 api 和开发工具,如 spark sql、dataframe api 和 mllib,使得开发者能够以更简单的方式编写复杂的数据处理和机器学习任务。
- mapreduce:mapreduce 的编程模型相对较为简单,但是需要编写大量的冗长的代码来完成相同的任务,因此相对而言稍显复杂。
-
通用:
- spark:spark 不仅支持批处理任务,还支持流式处理、交互式查询、机器学习和图计算等多种工作负载,使其在各种场景下都能发挥作用。
- mapreduce:mapreduce 主要专注于批处理任务,虽然也可以通过一些扩展实现其他功能,但不如 spark 的通用性强。
-
随处运行:
- spark:spark 可以在各种环境中运行,包括独立模式、hadoop yarn、apache mesos、kubernetes 等,甚至可以在云平台上运行,如 aws、azure 和 google cloud。
- mapreduce:mapreduce 主要运行在 hadoop 生态系统中,依赖于 hadoop 的资源管理器和文件系统,相对而言不太灵活。
-
代码简洁:
- spark:spark 提供了简洁的 api 和函数式编程模型,使得开发者可以用更少的代码实现相同的功能,同时提高了代码的可读性和维护性。
- mapreduce:mapreduce 的编程模型相对底层,需要编写大量的冗长的代码,不太容易理解和维护。
四、熟练掌握linux操作命令并演示说明
五、冷备 温备 热备的介绍
"冷备"、"温备"和"热备"是备份和恢复策略中常见的术语,它们描述了在不同情况下备份数据的状态以及备份过程的准备程度。这些术语主要用于描述系统或数据的备份和恢复策略。
-
冷备(cold backup):
- 冷备是指在备份数据之前,系统或者数据服务已经停止运行的情况下进行备份。这意味着备份数据是静态的,没有正在写入或修改的数据。冷备通常需要停机时间,因为备份操作会中断系统或服务的正常运行。
- 冷备通常用于对静态数据进行备份,或者在非工作时间进行备份,以最大程度地减少对系统性能的影响。
-
温备(warm backup):
- 温备是指备份数据时,系统或数据服务仍然处于运行状态,但备份操作会暂停数据的写入。这意味着备份数据是静态的,但是系统仍然可以读取数据。在温备状态下,系统可能会受到轻微的影响,因为写入操作暂时被暂停。
- 温备通常用于对需要保持一定可用性的系统进行备份,因为它可以在备份过程中保持读取数据的能力,但是写入操作会受到一定的限制。
-
热备(hot backup):
- 热备是指备份数据时,系统或数据服务仍然处于完全运行状态,备份操作不会中断数据的写入或修改。这意味着备份数据是动态的,包含了系统正在进行的所有写入和修改操作。
- 热备是最为灵活和实时的备份方式,但同时也是最复杂和资源密集的方式,因为备份操作必须与实时的系统交互,确保备份数据的一致性和完整性。
总的来说,冷备、温备和热备是备份策略中的不同选择,其选择取决于对系统可用性、备份时间窗口以及备份数据的一致性要求等方面的考虑。
六、数据类型
大数据是一个广泛的概念,涵盖了处理和分析大规模数据集的方法和技术。在大数据领域,数据可以分为结构化数据、半结构化数据和非结构化数据等几种类型。以下是大数据中常见的数据类型:
-
结构化数据(structured data):
- 结构化数据是按照预定义的数据模型组织的数据,通常存储在关系型数据库中。
- 例子:数据库表中的行和列,如sql数据库中的表格数据。
-
半结构化数据(semi-structured data):
- 半结构化数据不遵循传统的表格形式,但包含标签或标记,使其具有一定的结构。
- 例子:xml(可扩展标记语言)和json(javascript对象表示)格式的数据。
-
非结构化数据(unstructured data):
- 非结构化数据没有明确的数据模型,不容易以表格形式表示。
- 例子:文本文档、图像、音频、视频等。
-
时序数据(time series data):
- 时序数据按照时间顺序记录的数据,常见于传感器数据、日志文件等。
- 例子:股票价格、气象数据、网络流量等。
-
地理空间数据(spatial data):
- 地理空间数据包含地理位置信息,通常用于地理信息系统(gis)和地理定位服务。
- 例子:地图数据、gps轨迹数据。
-
图数据(graph data):
- 图数据以节点和边的形式表示关系,常用于社交网络分析、推荐系统等领域。
- 例子:社交网络中的用户和连接关系。
这些数据类型在大数据领域中常常同时存在,大数据技术和工具的发展旨在有效地处理和分析这些不同类型的数据。
七、结构化数据与非结构化数据
1.什么是结构化数据和非结构化数据
结构化数据和非结构化数据是大数据中的两种主要类型,它们在数据组织和处理方式上有所不同。
结构化数据:结构化数据是按照固定模式和格式组织的数据,通常以表格形式存储在关系数据库或类似的数据存储系统中,具有明确定义的字段和数据类型。这使得结构化数据容易被查询、分析和处理。常见的结构化数据包括订单信息、客户信息、交易记录等。
例:一个电子商务网站的订单数据库就是典型的结构化数据。每个订单的信息通常包括订单号、订单日期、顾客姓名、商品名称、数量、价格等字段,这些信息被组织成表格形式,方便进行查询和分析。
非结构化数据:非结构化数据是指没有明确结构的数据,通常不适合用传统的表格或数据库形式进行存储和处理。这种类型的数据可能包括文本、图像、音频、视频等形式,不易用规则或模式进行描述和组织。非结构化数据的处理通常需要借助特定的技术和工具,如自然语言处理、图像识别等。
例:社交媒体上的用户发表的帖子、评论和图片就是典型的非结构化数据。这些数据没有固定的格式和字段,每条帖子或评论可能包含文字、图片、链接等多种内容形式,不适合直接存储在传统的关系数据库中。处理这种数据通常需要使用自然语言处理技术来分析文本内容,使用图像识别技术来识别图片中的信息
2.两者之间的区别
结构化数据和非结构化数据之间的区别主要体现在数据的组织形式、存储方式、处理方法和应用场景上。
1.组织形式:
结构化数据具有明确定义的结构,通常以表格形式存储在数据库中,每个数据项都有预定义的字段和数据类型。
非结构化数据没有明确的结构,可能以文本、图像、音频、视频等形式存在,不适合用表格形式进行存储和处理。
2.存储方式:
结构化数据通常存储在关系型数据库中,使用表格、行和列的结构来组织数据。
非结构化数据则可能存储在文件系统中,或者使用专门的非关系型数据库或数据湖进行存储。
3.处理方法:
结构化数据的处理通常采用sql等结构化查询语言,可以通过预定义
的查询语句进行数据检索、分析和处理。
非结构化数据的处理可能涉及到自然语言处理、图像识别、音频处理等复杂技术,需要根据具体的数据类型采用不同的处理方法。
4.应用场景:
结构化数据通常用于传统的业务应用和数据分析,如企业资源规划(erp)、客户关系管理(crm)等。
非结构化数据则常用于新兴的应用场景,如社交媒体分析、文本挖掘、图像识别、语音识别等领域。
总的来说,结构化数据和非结构化数据之间的区别在于数据的组织形式、存储方式、处理方法和应用场景上的不同。了解这些区别有助于选择合适的工具和技术来处理和分析不同类型的数据。
发表评论