一、HDFS概述

        优点:高容错性、适合批处理、适合大数据处理、流式文件访问:一次写入,多次读取。

        缺点:不适合低延迟数据访问、不适合小文件存取(受限于NameNode)、不适合并发写入。

二、HDFS基本架构和原理

        考虑一个问题:如何实现一个分布式文件系统?

        业务场景:目前有几个T级别的大文件,有数个大容量存储主机。

        初期思路:将每个文件创建几个副本,通过冗余机制,分别存放到不同的机器上。另外,通过一台专门的主机master,记录这些文件及其副本都存储到了哪些机器上。

        初期思路的缺点:①存储负载不均衡。②读取文件时无法并行读取,受限于单台机器的IO性能。③master存在单点故障风险。④当文件大于存储机器的磁盘容量时,就无法进行存储了。

        HDFS的思路:基本原理是将大文件分块,每个文件块大小相同(64M),用一个节点master记录文件块的存放位置。每个文件块建立多个副本。采用NameNode和DataNode的方式,两者通过心跳进行检测。同时为了避免单点故障,提供一个standby的NameNode。client负责切分文件,并与NameNode交互,获取文件位置信息。

        HDFS数据块(block):

        HDFS写流程:通过client类,首先询问当前文件是否存在。然后client通过流水线的方式写入。每次会把block拆分成更加小的packet。写完一个之后继续下一个,然后datanode传输之前写入的packet。以此类推,直至写完。

        HDFS读流程:client通过询问NameNode获取该文件所在的datanode位置,然后将文件读取出来。

        HDFS的物理拓扑:集群内有多个机架,每个机架上有多个节点。所以分配block时需要考虑跨机架的效率问题。

        HDFS副本放置策略:副本1写在和client相同 的节点上。副本2写在不同机架的节点上。副本3写在与副本2同机架的另一个节点上。

        HDFS可靠性策略:

                3种常见错误:文件损坏、网络或者机器失效、NameNode挂掉。

                文件完整性校验:通过CRC32校验,用其他副本去掉损坏文件。

                Heartbeat:检测datanode机器是否失效。

                元数据信息:FSImage\多份存储、主备切换。

        HDFS不适合存储小文件:①NameNode的内存是有限的。②大量小文件寻址时间长。③NameNode存储block数目是有限的。

三、HDFS程序设计

        HDFS访问方式:HDFS shell 、Java api、rest api、fuse协议、lib hdfs、其他语言编程API。

        HDFS Shell命令一览表:通过hadoop提供的命令行工具完成。也提供了很多的管理脚本。(详见后续介绍)

        Java API: Configuration类、FileSystem类、FSDataInputStream、FSDataOutputStream。

        其他语言:略。

四、HDFS2.0新特性

        1、NameNode HA:

        2、NameNode Federation:集群中提供多个NameNode,每个NameNode负责管理一部分DataNode。

        3、HDFS 快照:帮助用户保存某个时刻的数据。防止用户误删数据。使用命令开启该功能。

        4、HDFS 缓存:

        5、HDFS ACL:启用时需要修改配置文件。原来的方式受限于单一user和单一group机制。

        6、异构层级存储结构:原本是将所有的存储介质抽象成性能相同的DISK。

                每个节点是由多种异构存储介质组成的。

                当前功能尚在完善中。

hadoop入门(2)——HDFS2.0应用场景、原理、基本架构及使用方法的更多相关文章

  1. [转帖]kafka入门:简介、使用场景、设计原理、主要配置及集群搭建

    kafka入门:简介.使用场景.设计原理.主要配置及集群搭建 http://www.aboutyun.com/thread-9341-1-1.html 还没看完 感觉挺好的. 问题导读: 1.zook ...

  2. hadoop入门(3)——hadoop2.0理论基础:安装部署方法

    一.hadoop2.0安装部署流程         1.自动安装部署:Ambari.Minos(小米).Cloudera Manager(收费)         2.使用RPM包安装部署:Apache ...

  3. 大数据技术hadoop入门理论系列之二—HDFS架构简介

    HDFS简单介绍 HDFS全称是Hadoop Distribute File System,是一个能运行在普通商用硬件上的分布式文件系统. 与其他分布式文件系统显著不同的特点是: HDFS是一个高容错 ...

  4. 《区块链DAPP开发入门、代码实现、场景应用》笔记5——区块链福利彩票的设计

    笔者一直强调,一定要利用区块链的特点来解决行业存在的问题,并且该问题最好用区块链解决或者说只能用区块链解决.彩票行业就是个例子. 在讲解代码之前,首先讲解一下业务设计,如图6.15所示. 图6.15 ...

  5. 大数据学习笔记之Hadoop(一):Hadoop入门

    文章目录 大数据概论 一.大数据概念 二.大数据的特点 三.大数据能干啥? 四.大数据发展前景 五.企业数据部的业务流程分析 六.企业数据部的一般组织结构 Hadoop(入门) 一 从Hadoop框架 ...

  6. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  7. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  8. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  9. 大数据:Hadoop入门

    大数据:Hadoop入门 一:什么是大数据 什么是大数据: (1.)大数据是指在一定时间内无法用常规软件对其内容进行抓取,管理和处理的数据集合,简而言之就是数据量非常大,大到无法用常规工具进行处理,如 ...

随机推荐

  1. 【原创】cs+html+js+css模式(七): 顺序执行与并发执行问题,IIS7及其以上版本的抛错问题解决

          在进行开发的过程中,针对于这种模式,我们继承的IRequiresSessionState,这种对于我们的同一个IIS的执行中是顺序执行即一个ajax请求处理完成后,才能执行下一个ajax, ...

  2. Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】

    1.问题:    在dealloc方法中使用[self.xxx release]和[xxx release]的区别? 用Xcode的Analyze分析我的Project,会列出一堆如下的提示:Inco ...

  3. 教你一招:Win10切换输入法与Win7一样(Ctrl + 空格)

    对于win10的朋友,大部分人对输入法都不习惯,如果你把英语输入法删除了,在中文输入法里没有美式键盘,让ctrl+空格与ctrl+Shift都能在搜狗输入法和美式键盘切换.下面小编就教你怎么让Win1 ...

  4. Pycharm 输出中文或打印中文乱码现象的解决办法

    1. 确保文件开头加上以下代码: # -*- coding:utf-8 -*- 还可以加上 import sys reload(sys) sys.setdefaultencoding('utf-8') ...

  5. HCTF时PHP WAF然有RLFI漏洞

    tips:from菜鸡队长 这次去打HCTF决赛,用了这个自己写的WAF,web基本上没被打,被打的漏洞是文件包含漏洞,这个功能在本人这个waf里确实很是捉急,由于只是简单检测了..和php[35]{ ...

  6. sublime2使用jshint

    合理配置Jshint可以帮助写出高质量的代码,通过sublime2插件 JSHint Gutter 可以迅速提供开发效率和减少bug的个数. 1.安装JSHint Gutter插件 sublime2按 ...

  7. 程序代码中退出函数exit()与返回函数return ()的区别

    程序代码中退出函数exit()与返回函数return ()的区别   exit(0):正常运行程序并退出程序:   exit(1):非正常运行导致退出程序:   return():返回函数,若在主函数 ...

  8. CentOS Linux解决Device eth0 does not seem to be present

    在VMware里克隆出来的Centos Linux.. ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: 解决办法: 首先,打开/etc/udev/rules.d/70 ...

  9. UnknownHandler

    未知处理器 从struts2.1 开始 ,struts2配置文件的DTD中增加了<unknown-handler-stack…/>和<unknown-handler-ref…/> ...

  10. js自适应屏幕高度

    //自适应屏幕高度 $(window).resize(function() { hightChange(); }); function hightChange(){ ; $();// iframe i ...