胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号。
目录
1.HDFS
HDFS(Hadoop Distributed File System)是Hadoop分布式文件系统,它是Hadoop项目的核心子项目之一,是Hadoop的主要存储系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上,能处理和存储超大数据文件。它通过流式数据访问模式来存储超大文件,运行于商用硬件集群上。
HDFS的主要特点包括:
(1)高度容错性:数据自动保存多个副本,通过增加副本的形式,提高容错性。某一个副本丢失以后,它可以自动恢复。
(2)流式数据访问:HDFS的设计建立在“一次写入多次读写”的文件访问模型上。这意味着一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。
(3)大容量数据存储:HDFS设计的目标就是能够存储数TB甚至数百TB的数据,并且能够在单一的实例上管理数百个节点中上千亿个文件。
(4)简单的文件模型:HDFS支持传统的层次化的文件组织结构。用户或者应用程序可以创建目录,然后将文件存储在这些目录中。文件系统名字空间的目录树在任何时候都是只有一个。HDFS不支持硬链接和软链接。而且名字节点(namenode)负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被namenode记录下来。
(5)强大的跨平台兼容性:HDFS是一个应用在分布式的环境下文件存储系统。它是非常容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
HDFS的体系结构主要包括以下几个部分:
(1)NameNode:NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表,并接收用户的操作请求。
(2)DataNode:DataNode是文件系统的工作节点,负责数据的存储和读取。HDFS将文件分割成一个或多个大小相等的数据块(默认128M),并分别存储在不同的DataNode上。DataNode会定期向NameNode发送所存储的数据块列表信息。
(3)Secondary NameNode:Secondary NameNode的功能是周期性地合并编辑日志与文件系统镜像,以防止编辑日志过大。但它并不是NameNode的热备份。当NameNode发生故障时,它并不能立即替换NameNode并提供服务。
(4)Client:Client就是需要获取分布式文件系统文件的应用程序。
总的来说,HDFS是一个高度容错性、适合大数据处理的分布式文件系统,广泛应用于大数据处理、数据挖掘等领域。
2.类似于HDFS的大数据分布式文件系统还有哪些?
类似于HDFS的大数据分布式文件系统还包括以下几种:
(1)Ceph:Ceph是一个开源的、高性能的并行文件系统,被认为是基于Hadoop环境下的HDFS的接班人。由于其高性能和并行处理的特点,它在大数据存储和处理方面表现出色。
(2)Lustre:Lustre是一个安全且规模庞大的分布式文件系统,由多家公司共同研发。其存储容量通常以PB为单位,节点支持数能达到万级,非常适合处理大规模的数据集。然而,它对设备有一定的特殊要求。
(3)GPFS (IBM):IBM的GPFS是一个高性能的并行文件系统,被广泛用于需要高性能数据处理的环境,包括世界上最快的超级电脑。IBM还推出了基于Hadoop的GPFS版本,该版本在内核级别中运行,而不是在操作系统中运行,从而提供了更高的性能。
(4)MapR文件系统:MapR文件系统在业内已经具有一定知名度。它不仅比HDFS快数倍,还具有镜像、快照等高级功能,这些功能对于企业用户来说非常具有吸引力。
(5)GlusterFS:GlusterFS是一个PB级别的集群文件系统,其特点是将集群内所有服务器的存储空间汇聚到一个大的网络系统上。这种设计使得GlusterFS具有无中心、无单点故障的优点。
(6)FastDFS:FastDFS是一个开源的分布式文件系统,由淘宝的余庆先生开发。它主要对文件进行管理,包括文件存储、文件同步、文件访问等功能。FastDFS非常适合以文件为载体的在线服务,如相册网站、视频网站等。
这些分布式文件系统都具有处理大数据的能力,并且在某些方面可能优于HDFS。然而,在选择使用哪种文件系统时,需要根据具体的应用场景和需求进行权衡。
3.有哪些大数据框架底层存储使用HDFS?
在大数据领域,HDFS(Hadoop Distributed File System)作为一种高度容错性的分布式文件系统,被广泛用作多种大数据框架的底层存储。以下是一些使用HDFS作为底层存储的大数据框架:
3.1 Hadoop MapReduce
Hadoop MapReduce是Hadoop生态系统中的核心组件之一,它提供了一个编程模型用于处理和生成大数据集。MapReduce作业将输入数据划分为多个分片,并使用HDFS进行存储和检索。
3.2 Apache Spark
Apache Spark是一个快速、通用的大规模数据处理引擎,它可以使用HDFS作为数据源和数据目的地。Spark通过HDFS读取和写入数据,以支持各种数据处理和分析任务。
3.3 Apache Hive
Hive是建立在Hadoop上的数据仓库基础架构,它允许进行查询和分析存储在HDFS中的大规模数据集。Hive定义了简单的SQL查询语言,称为HiveQL,用于查询存储在HDFS中的数据。
3.4 Apache HBase
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,它使用HDFS作为其底层存储。HBase在HDFS之上提供了一个非关系型的、分布式的、可伸缩的大数据存储服务。
3.5 Apache Flink
Apache Flink是一个流处理和批处理的开源平台。Flink可以从HDFS中读取数据,进行实时数据流处理或批处理分析,并可以将结果写回到HDFS中。
这些框架都充分利用了HDFS的分布式存储能力、容错性和高吞吐量特性,以支持对大数据集的高效处理和分析。
4.Apache HBase底层的存储系统
HBase底层的存储系统主要依赖于Hadoop分布式文件系统(HDFS)作为其数据存储的基础。以下是关于HBase底层存储系统的详细解释:
(1)HDFS作为底层存储:HBase依靠HDFS来存储其数据。HDFS提供了高可靠性的底层存储支持,能够处理分布在数千台通用服务器上的PB级海量数据。HBase的数据被存储在HDFS的数据块中,每个数据块的大小由HBase的配置参数决定。
(2)表结构与数据存储:HBase的表结构由若干个列族(Column Family)组成,每个列族下可以包含多个列限定符(Column Qualifier)。数据在HBase中的存储是按照列族和列限定符进行组织的。每个列族下的数据都被存储在不同的HDFS文件中。
(3)数据访问与操作:在HBase中,可以使用Java编程语言来访问和操作数据。HBase提供了Java API,使得开发者能够方便地创建表、插入数据和查询数据。
(4)分布式与可伸缩性:HBase是一个分布式的数据库存储系统,具有高可靠性和高性能。它可以在廉价PC Server上搭建起大规模结构化存储集群,并且具有良好的可伸缩性,能够处理海量数据。
(5)与其他Hadoop生态系统的组件集成:HBase作为Hadoop生态系统的一部分,与其他组件如Hadoop MapReduce、Zookeeper、Pig和Hive等紧密集成。这些组件为HBase提供了高性能的计算能力、稳定服务和failover机制,以及高层语言支持,使得在HBase上进行数据统计处理变得非常简单。
综上所述,HBase底层的存储系统主要基于HDFS,并利用了Hadoop生态系统的其他组件来增强其功能和性能。这种设计使得HBase能够高效地处理海量数据,并提供高可靠性和高性能的数据存储服务。
5.Apache Flink底层的存储系统
Apache Flink底层的存储系统主要依赖于外部的存储解决方案,而不是内置一个特定的存储系统。Flink本身并不直接提供数据存储功能,而是专注于数据处理。然而,Flink可以与多种存储系统集成,以便读取和写入数据。以下是关于Apache Flink底层存储系统的几点说明。
5.1 外部存储系统集成
Flink可以与HDFS、Amazon S3、Google Cloud Storage等外部存储系统集成。这些存储系统用于存储Flink作业处理的原始数据、中间结果以及最终结果。
5.2 HDFS作为主要存储选项
在许多情况下,HDFS被用作Flink作业的主要存储系统。HDFS提供了高可靠性、高吞吐量的数据存储,并且与Flink等Hadoop生态系统中的其他组件紧密集成。
5.3 数据流与状态管理
Flink处理数据流时,会在内存中进行中间计算,但状态信息和检查点(checkpoints)可能会持久化到外部存储系统,以确保容错性和状态的一致性。这些状态信息可以在作业失败时用于恢复状态。
5.4 可插拔的存储接口
Flink的设计允许用户根据需要选择和配置不同的存储后端。这种灵活性使得Flink可以与各种存储解决方案集成,满足不同的性能和成本要求。
需要注意的是,虽然HDFS是Flink常用的底层存储系统之一,但Flink并不限于此。它可以根据实际需求与其他存储系统集成,以实现高效的数据处理和分析。
由于Apache Flink是一个处理框架,它主要关注数据处理逻辑,而数据存储则依赖于外部系统。因此,在选择底层存储系统时,应根据具体的应用场景、数据规模和性能要求来做出决策。
6.Apache Spark底层的存储系统
Apache Spark底层的存储系统主要涉及以下几个方面。
6.1 内存存储(MemoryStore)
(1)Spark使用内存计算来提高处理速度。在Spark的存储系统中,MemoryStore负责内存中的数据存取。它采用LRU(最近最少使用)策略来逐一清除最近、最久未使用的数据块,以优化内存使用。
(2)MemoryStore可以存储对象值和字节数组,这些数据通过MemoryEntry进行封装和管理。
6.2 磁盘存储(DiskStore)
(1)当内存不足以存储所有数据时,Spark会使用DiskStore来将数据写入磁盘。这通常发生在RDD缓存溢出或Shuffle过程中。
(2)DiskStore负责磁盘中的数据访问,确保即使在内存不足的情况下,Spark作业也能继续进行。
6.3 RDD缓存
(1)RDD(弹性分布式数据集)是Spark的基本数据结构。为了提高性能,Spark允许将RDD缓存到内存或磁盘中。
(2)通过缓存RDD,Spark可以避免重复计算,从而加速后续对相同数据的操作。
6.4 Shuffle中间文件存储
(1)在Shuffle过程中,Map阶段的输出结果会以文件的形式暂存于本地磁盘。这些中间文件为Shuffle Reduce阶段提供数据源。
(2)Reducer通过网络拉取这些中间文件用于聚合计算,如求和、计数等。
6.5 广播变量存储
广播变量用于在集群范围内分发访问频率较高的小数据。这些数据会在Executors进程范畴内保存全量数据,以便同一Executors内的所有计算任务能够共享。
6.6 外部存储系统集成
除了上述内部存储机制外,Spark还支持与多种外部存储系统集成,如HDFS、S3、关系型数据库、NoSQL数据库等。这些外部存储系统可用于存储Spark处理的原始数据、中间结果以及最终结果。
综上所述,Apache Spark底层的存储系统是一个复杂的体系,它结合了内存存储、磁盘存储以及外部存储系统,以确保高效、可靠地处理大规模数据集。
7.Apache Hive底层的存储系统
Apache Hive底层的存储系统主要依赖于HDFS(Hadoop Distributed File System)。以下是关于Apache Hive底层存储系统的详细说明。
7.1 HDFS作为主要存储
(1)Hive是基于Hadoop的数据仓库工具,它利用HDFS来存储数据。HDFS具有高容错性、高吞吐量的特点,非常适合存储大规模数据集。
(2)当Hive中的表被创建时,其数据实际上是存储在HDFS上的。用户可以通过Hive的查询语言(HQL)来访问和分析这些数据,而无需关心底层数据的存储细节。
7.2 支持多种数据存储格式
(1)Hive支持多种数据存储格式,如文本(text)、JSON、Parquet等。这些格式的数据都可以存储在HDFS上,并通过Hive进行查询和分析。
(2)其中,Parquet是一种列式存储格式,优化了分析查询性能,特别适用于大数据场景。
7.3 元数据存储
(1)Hive的元数据(如表的定义、列的信息等)通常存储在关系型数据库中,如MySQL、Derby等。这些元数据描述了数据在HDFS上的存储结构和方式。
(2)元数据存储库与Hive之间通过MetaStore服务进行交互,使得Hive能够正确地解析和查询存储在HDFS上的数据。
综上所述,Apache Hive底层的存储系统主要依赖于HDFS来存储实际的数据,并使用关系型数据库来存储元数据。这种架构使得Hive能够高效地处理和分析存储在HDFS上的大规模数据集。如果需要更多关于Apache Hive的信息,可以访问其官方网站:Apache Hive。