对地图进行切片,将产生TB容量级别的数据,文件数量超过千万个,如不进行优化存储,管理起来将非常困难。arcgis server10.0已使用package打包,geostar采用将文件存于数据库中。用于解决此问题。在网上看到Hadoop云盘系统的文章,也应该可以的解决此问题。
以下是转贴。
【转】http://developer.51cto.com/art/201303/384166.htm
基于Hadoop云盘系统3:小文件存储优化
2013-03-11 14:42 张子良 博客园 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!
首先明确概念,这里的小文件是指小于HDFS系统Block大小的文件(默认64M),如果使用HDFS存储大量的小文件,将会是一场灾难。
AD:2013大数据全球技术峰会课程PPT下载
一、概述
首先明确概念,这里的小文件是指小于HDFS系统Block大小的文件(默认64M),如果使用HDFS存储大量的小文件,将会是一场灾难,这取决于HDFS的实现机制和框架结构,每一个存储在HDFS中的文件、目录和块映射为一个对象存储在NameNode服务器内存中,通常占用150个字节。如果有1千万个文件,就需要消耗大约3G的内存空间。如果是10亿个文件呢,简直不可想象。这里需要特别说明的是,每一个小于Block大小的文件,存储是实际占用的存储空间仍然是实际的文件大小,而不是整个block大小。
为解决小文件的存储Hadoop自身提供了两种机制来解决相关的问题,包括HAR和SequeueFile,这两种方式在某些方面解决了本层面的问题,单仍然存在着各自的不足。下文讲详细说明。
二、Hadoop HAR
Hadoop Archives (HAR files) ,这个特性从Hadoop 0.18.0版本就已经引入了,他可以将众多小文件打包成一个大文件进行存储,并且打包后原来的文件仍然可以通过Map-reduce进行操作,打包后的文件由索引和存储两大部分组成,索引部分记录了原有的目录结构和文件状态。其原理如下图所示:
缺点:
1.HAR 方式虽然能够实现NameNode内存空间的优化,但是他是一个人工干预的过程,同时他既不能够支持自动删除原小文件,也不支持追加操作,当有新文件进来以后,需要重新打包。
2.HAR files一旦创建就不能修改,要做增加和修改文件必须重新打包。事实上,这对那些写后便不能改的文件来说不是问题,因为它们可以定期成批归档,比如每日或每周。
3.HAR files目前还不支持文档压缩。
三、SequeuesFile
Sequence file由一系列的二进制key/value组成,如果key为小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。Hadoop-0.21.0版本开始中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter类进行写,读和排序操作。该方案对于小文件的存取都比较自由,不限制用户和文件的多少,支持Append追加写入,支持三级文档压缩(不压缩、文件级、块级别)。其存储结构如下图所示:
示例代码如下所示:
private static void writeTest(FileSystem fs, int count, int seed, Path file,
CompressionType compressionType, CompressionCodec codec)
throws IOException {
fs.delete(file, true);
LOG.info("creating " + count + " records with " + compressionType +
" compression");
//指明压缩方式
SequenceFile.Writer writer =
SequenceFile.createWriter(fs, conf, file,
RandomDatum.class, RandomDatum.class, compressionType, codec);
RandomDatum.Generator generator = new RandomDatum.Generator(seed);
for (int i = 0; i < count; i++) {
generator.next();
//keyh
RandomDatum key = generator.getKey();
//value
RandomDatum value = generator.getValue();
/追加写入
writer.append(key, value);
}
writer.close();
}
缺点:
目前为止只发现其Java版本API支持,未在其他开发接口中发现相关版本的实现,尤其是LibHDFS和thrift接口中,可能真是C++阵营狂热支持者的一个悲剧。
四、Hbase
如果你需要处理大量的小文件,并且依赖于特定的访问模式,可以采用其他的方式,比如Hbase。Hbase以MapFiles存储文件,并支持Map/Reduce格式流数据分析。对于大量小文件的处理,也不失为一种好的选择。
原文链接:http://www.cnblogs.com/hadoopdev/archive/2013/03/08/2950121.html
分享到:
相关推荐
一种WebGIS瓦片数据更新方法研究.pdf
WebGIS中瓦片地图关键技术研究
WebGIS多级瓦片数据更新机制研究
类似Google Map的瓦片式的WebGIS客户端实现。 页面上调用的代码如下,Map.js文件中有详细的js注释 function buildMap(){ $("map").style.width = 800; $("map").style.height = 600; Marker.LARGE = new Array...
Ppt ,简要介绍了webgis的空间数据存储方式。
众所周知,WebGIS 地图一般包括矢量数据、瓦片数据、影像数据等,不管是哪种类型 的地图数据,最终都将在 Web 客户端被处理成图片的形式显示,而唯一的不同是这些数据 在显示处理的手法上有所不同,因此各自适用的...
基于WebGIS的网络化数据采集方法.pdf
WebGIS解决方案及开发方法.pdf
这里是我们map加载的层上面的中国城市数据,具体到城市区县,再往下就没有了,这个足以满足你的需求,你也可以手动增加数据
科技管理数据科技管理数据挖掘和基于WebGIS的展示挖掘和基于WebGIS的展示
WEBGIS原理与方法 WEBGIS原理与方法
可以切割tab格式的地图,需要安装mapx,生成的是webgis使用的瓦片地图。
一种面向三维WebGIS的空间数据加载优化方法.docx
一种基于WebGIS的网络地图数据采集方法研究
瓦片技术的出现改变了传统WebGIS的服务架构,提高了地图数据请求响应的效率。针对多种地图 投影类型或地理坐标的矢量数据在瓦片划分过程中遇到的问题,本文基于OGR地理数据模型,设计了多投 影数据转换Python模块,...
轻量级瓦片式WebGIS,甚至不需要GIS服务器,简单,完全javascript构成
成都领君科技webgis栅格平台瓦片裁剪及发布演示avi【2012】
webgis离线解决方案,请联系作者免费分享给大家。
针对现有数据结构无法支持WebGIS中多维空间数据的多尺度表达,提出了一种改进的数据结构:a)主树由金字塔层级结构规则分割的区域四叉树索引结构变形而来;b)具有支持多维数据的重叠子树结构;c)利用树的深度反映空间...
网络地理信息系统(WebGIS)是地理信息系统与互联网技术相结合的产物,是地理信息系统发展的一个重要方向。WebGIS为地理数据的发布和共享提供了方便,然而对于数据互操作方面尚待进一步解决。可扩展标记语言XML...