大数据Hadoop常考知识点汇总

1、hadoop是什么

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,主要解决海量数据存储与计算的问题,其中主要包括HDFS、MapReduce和Yarn框架。

2、HDFS

HDFS四大机制:心跳机制,安全机制,机架策略(副本存放策略),负载均衡。
HDFS两大核心:文件上传和文件下载

2.0.1、心跳机制

介绍:hdfs是主从架构,所有为了实时的得知dataNode是否存活,必须建立心跳机制,在整个hdfs运行过程中,dataNode会定时的向nameNode发送心跳报告已告知nameNode自己的状态。

心跳内容:
报告自己的存活状态,每次汇报之后都会更新维护的计数信息
向nameNode汇报自己的存储的block列表信息

心跳报告周期:
nameNode判断一个dataNode宕机的基准:
连续10次接收不到dataNode的心跳信息,和2次的检查时间。

2.0.2、安全机制

介绍:hdfs在启动的时候,首先会进入的安全模式中,当达到规定的要求时,会退出安全模式。在安全模式中,不能执行任何修改元数据信息的操作。
  
hdfs的元数据的介绍(三个部分):
抽象目录树
数据与块的对应关系(文件被切分成多少个块)
block块存放的位置信息

hdfs元数据的存储位置:
内存:内存中存储了一份完整的元数据信息(抽象目录树、数据与块的对应关系、block块存放的位置信息)
硬盘:抽象目录树、数据与块的对应关系

2.0.3、机架策略(副本存放策略)

方法:将每个文件的数据进行分块存储,每一个数据块又保存有多个副本,这些数据块副本分
布在不同的机器节点上

2.0.4、负载均衡

hdfs集群中的每一个datanode上的存储的数据和自己的硬件占比是相当的;
这个时候我们可以认为这个hdfs集群是负载均衡的。

2.0.5、Hdfs两大核心

文件上传:hdfs写数据
文件下载:hdfs读数据

2.1、关于HDFS

Hive的数据存储在HDFS。主要分为NameNode,DataNode,SecondaryNameNode三个模块。
简单来说,HDFS数据的文件元信息,包括位置、大小、分块信息等,都是保存在NameNode的内存中的(真正的数据是存储在DataNode)。每个对象约占用150个字节,因此一千万个文件及分块就会占用约3G的内存空间(每个小文件都会占用NameNode模块的存储资源),一旦接近这个量级,NameNode的性能就会开始下降了。此外,HDFS读写小文件时也会更加耗时,因为每次都需要从NameNode获取元信息,并与对应的DataNode建立连接,读取数据。对于MapReduce程序来说,小文件还会增加Mapper的个数,每个脚本只处理很少的数据,浪费了大量的调度时间。当然这个问题可以通过使用小文件合并和JVM重用来解决。
HDFS中的最小存储单元是数据块(Block)。在HDFS中,文件被分割成一个个固定大小的数据块,通常默认情况下为128MB。
小文件通常存储在HDFS中一个单独的数据块中。当一个小文件写入HDFS时,它的大小可能小于默认的数据块大小(通常是128MB)。在这种情况下,HDFS将为该小文件分配一个完整的数据块,并将剩余的空间浪费掉。这种情况下会出现所谓的“小文件问题”,因为这种方式会占用大量的存储空间,导致存储资源的低效利用。

2.2、关于HDFS的读流程

在这里插入图片描述

2.3、关于HDFS的写流程

在这里插入图片描述
1、首先客户端会向namenode进行请求,然后namenode会检查该文件是否已经存在,如果不存在,就会允许客户端上传文件;
2、客户端再次向namenode请求第一个block上传到哪几个datanode节点上,假设namenode返回了三个datanode节点;
3、那么客户端就会向datanode1请求上传数据,然后datanode1会继续调用datanode2,datanode2会继续调用datanode3,那么这个通信管道就建立起来了,紧接着dn3,dn2,dn1逐级应答客户端;
4、然后客户端就会向datanode1上传第一个block,以packet为单位(默认64k),datanode1收到后就会传给datanode2,dn2传给dn3
5、当第一个block传输完成之后,客户端再次请求namenode上传第二个block。【写的时候,是串行的写入数据块】

2.4、关于HDFS中的小文件

小文件的产生原因:
1、动态分区插入数据的时候,会产生大量的小文件(动态分区产生小文件原因:在一段sql中指定两个字段当动态分区,一个字段的基数为7,另一个为4,这就是28个分区,数据插入动态分区阶段只有map任务,假如有4000个map,这种情况下map任务在往hive分区中写的时候,每个map几乎都要产生28个文件,这样就会产生4000*28个文件,带来大量的小文件);
2、数据源本身就包含有大量的小文件;
3、Reduce数量的增加,即意味结果文件的增加,从而产生小文件的问题。

2.4.1、小文件的影响

1、从HIVE角度来看的话呢,小文件越多,map的个数也会越多,每一个map都会开启一个JVM虚拟机,每个虚拟机都要创建任务,执行任务,这些流程都会造成大量的资源浪费,严重影响性能;
2、在HDFS中,每个小文件约占150byte,如果小文件过多则会占用大量的内存。这样namenode内存容量严重制约了集群的发展。

2.4.2、​小文件的解决方案

1、从小文件的产生途径解决:
1)使用sequencefile作为表存储形式,不要使用textfile,在一定程度上可以减少小文件;
2)减少reduce的个数(减少生成分区数量);
3)少用动态分区,使用distribute by分区。

2、对已经存在的小文件做出的解决方案:
1)使用Hadoop archive把小文件进行归档
Hadoop的归档文件格式也是解决小文件问题的方式之一。而且Hive提供了原生支持:

set hive.archive.enabled=true;
set hive.archive.har.parentdir.settable=true;
set har.partfile.size=1099511627776;
alter table srcpart archive partition(ds='2008-04-08', hr='12');
alter table srcpart unarchive partition(ds='2008-04-08', hr='12');

如果使用的不是分区表,则可创建成外部表,并使用har://协议来指定路径。
2)HDFS Federation
Hadoop V2引入了HDFS Federation的概念
实则是将NameNode做了拆分,从而增强了它的扩展性,小文件的问题也能够得到缓解。
3)重建表,建表时减少reduce的数量
4)通过参数调节,设置map/reduce的数量,对于通常的应用,使用Hive结果合并就能达到很好的效果。
设置map输入合并小文件的相关参数:

//每个Map最大输入大小(这个值决定了合并后文件的数量)
set mapred.max.split.size=256000000;
//一个节点上split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)
set mapred.min.split.size.per.node=100000000;
//一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并)
set mapred.min.split.size.per.rack=100000000;
//执行Map前进行小文件合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

设置map输出和reduce输出进行合并的相关参数:

//设置map端输出进行合并,默认为true
set hive.merge.mapfiles = true;
//设置reduce端输出进行合并,默认为false
set hive.merge.mapredfiles = true;
//设置合并文件的大小
set hive.merge.size.per.task = 256*1000*100;
//当输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行文件merge。
set hive.merge.smallfiles.avgsize=16000000;

2.5、数据存储和压缩

2.5.1、数据存储

    Hive底层数据是以HDFS文件的形式存储在Hadoop中的,选择一个合适的文件存储格式及压缩方式,也是 Hive 优化的一个重点。不同的文件存储格式及压缩格式,同时代表着不同的数据存储组织方式,对于性能优化表现会有很大不同。
2.5.1.1、行存储与列存储

数据处理大致可分为两大类,联机事务处理 OLTP(on-line transaction processing),联机分析处理 OLAP(On-Line Analytical Processing)。OLTP 是传统关系型数据库,主要应用来执行一些基本的、日常的事务处理,比如数据库记录的增、删、改、查等等;而OLAP则是分布式数据库,主要应用它对实时性要求不高,但处理数据量大,通常应用于复杂计算的报表系统上。

数据处理类型 OLTP OLAP
主要的面向对象 业务开发人员 分析决策人员
功能实现 日常事务处理 面向决策分析
数据模型</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值