Hadoop系列(二)Hadoop三大核心之HDFS基础

目录

  • hdfs基础

    • 重要概念
  • Hadoop 特点
  • Hadoop HA

针对海量数据,核心问题始终是计算和存储。当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区并存储到多台机器上。跨机器存储的文件系统就被成为分布式文件系统。分布式系统架构于网络之上,势必引入网络编程的复杂性,如何实现容忍节点故障但不丢失数据,是HDFS的重要挑战。

hdfs基础

Hadoop 自带HDFS分布式文件系统:Hadoop Distributed Filesystem。也简称DFS。主要用来解决海量数据的存储问题。

HDFS有以下两点特性

  • 文件系统:用于存储文件,通过统一目录树定位
  • 分布式:很多机器共同支撑其功能

重要概念

数据块

和一般的文件系统一样,HDFS也有块(block)的概念,HDFS上的文件也被划分为块大小的多个分块作为独立的存储单元。

Hadoop 1.x 默认大小为64MB, 2.x和3.x均为128MB。具体指定版本的默认值,可参见官网块的定义。HDFS的块比磁盘的块大,是为了最小化寻址开销,减少寻址定位所需时间。

与磁盘文件系统不一样的是HDFS中小于一个块大小的文件不会占据整个块的空间 例:当一个1MB的文件存储在一个128MB的块中时,文件只使用1MB的磁盘空间,而不是128MB。当一个150M的文件要存储到HDFS中,将会拆分成2个块,大小分别是128M、22M。

设置数据块的好处:

(1)一个文件的大小可以大于集群任意节点磁盘的容量

(2)容易对数据进行备份,提高容错能力,块丢失可快速从其它节点复制

(3)使用抽象块概念而非整个文件作为存储单元,大大简化存储子系统的设计

HDFS集群有两类节点以管理节点-工作节点的方式运行。即NameNode和DataNode。

NameNode(NN)

文件系统的管理节点。管理文件系统的命名空间,维护着文本系统树及整棵树内所有文件和目录。基于内存存储,在内存中保存着文件系统每个文件和每个数据块的引用关系以及块信息等。文件目录在NameNode重启后,需要重建。

功能:

  • 接收客户端读写服务
  • 收集DataNode汇报的Block列表信息

DataNode(DN)

文件系统的工作节点,多个节点共同工作。本地磁盘目录存储数据,文件形式。

功能:

  • 文件形式存储数据(Block)
  • 存储Block的元数据信息文件 (md5)
  • 启动时向NameNode汇报block信息
  • 与NameNode保持心跳连接(3s/次)

NameNode虽然以内存方式存储,但是NameNode也会在适当时候持久化两类文件到磁盘。

  • fsimage:NameNode启动时对整个文件系统的快照
  • edit logs:NameNode启动后,对文件系统的改动序列

只有在NameNode重启时,edit logs才会合并到fsimage文件中,从而得到一个文件系统的最新快照。但是在产品集群中NameNode是很少重启的,这也意味着当NameNode运行了很长时间后,edit logs文件会变得很大。这会引发以下严重问题:1.edit logs文件会变的很大,不容易管理;2.重启会花费很长时间,因为有很多改动,可能经历好几个小时甚至几十个小时,这是不能容忍的。

Secondary NameNode (SNN)

SecondaryNameNode就是来帮助解决上述问题的,职责是帮助NN合并edits log成fsimage,减少NameNode启动时间

SNN 合并edits时间

  • 配置文件设置时间间隔
  • edits log大小 默认 64M

Hadoop 特点

HDFS也是按照Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。

因其架构方案,拥有很多特点:
保存多个副本,且提供容错机制,副本丢失或宕机自动恢复(默认存3份)。
  可运行在廉价的机器上
  适合大数据的处理。HDFS默认会将文件分割成block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。

当然HDFS也有其局限性:
1.低延时数据访问。在用户交互性的应用中,应用需要在ms或者几个s的时间内得到响应。由于HDFS为高吞吐率做了设计,也因此牺牲了快速响应。对于低延时的应用,可以考虑使用HBase或者Cassandra。
2.大量的小文件。标准的HDFS数据块的大小是64M,存储小文件并不会浪费实际的存储空间,但是无疑会增加了在NameNode上的元数据,大量的小文件会影响整个集群的性能。
3.多用户写入,修改文件。HDFS的文件只能有一个写入者,而且写操作只能在文件结尾以追加的方式进行。它不支持多个写入者,也不支持在文件写入后,对文件的任意位置的修改。
但是在大数据领域,分析的是已经存在的数据,这些数据一旦产生就不会修改,因此,HDFS的这些特性和设计局限也就很容易理解了。HDFS为大数据领域的数据分析,提供了非常重要而且十分基础的文件存储功能。

Hadoop HA

可靠性

  1. 冗余备份
    每个文件存储成一系列数据块(Block)。为了容错,文件的所有数据块都会有副本(副本数量即复制因子,可配置)(dfs.replication)
  2. 副本存放
    采用机架感知(Rak-aware)的策略来改进数据的可靠性、高可用和网络带宽的利用率
  3. 心跳检测
    NameNode周期性地从集群中的每一个DataNode接受心跳包和块报告,收到心跳包说明该DataNode工作正常
  4. 安全模式
    系统启动时,NameNode会进入一个安全模式。此时不会出现数据块的写操作。
  5. 数据完整性检测
    HDFS客户端软件实现了对HDFS文件内容的校验和(Checksum)检查(dfs.bytes-per-checksum)。

单点故障问题

因为NameNode部署为单点失效,存在单点故障问题,当NameNode,那么客户端或MapReduce作业均无法读写查看文件。注意HDFS已有存储不会丢失。

解决方案:

启动一个拥有文件系统元数据的新NameNode(这个一般不采用,因为复制元数据非常耗时间)
配置一对活动-备用(Active-Sandby)NameNode,活动NameNode失效时,备用NameNode立即接管,用户不会有明显中断感觉。
    共享编辑日志文件(借助NFS、zookeeper等)
    DataNode同时向两个NameNode汇报数据块信息
    客户端采用特定机制处理 NameNode失效问题,该机制对用户透明

原文地址:https://www.cnblogs.com/valjeanshaw/p/11421637.html

时间: 2024-11-07 16:25:20

Hadoop系列(二)Hadoop三大核心之HDFS基础的相关文章

hadoop系列二:HDFS文件系统的命令及JAVA客户端API

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s

(转载)ASP.NET三大核心对象及基础功能解析

原文链接:http://tech.it168.com/a2011/1207/1284/000001284879_all.shtml 想当初在只使用WebForms框架并以服务端为中心的开发模式时,发现Asp.net好复杂.一大堆服务端控件,各有各的使用方法,有些控件的事件也很重要,必须在合适地时机去响应,还真有些复杂.后来逐渐发现这些复杂的根源其实就是服务器控件相关的抽象逻辑.随着Ajax越用越多,可能有些人也做过这些事情:[新建一个ashx文件,读取一些用户的输入数据,Form, QueryS

Hadoop系列(二)hadoop2.2.0伪分布式安装

一.环境配置 安装虚拟机vmware,并在该虚拟机机中安装CentOS 6.4: 修改hostname(修改配置文件/etc/sysconfig/network中的HOSTNAME=hadoop),修改IP到主机名的映射(vi /etc/hosts ,添加 127.0.0.1   hadoop); 按照JDK,下载jdk1.7.0_60并解压到/soft目录中,然后在/etc/profile中添加  export JAVA_HOME=/soft/jdk1.7.0_60 和 export PATH

安装Hadoop系列 — 导入Hadoop源码项目

将Hadoop源码导入Eclipse有个最大好处就是通过 "ctrl + shift + r" 可以快速打开Hadoop源码文件. 第一步:在Eclipse新建一个Java项目,hadoop-1.0.3 第二步:将Hadoop程序src下core, hdfs, mapred, tools几个目录copy到上述新建项目的src目录 第三步:修改将Java Build Path,删除src,添加src/core, src/hdfs....几个源码目录 第四步:为Java Build Pat

十二、三大核心特征-多态

多态指的是面向对象编程时,屏蔽了子类对象之间的差异,可以使调用对象方法的客户端代码中代码保持通用性,而不必针对每个不同的对象写不同的实现. 多态的实现依靠的是继承.抽象方法或接口的特性. 例如: //父类是一个抽象类Animal abstract class Animal { abstract public function talk(); } //子类Dog class Dog extends Animal { public function talk() { echo '新年旺旺'; } }

hadoop系列三:mapreduce的使用(一)

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/7224772.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列二:HDFS文件系统的命令及JAVA客户端API 在下面可以看到统计一本小说(斗破苍穹)哪些词语出现了最多. 本来mapreducer只想写一篇的,可是发现写一篇太长了,所

hadoop系列三:mapreduce的使用

转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列二:HDFS文件系统的命令及JAVA客户端API 二:wordcount字数统计功能

Hadoop 系列(二)安装配置

Hadoop 系列(二)安装配置 Hadoop 官网:http://hadoop.apache.or 一.Hadoop 安装 1.1 Hadoop 依赖的组件 JDK :从 Oracle 官网下载,设置环境变量(JAVA_HOME.PATH 和 CLASSPATH). SSH(安全外壳标议) :推荐安装 Openssh. Hadoop 需要通过 SSH 来启动 Slave 列表中各台主机的守护进程,因此 SSH 也是必须安装的,即使是安装伪分布式版本(因为 Hadoop 并没有区分开集群式和伪分

Hadoop 系列(六)—— HDFS 常用 Shell 命令

1. 显示当前目录结构 # 显示当前目录结构 hadoop fs -ls <path> # 递归显示当前目录结构 hadoop fs -ls -R <path> # 显示根目录下内容 hadoop fs -ls / 2. 创建目录 # 创建目录 hadoop fs -mkdir <path> # 递归创建目录 hadoop fs -mkdir -p <path> 3. 删除操作 # 删除文件 hadoop fs -rm <path> # 递归删除