Google的“三驾马车“
GFSMapReduceBigTable
HDFS
HDFS是什么?
HDFS是基于流数据访问模式的分布式文件系统,支持海量数据的存储,允许用户将成百上千的计算机,组成存储集群。优点:可以处理超大文件、支持流式数据访问(一次写入,多次读取)、低成本运行。缺点:不适合处理低延迟的数据访问,主要处理高数据吞吐量的应用;不适合处理大量的小文件,这样会浪费NameNode内存;不适合多用户写入及任意修改文件。
HDFS的组成架构
NameNode
NameNode即名称节点,是HDFS的管理者。
主要功能(三个):
管理和维护 HDFS 的命名空间:命名空间镜像文件( fsimage ),操作日志文件( edits )
fsimage:存储 hadoop 文件系统中的所有目录和文件的序列化信息edits:记录 HDFS 最新状态, HDFS 客户端执行的所有写操作记录在 editlog 中
管理 DataNode 上的数据块:在 HDFS 中,一个文件被分成一个或多个数据块,这些数据块存储在 DataNode 中, NameNode 通过“文件名–>数据块”映射或者“数据块–>DataNode”来确定
接收客户端的请求
DataNode
每个磁盘都有默认的数据块大小,它是磁盘进行读、写的最小单位,HDFS默认数据块大小为128MB。数据块如此大,目的是减少寻址开销,减少磁盘一次读取时间。
功能:保存数据块:每个数据块对应一个元数据信息文件,用来描述该数据块属于哪个文件,是第几个数据块运行 DataNode 线程,向 NameNode 定期汇报数据块信息定期向 NameNode 发送心跳信息保持联系
SecondaryNameNode
即第二名称节点,主要职责是定期把 NameNode 的 fsimage 和 edits 下载到本地,并将它们加载到内存进行合并,最后将合并后的新的 fsimage 上传回 NameNode ,此过程称为检查点 ( CheckPoint )。定期合并 fsimage 和 edits 文件,使 edits 大小保持在限制范围内,减少重新启动 NameNode 时合并 fsimage 和 edits 耗费的时间。
HDFS Shell
HDFS Shell 命令是用类似于 Linux Shell 的命令,来操作文件系统。如:hdfs dfs -ls,列出文件或目录。
HDFS API
当然, Hadoop 提供了多种 HDFS 的访问接口,其中 Java API可用代码的方式来操作文件系统。
- 实例化 Configuraion 类实例化 FileSystem 类设置目标对象的路径执行文件或目录操作
高可用 HA
联邦 Fedeeration



