hadoop不支持传统文件系统的挂载,使得流式数据装进hadoop变得复杂。

hadoo中,文件只是目录项存在;在文件关闭前,其长度一直显示为0:如果在一段时间内将数据写到文件却没有将其关闭,则若网络中断后,则我们得到的仅仅是一个空白文件;故:最好编写小文件,这样能尽快将其关闭-----错误。

【mapper 单个文件块 1:1】

由于hdfs的元数据保存在NameNode的内存中,因此创建的文件越多,所需的RAM就越多。从MapReduce角度看,小文件会导致效率低下。通常情况下,,每个Mapper都会被分配单个文件块作为

输入(除非使用了某些压缩编码)。如果过多的小文件,那么与待处理的数据相比,与待处理的数据相比,启动工作进程的代价就过高。这种碎片会导致更多的Mapper任务,使得总的Job运行时间增加。

【内存的容量严重制约了集群的扩展】

0-在HDFS中,任何Block、文件或者目录在内存中均以对象的形式存储,每个对象约占150Byte。若有1千万小文件,每个小文件占用1个Block,则NameNode约需要2GB空间:内存的容量严重制约了集群的扩展;

1-HDFS最初是为流式访问大文件而开发的,如果访问大量小文件,则需要不断从一个DataNode跳到另一个DataNode,严重影响了性能,导致最后处理大量小文件的速度远远小于处理同等大小的大文件的速度;每个文件要占用一个Solt,而Task启动将消耗大量的时间,从而导致大部分时间都耗费在启动和释放Task上。

【客户端 自身机制】

用户程序合并:

0-HadoopArchive SequenceFile CombineFileInputFormat

Q1、HDFS可以存储比单个磁盘空间还要大的文件吗?如果可以,什么原理?

Q2、HDFS是怎么实现数据的高可用(High Availability,HA)?

Q3、HDFS中让块分布在同一机架还是多个机架?

参考资料

(1)

HDFS特点:

1、大文件

大,huge,以兆字节为单位,100+MB;

小文件影响HDFS的性能的原因:元数据会消耗主节点NameNode的大量内存;

2、顺序访问

HDFS上的读和写操作都应该按照顺序处理。

只要文件的读取时有序的,MapReduce和其他执行引擎就可以高效地、任意次数地读取HDFS上的文件。

(2)

块抽象

块,block,由于存储文件的块抽象,你可以存储任意大小的文件。

块大小,blocksize,默认128MB。一个100MB的文件仅会占用一个HDFS块上的100MB。块会分布在多个节点上,可以存储比单个磁盘空间还要大的文件。

(3)

大多数系统通过(通常2个节点之间)复制整个数据结构来支持数据的高可用HA:这确保了如果其中一个节点或数据源失效了,另一个节点或数据的副本仍然可用的。

HDFS通过数据块的抽象在此基础上做了扩展,实现了2次改进:

i、默认情况下,HDFS想数据复制2次(而非1次),使得每个块共有3个副本;

ii、HDFS并不是把节点A上的所有块复制到节点B,而是吧这些块分布到多个节点之上;

示例:

HDFS把块默认复制2次至3个不同节点。

(4)

Hadoop components are rack-aware.

机架感知、Rack Awareness。

数据中心的机器通常放在机架或者某些用于承载服务器的容器中。一个机架上可以放置很多台机器。这些机器通宵场距离很近而且网络上下文中也很近。

相同机架上机器之间的连接通常比跨机器之间的连接更高效。通过向HDFS提供这种无理架构,分布式系统的性能和弹性都会得到改善。

可以让块分布在同一机架的多个节点上,这样连通性不收网络带宽的限制。

但让块分布在多个机架张,这样即使整个机架上的服务器全部失效,也可以保证块的数据不丢失。

hadoop 小文件 挂载 小文件对NameNode的内存消耗 HDFS小文件解决方案 客户端 自身机制 HDFS把块默认复制3次至3个不同节点。的更多相关文章

  1. 有关Java内存溢出及内存消耗的小知识

    内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...

  2. 合并hive/hdfs小文件

    磁盘: heads/sectors/cylinders,分别就是磁头/扇区/柱面,每个扇区512byte(现在新的硬盘每个扇区有4K) 文件系统: 文件系统不是一个扇区一个扇区的来读数据,太慢了,所以 ...

  3. 解决HDFS小文件带来的计算问题

    hive优化 一.小文件简述 1.1. HDFS上什么是小文件? HDFS存储文件时的最小单元叫做Block,Hadoop1.x时期Block大小为64MB,Hadoop2.x时期Block大小为12 ...

  4. HDFS 小文件处理——应用程序实现

    在真实环境中,处理日志的时候,会有很多小的碎文件,但是文件总量又是很大.普通的应用程序用来处理已经很麻烦了,或者说处理不了,这个时候需要对小文件进行一些特殊的处理——合并. 在这通过编写java应用程 ...

  5. python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名。

    python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名. 使用for循环即可实现: for name in range(1,11): desktop_path='C: ...

  6. hadoop学习;大数据集在HDFS中存为单个文件;安装linux下eclipse出错解决;查看.class文件插件

    sudo apt-get install eclipse 安装后打开eclipse,提示出错 An error has occurred. See the log file /home/pengeor ...

  7. Hadoop HDFS分布式文件系统设计要点与架构

      Hadoop HDFS分布式文件系统设计要点与架构     Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...

  8. hadoop 提高hdfs删文件效率----hadoop删除文件流程解析

    前言 这段时间在用hdfs,由于要处理的文件比较多,要及时产出旧文件,但是发现hdfs的blocks数一直在上涨,经分析是hdfs写入的速度较快,而block回收较慢,所以分心了一下hadoop删文件 ...

  9. 【Hadoop】HDFS - 创建文件流程详解

    1.本文目的 通过解析客户端创建文件流程,认知hadoop的HDFS系统的一些功能和概念. 2.主要概念 2.1 NameNode(NN): HDFS系统核心组件,负责分布式文件系统的名字空间管理.I ...

随机推荐

  1. 解决WordPress中字符转义的问题

    wordpress中输入两个"--"的时候会识别成一个横杠,如果此时的文章中有代码在,那么其他人在复制粘贴的时候就没法使用,于是乎我寻找了三种有效的方法解决此问题! WordPre ...

  2. 洛谷——P1785 漂亮的绝杀

    P1785 漂亮的绝杀 题目背景 话说absi2011的企鹅在和斗神塔第60层的Boss战斗 不好,这局要输了,企鹅还剩4血了Boss还有392呢,哇,漂亮——红缨枪连击,280,343(暴击),绝杀 ...

  3. EOJ Monthly 2018.7

    准备继续大学acm啦 又要开始愉快的码码码啦 第一次在华东师大OJ上面做题 看来EOJ上的积分体质是假的,我怎么一把上红??? A.数三角形 神tm的防AK题放在A,出题人很不友好啊... 先写了个暴 ...

  4. Java中获取当前时间并格式化

    主要有两种方式,其中使用Date比较好控制,代码如下: //使用Calendar Calendar now = Calendar.getInstance(); System.out.println(& ...

  5. Beginning Auto Layout Tutorial in iOS 7: Part 2

    Auto Layout to the rescue! 接下来就看看如何使用Auto Layout来实现这个效果. 首先移除viewWillLayoutSubviews方法,选择Main.storybo ...

  6. Centos下添加用户组

    近日,重新整理了下开发环境,重装了,nginx,但是这个时候却是报错了,报错信息如下: [root@hserver1 php-7.0.5]# nginx -t nginx: [emerg] getpw ...

  7. 【hibernate】hibernate不同版本的命名策略

    ===================================================hibernate 4命名策略如下================================ ...

  8. php从数据库选取记录形成列表(首页调用)

    <ul class="e1"> <?php $querySel = "select ID,Tit,Addtime from news where DSh ...

  9. linux中nl用法

    linux 中nl 命令使用 nl :添加行号打印 -b:   指定行号指定的方式,主要有两种:    -b a : 表示不论是否为空行,都同样列出行号    -b t : 如果有空行,则不列出那一行 ...

  10. C#读取资源文件的两种方法及保存资源文件到本地

    方法1 GetManifestResourceStream   VB.NET中资源的名称为:项目默认命名空间.资源文件名 C#中则是:项目命名空间.资源文件所在文件夹名.资源文件名 例如:istr = ...