大数据云计算面试之HDFS架构的示例分析

这篇文章主要介绍了大数据云计算面试之HDFS架构的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

创新互联建站拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的网站设计制作、网站建设、网站维护、四川电信科技城机房解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城网站建设、政府网站等各类型客户群体,为全球成百上千企业提供全方位网站维护、服务器维护解决方案。

  1. HDFS架构
    可以查看官网的描述

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

介绍NameNode and DataNodes

大数据云计算面试之HDFS架构的示例分析

结合上图官网 描述可以总结

HDFS has a master/slave architecture 是一个主从的架构

An HDFS cluster consists of a single NameNode 一个集群只有一个NameNode

there are a number of DataNodes, usually one per node in the cluster, which manage storage attached to the nodes that they run on. 有多个 DataNodes 主要作用是管理manages 文件系统的命名空间,和管理需要访问文件的客户端

 HDFS exposes a file system namespace and allows user data to be stored in files. HDFS公开了文件系统名称空间,并允许用户数据存储在文件中。

大数据云计算面试之HDFS架构的示例分析

根据上图

可以看到有这么几个概念

  1. Client

  2. NameNode( 简写为NN)

  3. DataNodes (简写为 DN)

  4. Block

Client 用于发起HDFS请求,可以是用户,可以是代码

NN 存在唯一一个,所以存在SinglePoint of Failure (单点故障的问题) 引出 ==》HA(heigh available)

DN 存在多个

作用:存储数据 和NN 之间有心跳

Namenode 创建的时候,配置有文件名字、 副本数 等

大数据云计算面试之HDFS架构的示例分析

2.读写流程

了解架构后,我们来看读写流程

假设我们有一个client  一个NameNode 三个DataNode,等几个角色

大数据云计算面试之HDFS架构的示例分析

(1)写入流程

1.一个用户、代码需要写入文件

第一步:client 从配置文件(hdfs 的配置文件中)获取到 1. 副本大小 2.副本数量

大数据云计算面试之HDFS架构的示例分析

第二步:在第一步获取的的参数中,进行文件拆分

第三步:client 向 NameNode 发起请求,询问NameNode 文件应该放在哪里

第四步: NameNode 返回文件,可以存放到的位置

大数据云计算面试之HDFS架构的示例分析

第五步:client 对指定的DataNode 位置写入文件

大数据云计算面试之HDFS架构的示例分析

DataNode 写入完成进行副本拷贝和通知NameNode

大数据云计算面试之HDFS架构的示例分析

(2)读取流程(就相对比较简单了)

第一步:客户段请求NameNode 文件

第二步:NameNode 返回存放该数据的DataNode 地址

第三步:client 到DataNode 读取数据

3.HA (高可用)架构

在官网上可以看到有QJM 和NFS 架构

大数据云计算面试之HDFS架构的示例分析

QJM(https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html)

NFS(https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html)

其中见常见的HA框架如下图所示

大数据云计算面试之HDFS架构的示例分析

建立多个NameNode 一个Active 活动状态, 一个Standby 备用,通过Monitor Health 监控状态, 通过Zookeeper 协调主备切换

4.小文件是什么

小文件是指文件size小于HDFS上block大小的文件。这样的文件会给hadoop的扩展性和性能带来严重问题

为什么有小文件?

1、实时处理:比如我们使用 Spark Streaming 从外部数据源接收数据,然后经过 ETL 处理之后存储到 HDFS 中。这种情况下在每个 Job 中会产生大量的小文件。
2、hive中对表执行insert操作,每次插入都在表目录下形成一个小文件。创建表结构相同的表,create table t_new as select * from t_old;老表根据实际情况可以删除就删除。
3、hive中执行简单过滤操作,符合过滤条件的数据存在很多block块中,走map,map输出有很多小文件。开启map端的聚合。
4、mapreduce正常执行产生小文件。将mapreduce输出不直接写hdfs,而是写入到hbase中。设置map端文件合并及reduce端文件合并。
5、输入数据文件为小文件。小文件合并后再计算。CombineFileInputFormat:它是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置。

5.小文件带来的瓶颈

1.磁盘IO

2.task启动销毁的开销

3.资源有限(磁盘空间)

具体为:处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而task启动将耗费大量时间甚至大部分时间都耗费在启动task和释放task上。

最后小文件的解决方法:

通用处理方案:

1、Hadoop Archive

Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。

2、Sequence file

sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。

底层处理方案:

HDFS-8998:

DataNode划分小文件区,专门存储小文件。一个block块满了开始使用下一个block。

HDFS-8286:

将元数据从namenode从内存移到第三方k-v存储系统中。

HDFS-7240:

Apache Hadoop Ozone,hadoop子项目,为扩展hdfs而生。

感谢你能够认真阅读完这篇文章,希望小编分享的“大数据云计算面试之HDFS架构的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


当前名称:大数据云计算面试之HDFS架构的示例分析
文章源于:http://hbruida.cn/article/jgjcgp.html