赞
踩
Hadoop HDFS(Hadoop Distributed File System)是Apache Hadoop中的分布式文件系统。它是一个流行的分布式文件系统,适合运行在的集群上。HDFS的主要特征有:
1. 分布式:HDFS存储文件的片段称为block,每个block默认大小为128MB,一个文件会被划分成多个block存储在集群的不同节点上。
2. 容错:HDFS会自动保存文件多份副本,默认保存3份副本,这样即使某个节点失效,数据也不会丢失。
3. 高扩展性:HDFS是设计用于部署在廉价的商用服务器上,可以扩展到上百个节点,并支持高达数PB的存储容量。
4. 可靠性:HDFS通过数据复制和检验和机制,保证数据的可靠性。
5. 流式数据访问:HDFS适合一次写入,多次读出的场景,不支持文件的随机修改。
HDFS架构主要包含NameNode和DataNode两个组件:
- NameNode:HDFS集群中的主节点,管理文件系统的命名空间和客户端对文件的访问。它维护文件系统树和每个文件的block块列表。
- DataNode:HDFS集群中的从节点,存储实际的数据块。每个数据块会在DataNode上保存多个副本,默认是3个副本。
HDFS工作机制:
1. 客户端请求将文件上传到HDFS,NameNode将文件名映射到文件块,选择数据节点来存储这些块。
2. NameNode返回文件的块列表给客户端。
3. 客户端将文件块发送到数据节点来存储。
4. 客户端可以从任何数据节点读取文件块,并通过NameNode获取文件块的位置信息。
5. NameNode定期收集每个数据节点的状态报告和block报告。来维护文件系统的元数据。
总之,HDFS是一个高度容错、高扩展的分布式文件存储系统,是Hadoop生态的基石,被广泛用于大数据存储和计算。
以下情况适合使用Hadoop HDFS:
1. 大数据存储:HDFS可以存储PB级的海量数据,是大数据存储的最佳选择。它高度扩展和高容错,非常适合存储大容量的数据。
2. 流式数据处理:HDFS适合一次写入,多次读取的应用场景。它不支持文件随机修改,适合数据流式加载和处理。
3. 分布式计算:HDFS可以作为Hadoop MapReduce,Spark等分布式计算框架的数据源,适合 deeoiko进行分布式计算和分析。
4. 数据湖:HDFS可以作为企业数据湖的底层存储系统,长期存储和管理海量的原始数据。
5. 日志文件存储:HDFS可以用来存储大量的日志文件,如web日志,操作日志等。这些日志数据量通常很大,HDFS可以满足其存储需求。
6. tmp文件存储:HDFS有较高的磁盘空间利用率,可以作为临时文件系统,存储短期数据。这些短期数据在不需要时可以方便删除。
7. 异构数据存储:HDFS可以存储诸如文档,图像,视频,音频等各种格式的数据。它是一个通用的分布式文件存储系统。
8. 可靠性要求较低:对可靠性要求一般的数据存储可以选择HDFS。因为HDFS会对数据进行多副本备份,即使某节点出现问题,数据也不会丢失。
9. 流媒体和CDN:HDFS也适合作为流媒体存储和内容分发网络(CDN)的底层存储系统。
除此之外,HDFS还有以下一些限制:
1. 低延时数据访问:HDFS的延时较高,不适合低延时的数据访问。
2. 高并发写入:HDFS的写入性能较差,不适合高并发的小文件写入场景。
3. 可执行文件存储:HDFS上存储的文件不可执行,无法直接运行,只适合作数据存储。
4. 随机修改:HDFS不支持文件的随机修改和追加,只支持数据的追加。
总之,HDFS是一款高度扩展,高容错的分布式存储系统,适用于大数据场景。但也有其几点限制,需要根据具体需求进行选择。
选择使用HDFS的主要原因有:
1. 高可扩展性:HDFS具有非常高的扩展性,可以扩展到数千个节点,支持PB级别的数据存储。
2. 高容错性:HDFS具有非常高的容错性,通过数据的多副本机制,可以自动修复数据节点的故障。
3. 低成本:HDFS可以在低成本的商用服务器上构建,不需要高价的SAN或NAS存储设备。
4. 设计简单:HDFS的设计非常简单,易于部署和维护,用户和管理员都很容易上手。
5. 流式访问:HDFS适合大规模数据的流式读取,支持大吞吐量的数据访问。
6. 分布式计算基础:HDFS可以作为MapReduce,Spark等大数据分布式计算框架的基础文件系统。
7. 成熟工具:Hadoop生态系统提供了丰富的工具来操作和处理HDFS上的数据,使用很方便。
8. 开源实现:HDFS是Hadoop的开源子项目,免费使用和修改源代码。
9. 多语言接口:HDFS提供了多种语言的客户端API,如Java、C、Python等,方便应用开发。
10. 标准接口:HDFS提供POSIX兼容的标准文件系统接口,易于应用迁移。
除此之外,HDFS还有一些其他优点:
- 可管理性:HDFS提供了完善的用户权限管理、维护管理工具,易于管理和维护。
- 分布式名称空间:HDFS具有分布式的文件命名空间,文件可以跨节点存储,但对用户是透明的。
- 高吞吐:HDFS可以提供较高的吞吐量来访问数据。这适用于数据流式处理的场景。
- 数据一致性:更新HDFS上的数据,整个文件会被作为一个整体更新,保证了较强的数据一致性。
总之,HDFS是一个功能强大,设计优雅的分布式文件系统,具有高可扩展性、高容错性和低成本等优点,非常适合大数据领域的海量数据存储与处理。这也是HDFS被广泛应用于大数据平台与项目的根本原因。
学习和使用HDFS,需要对其architecture和工作机制有清晰的理解。还需要掌握其命令行工具与Java API来操作HDFS。这需要对HDFS的官方文档与指南进行深入学习与理解。
使用HDFS主要涉及以下几个方面:x
1. 文件上传和下载:使用hadoop fs -put和hadoop fs -get命令可以上传和下载HDFS文件。
2. 目录操作:使用hadoop fs -mkdir创建目录,-rmdir删除目录,-ls查看目录,-chown改变文件所有者等。
3. 文件操作:使用hadoop fs -cat查看文件,-tail显示文件尾部,-rm删除文件,-mv移动文件等。
4. 权限管理:使用hadoop fs -chmod来修改HDFS文件的权限,-chown改变文件所有者。
5. HDFS web界面:通过HDFS的web界面可以浏览文件系统,上传和下载文件,以及监控HDFS的状态。
6. Java API:可以直接使用HDFS的Java API在程序中操作HDFS,如创建文件,上传下载,删除文件等。
7. Hadoop命令:使用各种Hadoop命令可以完成更复杂的操作,如数据的备份,HDFS的报告生成等。
8. 高级特性:熟悉HDFS的高级特性,如HDFS联邦、回收站、ACLs和默认ACLs等。
9. 调优:根据应用场景调优HDFS的各个配置参数,来满足性能需求。如副本数,块大小,延迟等。
除此之外,还需要熟悉:
- HDFS架构:NAMENODE,DATANODE,SECONDARY NAMENODE等。
- HDFS工作机制:块,段,防止数据丢失机制,元数据管理等。
- 访问控制与安全:Kerberos认证,权限管理机制等。
- 常见问题诊断:可以熟练诊断DATANODE宕机,网络故障,磁盘故障等常见问题。
- 监控和报警:部署相关工具来监控HDFS的运行状态,并配置报警机制。
总之,要熟练使用HDFS,最关键的是要对其架构和工作机制有深入理解。然后需要掌握其命令行和API接口来操作HDFS。
不适合储存小文件,小文件过多会造成元数据爆炸,甚至内存OOM
不适合实时运算,适合离线运算
1. 高延迟:HDFS的设计目标是提供高吞吐量的数据访问,而不是低延迟。它更适合批处理,不适合低延迟的应用。
2. 低并发:HDFS的写一次读多次模型决定其低并发性。它不支持文件的随机写入和修改。
3. 大文件:HDFS的数据块的最小默认大小是128MB,适合大数据处理,不适合小文件存储。
4. 低空间利用率:由于数据块大小较大,如果文件大小远小于块大小,空间会被浪费。
5. 元数据单点:NameNode是一个单点,其 Metadata存储和管理容易成为性能瓶颈。
6. 联邦难度大:HDFS联邦方案相比其他文件系统较为复杂,难度较大。
7. 资源调配难:在一个大的HDFS集群中,资源的调配和管理会变得非常困难。
8. 冗余备份:为实现高可靠性,HDFS需要进行数据块的冗余备份,这会占用大量存储空间。
9. 可伸缩性差:扩展一个HDFS集群的元数据会比较困难,NameNode的内存占用会随集群规模变大快速增长。
10. 安全难度大:HDFS的安全控制和管理较为复杂,需要Kerberos, Ranger等。
11. 数据丢失风险:如果集群在达到副本数的某段时间内发生故障,可能会导致数据丢失。
对于这些缺点,HDFS不断提出各种解决方案与优化:
HDFS联邦解决单点问题;Erasure Coding减少冗余;延迟调优降低读延迟;小文件存档和SSD加速提高并发;资源管理工具解决资源调配问题;安全组件增强安全性等。
hadoop是一款开源的大数据计算平台,由common,hdfs,MR,yarn组成,具备可扩展性、容错性、高可用性、高性能(相比较于单机计算而不是spark这种),主要用于数据的分析和挖掘、机器学习、图像处理、文本处理等大数据场景。
广义上的hadoop则是指hadoop生态
可扩展性:Hadoop 可以很容易地扩展,以满足处理大量数据的需求。它可以通过添加更多的机器来增加计算和存储能力。
容错性:Hadoop 是一个分布式系统,它能够自动容错。当一个节点出现故障时,它会自动重新分配数据并在其他节点上重新执行作业,以避免数据丢失和系统停机。
高可用性:通过 Hadoop 的 HA 架构,可以使 NameNode 自动切换并保持集群的高可用性,从而提供高容错性的存储服务。
高性能:Hadoop 可以处理大量数据的运算和存储,并且其分布式架构可以提供非常高的性能和吞吐量。
开源性:Hadoop 为开源软件,它的源代码是完全开放的,任何人都可以免费使用和修改它。
支持文件系统:Hadoop 采用的是 Hadoop Distributed File System (HDFS) 文件系统,能够管理和处理超大规模数据文件。
生态圈丰富:Hadoop 生态圈包含了众多的开源工具和组件(例如 HBase、Hive、Pig、Spark 等),用于支持不同类型的数据处理、存储和分析需求。
综上所述,Hadoop 是一个性能高、容错性强、可伸缩性好、开源系统,被广泛用于大数据存储、计算、挖掘和分析等领域。
Hadoop 生态圈是由一系列的开源软件组件和工具组成的,这些组件和工具可以协同工作,构建更为复杂的大数据分析平台。以下是常见的 Hadoop 生态圈组件及其作用:
HDFS:Hadoop Distributed File System,Hadoop 分布式文件系统。它是 Hadoop 生态圈的核心组件之一,用于存储和管理超大规模数据文件。
MapReduce:Hadoop 分布式计算框架,它能够对存储在 HDFS 上的大量数据进行并行处理,以实现高可靠、高性能和高扩展性的大数据分析。
Hive:基于 Hadoop 的数据仓库软件,它提供了一种基于 SQL 的查询和管理方式,使得用户可以使用 SQL 查询大数据集。同时 Hive 还支持自定义函数(UDFs)和高级分析。
Pig:Pig 是一种高级数据流编程平台,采用了类似 SQL 的语言,能够方便地对大规模的、非结构化和半结构化数据进行分析和处理。
HBase:基于 Hadoop 的分布式列式存储系统,它能够高效地处理大量、非结构化的数据。
Sqoop:一种开源的数据传输工具,能够方便地将关系型数据库中的数据导入到 Hadoop 的 HDFS 或 HBase 中。
Flume:另一种数据传输工具,它可以方便地从各种不同的数据源(如 Twitter、Facebook、Apache Web Server 等)收集数据,并将其保存到 Hadoop 集群中。
Spark:一种快速的、通用的、基于内存的分布式计算系统。Spark 比 MapReduce 更快、更强大,支持更多的数据处理操作。
Mahout:基于 Hadoop 的机器学习库,提供了大量的机器学习算法和工具,用于构建与处理大规模的机器学习应用。
综上所述,Hadoop 生态圈中的各个组件和工具,都是为了能够更好地处理和管理大量、复杂、非结构化的数据而存在的。用户可以根据实际需求,选择适合自己的 Hadoop 生态圈组件和工具,构建适合自己业务应用的大数据分析平台。
Hadoop Common:是 Hadoop 的公共库和工具类。Common 中包含了一些工具类、文件系统等,还有用于并发、日志记录、RPC、序列化和数据访问等的工具类,为上层提供基础支撑。
Hadoop Distributed File System (HDFS):是 Hadoop 的分布式文件系统。HDFS 是一个容错性高、可靠性好的文件系统,适合存储大规模的数据集。它的核心是 NameNode 和 DataNode,数据会被分散地存储在多个 DataNode 上,而 NameNode 负责管理元数据和文件系统操作。
Hadoop MapReduce:是用于并行处理大规模数据集的编程模型。MapReduce 将作业分为映射和排序两个阶段,其中映射阶段完成对数据的初始处理和分割,排序阶段将映射阶段的数据结果合并得到最终的输出。
Hadoop YARN:是 Hadoop 的资源管理系统,负责为集群中的应用程序分配和管理资源。它的核心是 ResourceManager 和 NodeManager。ResourceManager 负责整个集群的资源管理和调度,NodeManager 则负责执行单个节点上的应用程序管理和监控。
这些组件共同协作,实现了数据存储、分布式计算和作业管理等功能。Hadoop 的优势在于可以在廉价的硬件上运行,对于海量数据的处理和存储都具有优越性能。
Hadoop是一个长期发展的开源分布式计算框架,目前已经发布了三个大版本,即 Hadoop 1.x、2.x 和 3.x,下面是它们之间的区别:
Hadoop 1.x:Hadoop 1.x 是最初版本的Hadoop,最主要的特性是架构简单,包含两个核心模块,即HDFS和MapReduce。Hadoop 1.x 中 NameNode 和 JobTracker 是单点故障,因此 Hadoop 1.x 需要为其提供高可用性保障。
Hadoop 2.x:Hadoop 2.x 主要引入了 YARN(Yet Another Resource Negotiator)资源调度器,将 Hadoop 从严格的 MapReduce 限制中解放出来,允许 Hadoop 处理更多类型的工作负载。在 Hadoop 2.x 中,NameNode 采用了HA架构,即Secondary NameNode变为了Checkpoint NameNode,同时还增加了ResourceManager、NodeManager等新组件。
Hadoop 3.x:Hadoop 3.x 当中最主要的特性是引入了集成式的存储方式,引入了Hadoop 2.x中的新组件进一步优化,如ResourceManager、NodeManager的强化、MapReduce引入新特性、Yarn容器资源的幂等性优化,以及很多性能和稳定性的提升。
因此,Hadoop 3.x 具有更高的可靠性、可伸缩性和高效性。此外,Hadoop 3.x 还支持跨云移动和数据保护等前沿的技术趋势,并提供更多的功能和新特性。但是,由于它的新特性比较多,所以对硬件,环境要求的要求也相应加大了,从而对资源配置和服务运营商提出了更高要求。
Hadoop 集群工作时启动的进程包括以下几个:
NameNode:HDFS 的主节点,负责管理文件系统的命名空间和客户端操作,如文件名、目录结构、文件权限等。同时也负责向客户端提供数据块节点的位置信息。
DataNode:HDFS 的数据节点,负责存储实际的数据块,并向 NameNode 报告块的存储状态。
ResourceManager:YARN 的主节点,负责资源的分配和调度,管理集群上所有应用程序的资源使用情况,以及分配任务给 NodeManager 运行。
NodeManager:YARN 的数据节点,负责监控并报告本地资源的使用情况,以及处理 ResourceManager 分配过来的任务。
JobTracker:MapReduce 任务的指挥官,负责将任务分配到 TaskTracker 上运行,以及监控任务的进度和执行情况。
TaskTracker:MapReduce 任务运行节点,负责实际执行 Map 和 Reduce 任务程序,并及时向 JobTracker 汇报任务的状态。
Secondary NameNode:HDFS 备用主节点,辅助 NameNode 进行元数据的快速恢复。它定期合并编辑日志和镜像文件,生成新的备份 NameNode 镜像,从而加速 NameNode 的恢复。
这些进程组成了一个完整的 Hadoop 集群,完成了数据存储、分布式计算和作业管理等工作。每个进程都有其独特的作用和重要性,在集群工作时相互协调,提供高效分布式计算能力。
在集群计算中,主要瓶颈有以下几个方面:
网络带宽:集群中节点之间通过网络进行通信,网络带宽是决定任务分配和完成的速度的重要因素。如果网络带宽较小,数据的传输速度就会变慢,从而影响计算的速度。
CPU和内存:集群计算是 CPU 密集型和内存密集型的工作负载,如果节点的 CPU 或内存资源不足,会导致节点的计算速度变慢,从而降低整个集群的计算效率。
存储带宽:集群中的节点通常需要读取或写入大量的数据,如果存储带宽不足,会导致数据传输变慢,从而影响计算的速度。
数据倾斜:在某些情况下,数据分配不均匀会产生数据倾斜问题。这种情况下,一些节点将处理更多的数据,而其他节点可能会空闲,从而使速度变慢。
系统故障:在集群计算中,节点可能会出现故障,如果节点不能及时检测并排除故障,会导致整个集群计算的停滞或失败。
因此,对于集群计算而言,需要关注这些主要瓶颈,合理设计和规划集群的结构,同时也需要对集群进行监控和管理,发现瓶颈问题并及时处理。
Hadoop集群搭建的核心配置文件一般有以下三个:
core-site.xml:该配置文件用于配置Hadoop集群的核心服务。包括Hadoop的默认文件系统(FS)和相关URI,MapReduce中使用的缓冲区的文件系统路径,等配置信息,如:
fs.defaultFS:指定Hadoop集群使用的默认文件系统路径
hadoop.tmp.dir:指定Hadoop集群的临时目录
io.file.buffer.size:指定Hadoop集群的文件读写缓冲区大小等。
hdfs-site.xml:主要用于配置Hadoop分布式文件系统HDFS服务。包括副本策略、块大小、权限控制等配置信息,如:
dfs.replication:指定数据块的副本数量
dfs.blocksize:指定数据块的大小
dfs.namenode.name.dir:指定NameNode的元数据存储路径
yarn-site.xml:该配置文件用于配置Hadoop集群的YARN服务。包括资源管理器、节点管理器、MR程序运行时等配置信息,如:
yarn.resourcemanager.hostname:指定资源管理器(Resource Manager)运行的主机名或IP地址
yarn.nodemanager.aux-services:指定每个节点管理器(Node Manager)的附加yarn进程
yarn.app.mapreduce.am.resource.mb:指定MR程序运行时的内存使用量
除了这三个核心配置文件,还有一些其他重要的XML文件,比如:
mapred-site.xml:该文件用于配置MapReduce服务
capacity-scheduler.xml:配置YARN的容量调度器
hbase-site.xml:配置HBase的相关参数
当然,Hadoop集群的配置文件还会有其他文件,但上述文件是最为核心且必须的。在Hadoop集群搭建过程中,根据实际需求和环境特征进行适当调整即可。
checkpoint是指NameNode保存其内存状态到本地磁盘上的过程。Hadoop NameNode是HDFS中的元数据管理节点,所有文件和文件夹的元数据信息都存储在它的内存中,如文件名、权限、位置等信息,因此NameNode的状态非常重要。
在HA架构下的checkpoint过程中,涉及到了两个HDFS核心文件:Edits文件和FsImage文件。
Edits文件主要用于记录文件系统中所有操作(包括新建、删除、修改文件等)的操作日志,从而实现对元数据进行持久化存储。
FsImage文件则是指文件系统的镜像文件,用于保存文件系统中所有文件和目录的元数据信息。FsImage也是NameNode的内存镜像,当NameNode启动时,会将FsImage文件中的内容加载到内存中。
在HA架构下,Edits文件和FsImage文件的生成和合并过程与单节点架构的类似,唯一不同的是,HA架构下的主备节点的状态和日志文件不一致。具体来说,HA架构下的checkpoint过程涉及到的Edits文件和FsImage文件处理方式如下:
Active节点对Edits文件和FsImage文件进行合并,生成一个新的FsImage文件;
Standby节点通过传输协议拉取新的FsImage文件和Edits文件,并将其合并为新的FsImage文件;
Active节点将新的FsImage文件和Edits文件发送给Standby节点,Standby节点将新的Edits文件应用到内存中,并且将新的FsImage文件拷贝到其本地磁盘中;
如果Active节点故障,Standby节点可以基于其本地磁盘上的FsImage文件和Edits文件进行恢复,从而作为新的Active节点提供文件系统服务。
总之,HA架构下Edits文件和FsImage文件的生成和处理方式与单节点架构的类似,唯一的区别是需要通过网络传输进行传递和合并。这保证了在Active节点发生故障时,可以快速地恢复,从而保障了整个Hadoop分布式系统的稳定运行和可靠性。
在Hadoop中,默认的块大小是128MB。Hadoop将大文件切成固定大小的块进行存储,这种方式可以将文件有效地的分割成多个部分,并且尽可能地使用集群中所有数据节点的存储资源,从而优化存储和计算资源的利用率。
设置128MB的块大小具有以下优点:
降低读写延迟:数据块尺寸过小会增加数据块的数量,增加了处理分布式数据的元数据负载,导致读写性能下降。而数据块大小过大,会导致读写较大的延迟,因为一个数据块需要在一台机器上进行读写。而128MB的块大小可以保证读写效率和延迟的平衡。
提高数据提取效率:如果每个数据块都很小,则一个Map任务处理的数据就会很多,这会增加Map任务的个数,从而增加任务调度和执行的开销,影响运行效率。而128MB的块大小可以限制Map任务的数量,并减小任务处理的数据量。
适应各种情况:128MB的块大小可以在各种不同的应用场景下进行有效地运行。如果块大小过大,可能会导致对磁盘和网络资源的浪费;而如果块大小太小,则会增加元数据的处理开销,同时也会对集群的整体执行效率产生负面影响。
因此,128MB的块大小既能够保证读写效率和延迟的平衡,又能够限制Map任务的数量,并减小任务处理的数据量,从而使得处理分布式数据更加高效和灵活。
写:
(1)客户端向NameNode发出写文件请求
(2)NameNode检查是否已存在文件、检查权限,Namenode应答可以上传。
(3)客户端请求上传第一个Block。客户端上传之前对文件进行切片,切片规则:按datanode的block块大小进行切片,hadoop2.x默认block大小为128m(例如:300m文件切分为3片:第一片128m,第二片128m,剩下44m单独为1片。)
(4)NameNode返回上传的DataNode信息,具体NameNode如何选择DataNode,选择哪些DataNode是hadoop机架感知特性和副本个数决定(默认个数为3)决定
(5)客户端拿到DataNode信息后,与DataNode1直接建立通信通道,DataNode1和DataNode2,DataNode2与DataNode3同时会建立通信通道,进行数据的副本传输。
(6)DataNode2和DataNode3完成数据通信后,依次按通信顺序,最终应答给DataNode1,DataNode1再应答client,完成数据的通信。
(7)开始上传数据。以packet为单位上传,packet默认大小为64k。
(注)上传到DataNode1中的数据先存到byteBuffer缓存中,达到block大小,再刷到block中进行物理存储。
(8)第一各切片完成传输以后,开始传输第二各切片,过程同切片一致。
(9)数据传输完成后,数据块在DataNode上以磁盘文件的形式存储。如果某个DataNode存储失败,会进行重试,数据传输结束后,DataNode向客户端发送响应信息。
(10)客户端完成整个文件的上传后,会发送一个完成上传的请求给NameNode,NameNode会更新元数据信息,并对客户端发送成功响应。此时,文件上传过程就结束了。
(11)如果上传的数据量非常大,可能会导致DataNode上的磁盘空间不足。在这种情况下,HDFS提供了数据块级别的清理策略。当一个数据块的副本数量达到了预定义的数量,例如3个,那么HDFS就会删除多余的副本,释放磁盘空间。
总体来说,HDFS的写入流程包括了客户端上传文件、分块、选择数据节点、数据传输、数据块存储等多个步骤。通过机架感知策略和副本机制,HDFS可以优化数据读写性能,提高系统的可用性。同时,重试机制和清理策略可以保证数据的可靠性和数据块副本的数量。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。