hadoop 小文件 挂载 小文件对NameNode的内存消耗 HDFS小文件解决方案 客户端 自身机制 HDFS把块默认复制3次至3个不同节点。
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个不同节点。的更多相关文章
- 有关Java内存溢出及内存消耗的小知识
内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...
- 合并hive/hdfs小文件
磁盘: heads/sectors/cylinders,分别就是磁头/扇区/柱面,每个扇区512byte(现在新的硬盘每个扇区有4K) 文件系统: 文件系统不是一个扇区一个扇区的来读数据,太慢了,所以 ...
- 解决HDFS小文件带来的计算问题
hive优化 一.小文件简述 1.1. HDFS上什么是小文件? HDFS存储文件时的最小单元叫做Block,Hadoop1.x时期Block大小为64MB,Hadoop2.x时期Block大小为12 ...
- HDFS 小文件处理——应用程序实现
在真实环境中,处理日志的时候,会有很多小的碎文件,但是文件总量又是很大.普通的应用程序用来处理已经很麻烦了,或者说处理不了,这个时候需要对小文件进行一些特殊的处理——合并. 在这通过编写java应用程 ...
- python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名。
python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名. 使用for循环即可实现: for name in range(1,11): desktop_path='C: ...
- hadoop学习;大数据集在HDFS中存为单个文件;安装linux下eclipse出错解决;查看.class文件插件
sudo apt-get install eclipse 安装后打开eclipse,提示出错 An error has occurred. See the log file /home/pengeor ...
- Hadoop HDFS分布式文件系统设计要点与架构
Hadoop HDFS分布式文件系统设计要点与架构 Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...
- hadoop 提高hdfs删文件效率----hadoop删除文件流程解析
前言 这段时间在用hdfs,由于要处理的文件比较多,要及时产出旧文件,但是发现hdfs的blocks数一直在上涨,经分析是hdfs写入的速度较快,而block回收较慢,所以分心了一下hadoop删文件 ...
- 【Hadoop】HDFS - 创建文件流程详解
1.本文目的 通过解析客户端创建文件流程,认知hadoop的HDFS系统的一些功能和概念. 2.主要概念 2.1 NameNode(NN): HDFS系统核心组件,负责分布式文件系统的名字空间管理.I ...
随机推荐
- ActiveMQ 使用spring模板 发布消息过程分析
convertAndSend()方法中获得dstination,即发送信息的目的地dstination可以在spring的配置文件中指定自定义的,在JmsTemplate类中,pubSubDomain ...
- vs2010下如何调试带输入参数的程序
当main函数的输入参数为空时,我们可以很方便的通过设置断点,单步运行的方法调试,可是如果需要调试的是有输入参数的程序该怎么办呢?最终还是让我找到了: 英文版:Project -> Proper ...
- Mac outlook设置自动回复
outlook是公司必不可少的软件, 在mac下开发,当然用的是mac版的outlook,今天介绍一下如何设置mac下outlook的自动回复. 有两种方式的帐号,一种是Exchange accoun ...
- CSS 属性选择器的深入挖掘
CSS 属性选择器,可以通过已经存在的属性名或属性值匹配元素. 属性选择器是在 CSS2 中引入的并且在 CSS3 中得到了很好拓展.本文将会比较全面的介绍属性选择器,尽可能的去挖掘这个选择器在不同场 ...
- SQL Server数据库连接,Web.config的正确配置 [转]
http://database.51cto.com/art/201007/213289.htm 此文章主要介绍的是Web.config正确配置SQL Server数据库连接的实际擦步骤,在图5-6中, ...
- Solr Cloud的搭建使用
Solr的安装下载http://archive.apache.org/dist/lucene/solr/6.4.0/或者直接去官网下载最新版本网页指导 https://cwiki.apache.org ...
- Linux学习之十八-sudo分权管理
sudo分权管理 1.为什么需要sudo? 当我的主机是多人共管的环境时,如果大家都使用 su 来切换成为 root 的身份,那么就得每个人知道 root 的密码,这样密码太多人知道可能会流出去,很不 ...
- hdu1595 find the longest of the shortest(Dijkstra)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1595 find the longest of the shortest Time Limit: 100 ...
- excel导出 jxl.jar包
导入jxl.jar包, 代码如下: package com.gree; import java.io.IOException; import java.io.OutputStream; import ...
- 数据结构基础-Hash Table详解(转)
理解Hash 哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping). 映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素.但反过来,集合B中的一个元素可能 ...