大数据开发笔记(一):HDFS介绍

  ✨大数据开发笔记推荐:

大数据开发面试知识点总结_GoAI的博客-CSDN博客_大数据开发面试​本文详细介绍大数据hadoop生态圈各部分知识,包括不限于hdfs、yarn、mapreduce、hive、sqoop、kafka、flume、spark、flink等技术,总结内容适合大数据开发者学习,希望能够和大家多多交流。https://blog.csdn.net/qq_36816848/article/details/113767367​​​​💯本系列目录:

1️⃣大数据开发笔记(一):HDFS介绍
2️⃣大数据开发笔记(二):Yarn分布式集群操作系统
3️⃣大数据开发笔记(三):Mapreduce
4️⃣大数据开发笔记(四):Hive数据仓库
➡️大数据开发笔记(四):Hive数据仓库
➡️大数据开发笔记(四):Hive数仓调优
5️⃣大数据开发笔记(五):Zookeeper
6️⃣大数据开发笔记(六):Flume基础学习
7️⃣大数据开发笔记(七):Kafka分布式流式处理
8️⃣大数据开发笔记(八):Spark综合总结及Sparksql
9️⃣大数据开发笔记(九):Flink基础
➡️大数据开发笔记(九):Flink综合学习
🔟大数据开发笔记(十):Hbase列存储数据库总结
➡️大数据开发笔记(十):Hbase实践

一、HDFS介绍

1.HDFS概念:

📝​总结:Hadoop由三部分组成:HDFS、分布式计算MapReduce和资源调度引擎Yarn。

​HDFS 是一个分布式文件系统,负责文件存储。它的文件系统和平时看到的Linux很像,有目录结构,顶层目录是/,存放着文件,以及可以对文件进行增删,修改,移动等功能,不同的是它具有分布式的特点,hdfs的文件系统可以横跨多个机器,文件可能是存储在不同机器上的,但用户在使用时会被当作是存储在一台机器上。

2.Block块介绍:

      在HDFS中有一个核心概念-block块。HDFS上的文件,是按照128M为单位,切分成一个个block的,分散的存储在集群的不同数据节点上。128M是指上限,实际可能block文件的大小不到128M。而为了保证数据的可用及容错,每一个block都可以设置副本数,默认是3,在集群搭建中,在hdfs-site.xml文件就可以设置默认副本数。每一个block的副本并不会存放在同一个服务器上面,而是分开存储在不同服务器,假如第一个block块暂时奔溃了,HDFS的主节点就会为了维持设置的block副本数,重新在其它服务器上创建一模一样的block1。

3.HDFS优缺点:

HDFS具有高可用、容错率高、可扩展的特点。

(1)HDFS的优点

高容错性

①:数据自动保存多个副本。它通过增加副本的形式,提高容错性

②:某一个副本丢失以后,它可以自动恢复

适合批处理即就近原则

①:移动计算而非非数据,数据位置暴露给计算机框架

②:本地化,数据不移动,代码(任务)移动。

适合处理大数据

①:数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据

②:文件规模:能够处理百万规模以上的文件数量,数量相当之大

可构建在廉价机器上,通过多副本机制,提高可靠性

(2)HDFS的缺点

不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。寻址时间长,适合读取大文件,低延迟与高吞吐率。

不适合小文件存储

占用NameNode大量内存,寻找时间超过读取时间

不支持并发写入,文件随机修改

①:一个文件只能有一个写,不允许多个线程同时写

②:仅支持数据append(追加),不支持文件的修改

二、HDFS整体架构介绍

📝总结:HDFS的体系架构是典型的主从架构Master/Slave,有客户端和服务端,客服端通过Namenode主节点来访问存放在各个Datanode上的文件信息,Namenode负责管理每个子节点,同时还有secondaryNamenode做备份主节点。

1.HDFS结构介绍

1)Client:就是客户端。

(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储;

(2)与NameNode交互,获取文件的位置信息;

(3)与DataNode交互,读取或者写入数据;

(4)Client提供一些命令来管理HDFS,比如启动或者关闭HDFS;

(5)Client可以通过一些命令来访问HDFS;

2)NameNode:就是Master,它是一个主管、管理者。

(1)管理HDFS的名称空间;namespace

(2)管理数据块(Block)映射信息;

(3)配置副本策略(默认);3

(4)处理客户端读写请求。

3) DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。

(1)存储实际的数据块;

(2)执行数据块的读/写操作。

4) SecondaryNameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。

(1)辅助NameNode,分担其工作量;

(2)定期合并Fsimage和Edits,并推送给NameNode;

(3)在紧急情况下,可辅助恢复NameNode。

针对上述组件形成以下工作机制:

  • ​ 在Namenode管理每个datanode过程中,有心跳机制能让namenade周期性地从集群中的每个datanode接受心跳信号和块状态报告,以便得知各集群节点是否正常运行,同时在hadoop集群刚启动时也会用到心跳机制,此时会先进入一个安全模式,等心跳确认99.9%的节点都正常后才进行正常工作,允许外界写入文件到HDFS。(此处心跳机制在下文详述)
  • ​ HDFS有一个重要特性,那就是高可用,实现高可用最关键的是消除单点故障,会用到刚才体系架构中提到的SecondaryNamenode,概括来说就是当处于active状态的Namenode节点出问题后,他们之间有zookeeperFC会通知另一个暂时处于Standby状态的SecondaryNamenode准备替换工作,zookeeperFC是用来协调监控NameNode的,通知后原来的NameNode变成Standby状态,而SecondaryNamenode进行运行工作。
  • ​ HDFS的联邦对应于HDFS的可拓展的特点,可以解决内存受限的问题,提高吞吐量和隔离不同类型的应用,但一般集群规模达到几千台的情况下才可能用到联邦(联邦,即支持多个namenode主节点,每个Namenode分管一部分的元数据目录,并共享所有datanode存储资源)。

2.HDFS的机制是指什么,它有什么作用?

​ HDFS的机制是指它的心跳机制,我们知道HDFS是典型的Master/Slave主从架构,由一个Namenode管理多个Datanode过程中HDFS会用到它的心跳机制,其工作原理如下:

  • 1.首先master启动的时候,会开一个icp server;
  • 2.接着各个slave从节点启动时,连接上master,并且每隔3秒就向master发送一个icp server的”心跳“,携带状态信息;
  • 3.然后master通过这个心跳的返回值,得知从节点的状态,并向从节点传达命令。

心跳机制的作用有三点:

(1)Namenode通过心跳机制全权管理数据,它周期性地从集群中的每个namenode接受心跳信号和块状态报告,有心跳意味着从节点工作正常,块状态报告中也会有该datanode上所有数据的列表。

(2)Datanode启动后向Namenode注册,并通过心跳上报数据块列表,3秒发送一次心跳,返回并执行Namenodede命令,如果10分钟都没有发送,代表这个Datanode出问题不可用。

(3)hadoop集群刚启动时会进入一个安全模式,这个安全模式也会用到心跳机制,只有Namenode得到99.9%datanode的反馈后安全模式才会解除。

三、HDFS文件的读写流程

 (1)HDFS读流程

  • 在获取文件名称后,运行在JVM虚拟机上的HDFS客户端,通过文件系统调用Namenode上的RPC方法(远程调用),让Namenode返回给客户端关于块的位置信息
  • 客户端获得位置信息后,就通过FSDataInputStream找到不同DataNode节点建立连接并读取数据
  • 数据源源不断的写入客户端,假设第一个block读取完成,就关闭指向该DataNode的连接,接着读下一个,以此类推。
  • 在读取数据过程中,存储在datanode的block本身有一个crc32位的校验码,当读取给客户端时会重新生成一个crc校验码,并对比前后两次校验码,相等说明读取的跟存入的是同一个文件。

(2)HDFS写流程

  • 客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block的副本。
  • 在写入数据的过程中,底层会有一个data queue队列和ack queue队列,写入数据时,block块是按一个一个字节来将数据写入到一个名为chunk的小块(chunk中包含4byte的校验值),写满chunk后再放到一个package中,后续每个package要加入到data queue队列。
  • data queue中的package会逐步被发送到对应的datanode及其副本,同时还会复制一份写到ack queue队列中。待package写入完成后会重新生成校验值,这时拿新的校验值和ack queue中的package的校验值一一比对,如果比对成功,ack queue就删除对应package,如果比对不成功那么ack就把package发送回data queue再传输写入一次。

4.HDFS存储大量的小文件会发生什么问题?

​ 首先Namenode存储着文件系统的元数据,元数据记录了文件、块、目录,大约占150字节大小。如果hdfs的小文件过多,那么会占用元数据中记录文件的内存,给Namenode造成压力,影响hadoop存储和访问的效率。

​ 通常可以通过两种方法处理:

​ HAR文件方案:启动mr程序,通过hadoop archive命令将小文件压缩成一个har文件,适用于文件归档。

​ Sequence Files方案:还不太会用,暂不说明。

5.block块为什么设置比较大?是不是越大越好?

​block的大小是由磁盘传输速度决定的,比如磁盘传输速度是200MB/S,block一般设定256MB。

​ 如果block太大,那么从磁盘传输数据的时间会明显变慢,另一方面,mapreduce中的map任务一般一次处理一个block块,如果块过大,mr的处理速度也会变慢。​ 如果block太小,那么就会跟hdfs存储大量小文件的问题一样,会给namenode造成内存的压力。

MapReduce分布式计算

1.MapReduce的shuffle过程是怎么样的?

​ MapReduce的shuffle过程实际上包含在map阶段和reduce阶段,也就是Map Shuffle和Reduce Shuffle;

Map Shuffle的过程是对map的结果进行分区排序,然后按照同一分区的输出合并一起写入到磁盘中,最终得到一个分区有序的文件。

  • 大致流程是:
    • 从map task输出的kv对数据会先写入到一个环形缓冲区,大小为100MB,但写满80%时就会溢出写入到磁盘文件;
    • 在写入到磁盘文件的过程中,会对kv对进行HashPartition分区和排序,HashPartition是mr程序默认的分区方法,它会对kv对的key求hash值,然后对reduce的个数求模运算,最后得到的分区号作为分配给不同reduce的根据,分区后具有相同分区号的键值对存储在一起,每个分区里面的键值对又按key值进行排序。
    • 接下来会判断是否需要combine压缩具有同一键的键值对数据
    • 然后作为map输出准备传输给reduce
  • Reduce Shuffle过程中,是从reduce端通过网络传输向磁盘获取map输出开始,中间reduce shuffle也会把键相同的键值对数据放到一起,然后排序合并,最终形成一个整体有序的数据块,但这个过程是一直到调用reduce方法之前,也就是reduce shuffle并不包括调用reduce方法、

2.Combiner的作用

​ Combiner为了避免map task和reduce task之间的数据传输压力而设置的,它允许用户针对map task的输出指定一个合并函数,这个函数可以压缩具有同一key值的键值对,从而减少传输到reduce的数据量,减少网络带宽和reduce的负载。

​ 但实际上combiner是作为可选项,有没有设置或者设置多少次都不会影响最终结果,在shuffle过程中会判断是否设置而进行压缩。

3.如何诊断是否有数据倾斜存在并处理?

数据倾斜有两种原因:

(1)某一个key对应的键值对数量要远远大于其它键的键值对数量;

(2)部分数据记录的大小远超过平均值。

  • 可以在MR程序的reduce方法中追踪每个键的最大值,并且设置阈值,当超过该阈值时就可以认为发生了数据倾斜,可以输出到日志文件进行分析。
  • 第二种是很对编写MR程序时,从业务层面去考虑自定义的分区键是否合理。就跟ADS库建表时可以默认指定哪个字段作为分区键。
  • MR程序中改用TotalOrderPartitioner替换HashPartitioner,它可以通过对原始数据进行抽样得到的结果集来预设分区边界值,也就是能找出导致数据倾斜的key
  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 大数据开发工程师系列是指专门从事大数据开发的一类职业。Hadoop和Spark是大数据领域中最受欢迎的两个开源框架。 Hadoop是一个分布式计算框架,用于处理大规模数据集的分布式存储和计算。Hadoop的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分布存储在集群的多个节点上,MapReduce可以并行处理这些分布式数据。Hadoop具有高可靠性、高扩展性和高容错性的特点,并且还提供了许多其他工具和库,如Hive、Pig和HBase等。 Spark是一个快速、通用的大数据处理引擎,可以在多种数据源上进行高效的分布式计算。相比于Hadoop的MapReduce,Spark具有更快的数据处理速度和更强的扩展性。Spark提供了一个称为弹性分布式数据集(RDD)的抽象,可以在内存中高效地处理大规模数据集。此外,Spark还提供了许多高级组件和库,如Spark SQL、Spark Streaming和MLlib等,用于处理结构化数据、流式数据和机器学习。 作为大数据开发工程师,掌握Hadoop和Spark是非常重要的。使用Hadoop可以处理海量数据,并且具有高可靠性和容错性。而Spark则能够快速高效地处理大规模数据,并提供了更多的数据处理和分析功能。 大数据开发工程师需要熟悉Hadoop和Spark的使用和调优技巧,以及相关的编程语言和工具,如Java、Scala和Python。他们需要了解数据处理的算法和模型,并能够设计和实现高效的分布式计算方案。此外,大数据开发工程师还需要具备良好的沟通能力和团队合作能力,能够与数据科学家和业务团队紧密合作,共同解决实际问题。 总之,大数据开发工程师系列是一个专门从事大数据开发的职业群体。而Hadoop和Spark则是这个职业群体中最重要的两个工具,他们分别用于大规模数据处理和分布式计算。掌握Hadoop和Spark的使用和优化技巧,是成为一名优秀的大数据开发工程师的关键能力。 ### 回答2: 大数据开发工程师系列主要涉及到两个重要的技术:Hadoop和Spark。 Hadoop是一个开源的分布式计算框架,主要用于存储和处理大规模数据集。它通过将数据分散存储在集群中的多个节点上,并在节点之间进行数据通信和计算,实现了数据的并行处理和高可靠性。Hadoop的核心工具是HDFS(Hadoop分布式文件系统)和MapReduce(一种用于分布式计算的编程模型)。HDFS用于将数据分布式存储在集群中,而MapReduce则是用于分布式计算的框架,通过将计算任务分解成多个小任务并在各个节点上并行执行,大大提高了数据处理的效率和性能。 Spark是当前最受欢迎的大数据计算框架之一,也是一个开源项目。与Hadoop相比,Spark具有更快的数据处理速度和更强大的功能。Spark提供了一个可扩展的分布式数据处理框架,支持数据处理、机器学习、图计算等多种大数据应用场景。与传统的基于磁盘的计算框架相比,Spark利用内存计算的优势,可以快速地对大规模数据进行处理和分析。此外,Spark还提供了丰富的API和开发工具,使开发人员可以更轻松地构建和调试大数据应用程序。 作为大数据开发工程师,掌握Hadoop和Spark是必不可少的。熟悉Hadoop的使用和原理,能够有效地存储和处理大规模数据集。而对于Spark的掌握,则可以提高数据处理的速度和效率,使得大数据分析和挖掘更加容易实现。因此,大数据开发工程师需要具备对Hadoop和Spark的深入理解和熟练应用,同时还需要具备数据分析、算法和编程等多方面的技能,以应对复杂的大数据挑战。 ### 回答3: 大数据开发工程师是一个专注于处理大数据的职位,主要负责使用各种工具和技术来处理和分析大规模的数据集。 Hadoop和Spark是目前在大数据处理领域中非常流行的两个开源工具。Hadoop是一个分布式系统基础架构,可以在集群中存储和处理大规模数据。它的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分散存储在集群的不同节点上,而MapReduce模型则提供了一种并行处理数据的方式。大数据开发工程师需要熟悉Hadoop的架构和命令行工具,能够编写MapReduce程序来处理数据。 Spark是一个快速和通用的大数据处理引擎,可以在大规模集群上执行数据处理任务。它拥有比Hadoop更高的性能和更丰富的功能。Spark提供了强大的机器学习、图计算和流处理等功能。大数据开发工程师需要熟悉Spark的API和编程模型,能够使用Spark的各种组建和工具进行数据处理和分析。 作为大数据开发工程师,掌握Hadoop和Spark是非常重要的。使用Hadoop和Spark可以有效地处理大规模数据,提取有价值的信息。大数据开发工程师通过编写和优化MapReduce程序来实现数据处理的需求,同时也能利用Spark提供的机器学习和流处理等功能来进行更复杂的数据分析。通过合理地使用Hadoop和Spark,大数据开发工程师可以减少数据处理的时间和成本,提高数据处理的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值