您的当前位置:首页HDFS简介

HDFS简介

2023-08-24 来源:爱问旅游网


Hadoop是Apache下的一个分布式并行计算框架,已经被Facebook、Yahoo!等互联网企业应用于Web搜索、日志分析等大规模数据处理领域,其核心包括分布式文件系统HDFS和并行编程框架MapReduce。Hadoop是Goolge的分布式文件系统GFS和编程框架的开源实现,部署简单,可靠高效。Hadoop的生态系统如下图所示:

Intel Hadoop Manager安装、部署、监控、告警和访问控制Sqoop关系型数据ETL工具Mahout数据挖掘Pig数据流处理语言MapReduce分布式计算框架Hive数据仓库Zookeeper分布式协作服务Flume日志收集工具HBase实时、分布式、高维数据库HDFS分布式文件系统 图2-2 Hadoop生态系统

Hadoop的核心是Common、HDFS及MapReduce三个子项目,Common为Hadoop系统提供配置工具Configuration、RPC及序列化机制。Hive、Pig及HBase等项目构建在这些子项目之上。HBase是一个分布式、面向列的开源数据库,底层采用分布式文件系统HDFS,但是用户可以将底层扩展成其他文件系统。Pig和Hive是Hadoop生态系统中的数据分析工具,Hive是数据仓库工具,提供了一系列数据提取转化及加载的功能,Pig提供类SQL语言Pig Latin,将类SQL数据分析请求转化为优化处理后的MapReduce运算,能够友好的支持程序员写查询。外围支持系统包括日志收集工具Flume、关系型数据库ETL工具Sqoop,面向具体领域应用有Mashout、X-Rime、Crossbow等项目。这些项目之间相互互补,共同构成了Hadoop生态系统。 2.2.2 HDFS存储体系

Hadoop集群由一个Namenode和多个Datanode组成,分布式文件系统将元数据和应用数据分别存储在Namenode及Datanode中,各个服务器之间通过RPC协议进行

通信。HDFS命令空间是分层次的文件及目录结构,Namenode维护命名空间树及文件块与DataNodes之间的映射文件,Datanode负责存储实际的数据。Datanode与namenode之间通过心跳信息进行通信,在通信中报告自己的运行状况,HDFS的架构如下图所示:

Metadata opsNameNodeMetadata(Name,replicas,...)/home/foo/data,3,...ClientReadBlock opsDatanodesReplicationDatanodesBlocks机架1Write机架2Client

图2-3 HDFS架构

下图描述了数据读取过程中客户端与之交互的HDFS、namenode和datanode之间的数据流:

2: get block locationsDistributedFileSystemFSDataInputStream1: openHDFSclient3: read6: closeclient JVMclient nodeNamenodenamenode4: read5: readDatanodedatanodeDatanodedatanodeDatanodedatanode 图2-4 客户端读取HDFS中的数据

如上图所示,文件系统客户端在步骤1中用FileSystem对象的open函数打开文件,文件系统使用RPC通信机制与管理节点通信获取该文件的数据块信息(步骤2)。文件的读

取通过FSDataInputstream输入流来完成,在步骤1,2后文件系统会返回一个输入流的对象。在步骤3中,客户端通过输入流对象调用read()方法读取数据,在文件系统中每个文件有多个副本,输入流对象会根据系统信息选择连接距离最近的datanode读取文件。

在Hadoop中,客户端通过文件类的API来读取HDFS中的文件内容,下图是从HDFS文件系统中读取数据的流程图:

1: createHDFSclient3: write6: closeclient JVMclient node4: write packet5: ack packet2: create7: completeDistributedFileSystemFSDataOutputStreamNameNodenamenode4Pipeline ofdatanodes4DataNode5datanodeDataNode5datanodeDataNodedatanode 图2-5 客户端将数据写入HDFS

文件系统的写入过程相对复杂,而且时间耗费大。在步骤1,2中,Client通过文件系统提供的API,调用分布式文件系统,通过文件系统对象的create方法启动创建文件过程,要完成的工作包括在命名空间创建文件元数据,并返回一个FSDataOutputStream输出流对象。为了保证文件的可靠性,写入多个副本,在输出流中根据副本数选择多个数据节点构成管线,步骤3通过输出流对象将数据其中的一个数据节点,然后数据节点之间进行数据发送(步骤4)。各数据节点在数据写入完成时向管道返回确认信息,在步骤5中管道确认数据写入完毕后,从队列中删除数据包。客户端完成数据的写入后,通过步骤6,7结束数据写入流程。

因篇幅问题不能全部显示,请点此查看更多更全内容