1️⃣大数据开发笔记(一):HDFS介绍 |
2️⃣大数据开发笔记(二):Yarn分布式集群操作系统 |
3️⃣大数据开发笔记(三):Mapreduce |
4️⃣大数据开发笔记(四):Hive数据仓库 |
➡️大数据开发笔记(四):Hive数据仓库 |
➡️大数据开发笔记(四):Hive数仓调优 |
5️⃣大数据开发笔记(五):Zookeeper |
6️⃣大数据开发笔记(六):Flume基础学习 |
7️⃣大数据开发笔记(七):Kafka分布式流式处理 |
8️⃣大数据开发笔记(八):Spark综合总结及Sparksql |
9️⃣大数据开发笔记(九):Flink基础 |
➡️大数据开发笔记(九):Flink综合学习 |
🔟大数据开发笔记(十):Hbase列存储数据库总结 |
➡️大数据开发笔记(十):Hbase实践 |
📝总结:Hadoop由三部分组成:HDFS、分布式计算MapReduce和资源调度引擎Yarn。
HDFS 是一个分布式文件系统,负责文件存储。它的文件系统和平时看到的Linux很像,有目录结构,顶层目录是/,存放着文件,以及可以对文件进行增删,修改,移动等功能,不同的是它具有分布式的特点,hdfs的文件系统可以横跨多个机器,文件可能是存储在不同机器上的,但用户在使用时会被当作是存储在一台机器上。
在HDFS中有一个核心概念-block块。HDFS上的文件,是按照128M为单位,切分成一个个block的,分散的存储在集群的不同数据节点上。128M是指上限,实际可能block文件的大小不到128M。而为了保证数据的可用及容错,每一个block都可以设置副本数,默认是3,在集群搭建中,在hdfs-site.xml文件就可以设置默认副本数。每一个block的副本并不会存放在同一个服务器上面,而是分开存储在不同服务器,假如第一个block块暂时奔溃了,HDFS的主节点就会为了维持设置的block副本数,重新在其它服务器上创建一模一样的block1。
HDFS具有高可用、容错率高、可扩展的特点。
高容错性
①:数据自动保存多个副本。它通过增加副本的形式,提高容错性
②:某一个副本丢失以后,它可以自动恢复
适合批处理即就近原则
①:移动计算而非非数据,数据位置暴露给计算机框架
②:本地化,数据不移动,代码(任务)移动。
适合处理大数据
①:数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据
②:文件规模:能够处理百万规模以上的文件数量,数量相当之大
可构建在廉价机器上,通过多副本机制,提高可靠性
不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。寻址时间长,适合读取大文件,低延迟与高吞吐率。
不适合小文件存储
占用NameNode大量内存,寻找时间超过读取时间
不支持并发写入,文件随机修改
①:一个文件只能有一个写,不允许多个线程同时写
②:仅支持数据append(追加),不支持文件的修改
📝总结:HDFS的体系架构是典型的主从架构Master/Slave,有客户端和服务端,客服端通过Namenode主节点来访问存放在各个Datanode上的文件信息,Namenode负责管理每个子节点,同时还有secondaryNamenode做备份主节点。
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。
HDFS的机制是指它的心跳机制,我们知道HDFS是典型的Master/Slave主从架构,由一个Namenode管理多个Datanode过程中HDFS会用到它的心跳机制,其工作原理如下:
(1)Namenode通过心跳机制全权管理数据,它周期性地从集群中的每个namenode接受心跳信号和块状态报告,有心跳意味着从节点工作正常,块状态报告中也会有该datanode上所有数据的列表。
(2)Datanode启动后向Namenode注册,并通过心跳上报数据块列表,3秒发送一次心跳,返回并执行Namenodede命令,如果10分钟都没有发送,代表这个Datanode出问题不可用。
(3)hadoop集群刚启动时会进入一个安全模式,这个安全模式也会用到心跳机制,只有Namenode得到99.9%datanode的反馈后安全模式才会解除。
首先Namenode存储着文件系统的元数据,元数据记录了文件、块、目录,大约占150字节大小。如果hdfs的小文件过多,那么会占用元数据中记录文件的内存,给Namenode造成压力,影响hadoop存储和访问的效率。
通常可以通过两种方法处理:
HAR文件方案:启动mr程序,通过hadoop archive命令将小文件压缩成一个har文件,适用于文件归档。
Sequence Files方案:还不太会用,暂不说明。
block的大小是由磁盘传输速度决定的,比如磁盘传输速度是200MB/S,block一般设定256MB。
如果block太大,那么从磁盘传输数据的时间会明显变慢,另一方面,mapreduce中的map任务一般一次处理一个block块,如果块过大,mr的处理速度也会变慢。 如果block太小,那么就会跟hdfs存储大量小文件的问题一样,会给namenode造成内存的压力。
1.MapReduce的shuffle过程是怎么样的?
MapReduce的shuffle过程实际上包含在map阶段和reduce阶段,也就是Map Shuffle和Reduce Shuffle;
Map Shuffle的过程是对map的结果进行分区排序,然后按照同一分区的输出合并一起写入到磁盘中,最终得到一个分区有序的文件。
2.Combiner的作用
Combiner为了避免map task和reduce task之间的数据传输压力而设置的,它允许用户针对map task的输出指定一个合并函数,这个函数可以压缩具有同一key值的键值对,从而减少传输到reduce的数据量,减少网络带宽和reduce的负载。
但实际上combiner是作为可选项,有没有设置或者设置多少次都不会影响最终结果,在shuffle过程中会判断是否设置而进行压缩。
3.如何诊断是否有数据倾斜存在并处理?
数据倾斜有两种原因:
(1)某一个key对应的键值对数量要远远大于其它键的键值对数量;
(2)部分数据记录的大小远超过平均值。