`

hadoop的hdfs的设计

 
阅读更多

一、hdfs的设计,hdfs以流式数据访问模式来存储超大文件

1:hdfs的构建思路,一次写入,多次读取

2:hdfs是为高数据吞吐量应用优化的,这可能会以提高时间延迟为代价

3:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。(大量的小文件)

4:hdfs中的文件可能只有一个writer,而且写操作总是将数据添加在文件的末尾,不支持具有多个写入者的操作,也不支持在文件的任意位置修改。

 

二、hdfs的概念

磁盘块:

文件系统块:

 

hdfs上的文件也被划分为块大小的多个分块,作为独立的存储单元,但hdfs中小与一个快大小的文件不会占据整个快的空间。

hdfs的块比磁盘的块大,目的最小化寻址的开销,但不会设置过大,mapReduce中的map任务通常一次只处理一个块中的数据,因此如果任务数太少,作业的运行速度就会比较慢。

 

分布式文件系统中的块进行抽象带来的好处:

1、一个文件的大小可以大于网络中任意一个磁盘的容量。文件的所有块并不需要存储在同一个磁盘上。

2、使用抽象块而非整个文件作为存储单元,大大简化了存储子系统的设计

 

 

 

三、namenode(管理者)和datanode(工作者)

namenode:维护着文件系统树及整棵树内所有的文件和目录。也纪录每个文件中各个块所在数据节点的信息,但他并不永久保存块的位置信息,因为这些信息会在系统启动时由数据节点重建

 

datanode:是文件系统的工作节点,他们根据需要存储并检索数据块,并且向namenode发送他们所存储的块的列表

 

namenode的容错机制

1:备份

2:辅助namenode

 

联邦hdfs

namenode在内存中保存文件系统中每个文件和每个数据块的引用关系,这意味着对于一个拥有大量文件的超大集群来说,内存将成为限制系统横向扩展的瓶颈。2.x发行版本系列中引入的联邦hdfs允许系统增加namenode实现扩展。

 

四、hdfs的常用命令

    hadoop fs -mkdir /tmp/input              在HDFS上新建文件夹

    hadoop fs -put input1.txt /tmp/input  把本地文件input1.txt传到HDFS的/tmp/input目录下

    hadoop fs -get  input1.txt /tmp/input/input1.txt  把HDFS文件拉到本地

    hadoop fs -ls /tmp/output                  列出HDFS的某目录
    hadoop fs -cat /tmp/ouput/output1.txt  查看HDFS上的文件

    hadoop fs -rmr /home/less/hadoop/tmp/output  删除HDFS上的目录

    hadoop dfsadmin -report 查看HDFS状态,比如有哪些datanode,每个datanode的情况

    hadoop dfsadmin -safemode leave  离开安全模式

    hadoop dfsadmin -safemode enter  进入安全模式

 

五、hadoop的文件系统是一个抽象的概念,java提供一个抽象类FileSystem,hdfs只是其中的一个实现,实现类DistributedFileSystem 

 

六、java的提供一些接口

1、从hadoop url读取数据

2、通过filesystem api读取数据

3、写入数据

4、创建目录

5、查询文件系统

6、删除数据

 

七、数据流

1、读取

hdfs客户端-->open分布式文件系统-->namenode-->read (FSData InputStream)-->datanode

 

2、写入

hdfs客户端-->create分布式文件系统-->create namenode -->write(FSData OutputStream)-->datanode-->close 分布式文件系统-->complete namenode

 

3、通过Flume和Sqoop导入数据

Flume是一个将大规模流数据导入HDFS的工具,应用场景是从另外一个系统中收集日志数据,并实现在hdfs中的聚集操作以便用于后期的分析操作

Sqoop是为了将数据从结构化存储设备批量导入hdfs中的设计。应用场景,是将白天生产的数据库中的数据导入hive数据仓库中进行分析。

 

4、通过distcp并行复制,应用场景是在两个hdfs集群之间传输数据。

5、hadoop存档:每个文件按块方式存储,每个块的元数据存储在namenode的内存中,因为hadoop存储小文件会低效。hadoop存档文件(har文件)是一个更高效的文档存储工具,他将文件存入hdfs块,可以减少namenode的内存,允许文件进行透明访问。hadoop存档文件可以用做mapreduce的输入。

 

八、hadoop的I/O操作

hdfs的数据完整性:hdfs会对写入的所有数据计算交验和,并在读取数据时验整校验和。datanode负责在收到数据后存储该数据及其验证校验和。

hadoop的LocalFileSystem执行客户端校验和验证。localfileSystem通过checksumfilesystem来完成任务。

 

压缩格式和算法

DEFLATE,Gzip,bizp2,lzo,lz4,snappy

deflate,deflate,bizp2,lzo,lz4,snappy

 

在mapreduce中使用压缩

如果输入文件是压缩的,那么在根据文件扩展名推断出相应的codec后,mapreduce会在读取文件是自动解压缩文件

想要压缩mapreduce作业的输出,应在作业配置文件设置,还可以fileoutputformat来设置

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java 从hadoop hdfs读取文件 进行groupby并显示为条形图

    在Java编程环境中,结合Hadoop HDFS(Hadoop Distributed File System)进行大数据处理是一种常见的实践。本项目聚焦于从HDFS读取数据,执行GROUP BY操作,并将统计结果以条形图的形式展示出来,提供了直观的数据...

    java整合spring和hadoop HDFS全部jar

    Java整合Spring和Hadoop HDFS是一项常见的任务,特别是在大数据处理和分布式存储的场景下。这里,我们将深入探讨这个主题,了解如何将这三个关键技术融合在一起。 首先,Java是编写应用程序的通用编程语言,它提供...

    python 操作 Hadoop hdfs

    在大数据处理领域,Hadoop HDFS(Hadoop Distributed File System)是广泛使用的分布式文件系统,它为大规模数据处理提供了高效、可靠的数据存储解决方案。而Python作为一种灵活易用的编程语言,常常被用来与Hadoop ...

    大数据--Hadoop HDFS

    ### 大数据、Hadoop与HDFS详解 随着信息技术的快速发展和互联网的普及,数据量呈爆炸性增长态势。传统的数据处理工具和技术已无法满足如此大规模数据的存储、管理和分析需求。为此,Apache Hadoop应运而生,它提供...

    Hadoop HDFS和MapReduce架构浅析.pdf

    Hadoop HDFS和MapReduce架构浅析.pdf 更多资源请点击:https://blog.csdn.net/weixin_44155966

    hadoop hdfs 备份快照

    snapshot为hadoop2.1.0时新增加的功能。 主要为防止用户误删数据,和数据备份的作用 快照的对象为HDFS目录,前提是该目录是可以允许设置快照的(SnapShotable)

    hadoop-hdfs-2.7.3-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.7.3.jar; 赠送原API文档:hadoop-hdfs-2.7.3-javadoc.jar; 赠送源代码:hadoop-hdfs-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.7.3.pom; 包含翻译后的API文档:hadoop...

    基于Hadoop HDFS的分布式文件系统备份与恢复系统.zip

    基于Hadoop HDFS的分布式文件系统备份与恢复系统 内容概要 本项目是一个基于Hadoop HDFS的分布式文件系统备份与恢复系统。它包括备份节点(BackupNode)和数据节点(DataNode)的管理,以及与NameNode的通信。...

    《HDFS——Hadoop分布式文件系统深度实践》PDF

    《HDFS——Hadoop分布式文件系统深度实践》这本书是针对Hadoop分布式文件系统(HDFS)的详尽指南,旨在帮助读者深入理解HDFS的工作原理、设计思想以及在实际应用中的最佳实践。HDFS是Apache Hadoop项目的核心组件之...

    基于Hadoop HDFS的分布式文件系统操作工具.zip

    基于Hadoop HDFS的分布式文件系统操作工具 项目简介 本项目是一个基于Hadoop HDFS(Hadoop Distributed File System)的分布式文件系统操作工具。它提供了一系列API和工具类,用于简化与HDFS的交互,包括文件的...

    Hadoop HDFS原理分析,技术详解

    HDFS的设计理念是为了存储和管理大量的数据,具有高容错性、可扩展性和高性能的特点。 HDFS的架构主要由四个部分组成:HDFS Client、NameNode、DataNode和SecondaryNameNode。HDFS Client是客户端,负责将文件切分...

    I001-hadoophdfs-mkdirs.7z

    标题"I001-hadoophdfs-mkdirs.7z"指向的是一个关于Hadoop HDFS(Hadoop Distributed File System)操作的压缩包文件,特别是关于创建目录(mkdirs)的教程或参考资料。Hadoop是Apache软件基金会开发的一个开源框架,...

    hadoop-hdfs-fsimage-exporter:将Hadoop HDFS内容统计信息导出到Prometheus

    Prometheus Hadoop HDFS FSImage导出器 | 将Hadoop HDFS统计信息导出到包括 总数/每个用户/每个组/每个配置的目录路径/每个路径集 目录数 文件数 文件大小和大小分布(可选) 块数 文件复制(总体/每个用户摘要)...

    window客户端连接hadoop hdfs,完美解决障碍

    首先,理解Hadoop HDFS:它是Apache Hadoop项目的核心组件之一,是一个分布式文件系统,设计用于跨大量廉价硬件存储和处理大数据。它的特点是高容错性和高吞吐量,非常适合大规模数据处理应用。 要连接HDFS,你需要...

    Hadoop HDFS分布式文件系统 常用命令汇总

    Hadoop HDFS分布式文件系统常用命令汇总 Hadoop HDFS分布式文件系统是大数据存储和处理的核心组件。作为一个分布式文件系统,HDFS提供了高可靠性、高可扩展性和高性能的存储解决方案。在使用HDFS时,经常需要执行...

    hadoop-hdfs-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...

    深入理解Hadoop HDFS高级教程.txt打包整理.zip

    2. HDFS设计理念:HDFS设计的目标是为了处理大规模的数据集,它遵循“一次写入,多次读取”(WORM)的原则,确保数据的持久化和高可用性。HDFS通过将大文件分割成块并分布在不同的节点上,实现了数据的并行访问。 3...

    Hadoop hdfs.md

    Hadoop hdfs.md

    hadoop-hdfs-client-2.9.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-client-2.9.1-javadoc-...

    基于Java的Hadoop HDFS和MapReduce实践案例设计源码

    该套源码是个人学习Hadoop HDFS和MapReduce技术的实践案例集合,采用Java语言编写,包含45个文件,涵盖34个Java源文件、4个XML配置文件、3个偏好设置文件以及1个Git忽略文件等。内容涵盖HDFS的JAVA API操作,如文件...

Global site tag (gtag.js) - Google Analytics