对地图进行切片,将产生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
分享到:
相关推荐
总的来说,将MapInfo Tab地图转换为WebGIS瓦片地图是一个涉及多个步骤的过程,需要对GIS、Web开发和服务器管理有一定的理解。MapInfo MapCut工具简化了这个过程,使得MapInfo地图能够无缝地融入到各种WebGIS平台中,...
【必应地图卫星影像瓦片】是WebGIS领域中一种常用的数据资源,它是由必应地图服务提供的全球卫星影像切片。这些切片按照特定的网格系统和层级结构组织,通常用于构建交互式地图应用,使得用户可以在网页上查看高清的...
MongoDB是一个分布式文件系统,数据存储于指定目录,地图的切图结果成为切片库中的一个切片集。MongoDB缓存支持在不同操作系统之间直接拷贝文件分发,例如Linux和Windows。 6. iServer分布式切图 iServer是一个...
瓦片图的使用通常涉及WebGIS(Web地理信息系统)技术,例如本压缩包中提到的baiduMap.js,这是一个用于实现百度地图功能的JavaScript库。在这个示例中,baiduMap.js可以帮助开发者在网页上展示地图瓦片,实现与百度...
在本方案中,“103244854MapView”可能是一个特定的WebGIS应用实例,它允许用户直接连接到地图数据库,在客户端浏览器上查看地图,无需安装额外的桌面应用程序。 WebGIS的核心特点包括: 1. **分布式架构**:...
而"webgis(fl)"可能是一个源代码文件夹,包含了WebGIS系统的具体实现,包括地图渲染、数据存储、用户界面等模块。FL通常表示Folder(文件夹),所以这可能是一个包含了多个C#文件和其他相关资源如CSS、JavaScript、...
"程序案例"意味着这是一个具体的实践项目,可作为学习和研究的实例。 【压缩包子文件的文件名称列表】"BingMapsClient"可能表示该项目使用了微软的Bing Maps服务。Bing Maps是Microsoft提供的一个在线地图服务平台...
2. **添加数据存储**:通过GeoServer管理界面导入数据集。 3. **配置数据图层**:设置图层名称、描述等信息。 4. **发布服务**:选择要发布的服务类型(如WMS、WFS等)。 5. **测试服务**:通过客户端工具或Web...
这个“美食”WebGIS项目旨在利用GIS技术,为用户提供一个发现、分享和探索美食的平台,结合地图功能,使用户能够轻松找到周边的美食信息。通过上述各个技术环节的协同工作,实现了一个功能完善的WebGIS应用。
3. **GIS服务**:WebGIS项目会集成GIS服务,如地图瓦片服务(Tile Service)提供地图背景,WMS(Web Map Service)用于动态生成地图图像,WFS(Web Feature Service)则用于交换地理空间数据。这些服务通常由GIS软件...
XML(Extensible Markup Language)是一种可扩展标记语言,用于标记数据、定义数据类型,是一种存储和传输数据的标准格式,广泛应用于WebGIS中的数据交换和文档描述。 #### Web应用系统三层结构 一个典型的Web应用...
4. 数据库管理:掌握GIS兼容的数据库系统,如PostGIS,进行空间数据存储和查询。 【综合实战】 1. 案例分析:通过实际项目案例,学习如何将前端GIS库与后端服务整合,实现地图数据的动态加载、查询过滤等功能。 2...
本资源“webGIS从基础到开发实践-案例”提供了一个从入门到实践的完整学习路径,涵盖了一系列的WebGIS开发案例。 1. **WebGIS基础概念** - **GIS(地理信息系统)**:一种能够存储、处理、分析和展示地理信息的...
OpenLayers 是一个强大的开源JavaScript库,用于在Web上创建交互式的地图应用,是WebGIS(Web地理信息系统)领域中的重要工具。本资源“WebGIS之OpenLayers全面解析源码.rar”提供了OpenLayers的详细解析及随书源码...
**WEBGIS开发实例教程概述**...实践是检验真理的唯一标准,动手开发一个WEBGIS项目,将是巩固理论知识的最好方式。在学习过程中,不断探索和实践,你将能够自如地驾驭WEBGIS技术,创建出富有创新性的地理信息系统应用。
WebGis例子是一个基于SharpMap地图引擎库的项目,展示了如何在Web环境中发布和操作SHP格式的地图数据。SharpMap是一款开源的.NET GIS框架,它为开发者提供了在Web应用程序中集成地理信息系统功能的能力。这个例子将...
MapXtreme项目WebGIS是这个技术的一个具体应用实例,提供了丰富的地图显示、空间分析以及数据管理功能。在这个项目中,用户可以通过Web浏览器访问和操作地理信息,实现地图浏览、查询、标注、打印等功能。 源码对于...
在WebGIS开发领域,GeoServer是一个非常重要的开源组件,它基于Java平台,实现了OGC(开放地理空间联盟)的标准,能够发布和管理地理空间数据。本资料包是针对基于GeoServer进行WebGIS开发的学习资源集合,包括文档...
在源代码中,我们可以找到以下几个关键知识点: 1. **地图服务**:WebGIS的核心是地图服务,通常包括地图瓦片服务(如TMS和WMS)和地图切片服务(如WMTS)。这些服务提供地理空间数据的可视化,源代码可能会包含...