免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: titansword2000
打印 上一主题 下一主题

天量数据如何处理? [复制链接]

论坛徽章:
0
41 [报告]
发表于 2012-02-28 11:06 |只看该作者
楼上果断没看明白39楼的问题……


举个例子,比如搞天气预报,需要知道全国各地的湿度、气压等数据,然后综合计算出一个趋势。

这个例子同样没有“计算目标”,每一个基站所在处、每一个卫星/气象气球的采样点都是目标;但这些采样点仍然有一个数目,比如可能全球每天拍摄了5万张照片,每张照片分辨率两千万像素;哪怕每像素只用了8个位,每张照片也是20M,5万张数据综合起来就是100万M,也就是1PB——这在现在,就是买磁盘存储都得几百万;至于内存,想都别想。

但这么恐怖的数据量,512K内存一样能算,慢点而已。当然用正常的、几G内存的机器肯定跑的更快更爽。

假设有1P内存,那么我们只要把图片逐张载入,按时间计算叠加就行了;512K内存呢,我们可以每次把地球上一个小小的方格子一个小时的相关数据载入,叠加,存储到外存;然后下一小时的数据,叠加,然后与外存数据累加。

相对于1P内存,512K内存的问题在于,小格子的边缘区域可能会被相邻数据影响/修正;这可以通过存储结果时抛弃边缘数据、或者某种逼近算法等方式解决。


你这个问题性质完全一样: 完全可以分区分时算出部分数据,然后累加起来。因为你自己都说了,数据相关性时间/空间上要临近,大致可以基站为单位。我估计有能盛下3个基站或者两个半基站40分钟的数据的内存就足够了:

A|B|C|D

如上,假设有基站ABCD,那么只要载入40分钟内的、A临近B的少量数据、D临近C的少量数据以及BC的全部数据,然后丢弃边缘数据(边缘数据包括空间和时间边缘),就足够计算出时空图上某个区域的、相当精确的结果了。然后只要把这些子结果拼凑起来,就可得到整幅时空图。这并不需要多少内存。


甚至于,偷懒的话,装个64位系统,弄个大硬盘,4G内存,用raid0弄个swap分区,算吧。系统会帮你管理虚拟内存。


话说当年512K内存对任何人都够了的时代,天气预报数据是怎么算的?

论坛徽章:
0
42 [报告]
发表于 2012-02-28 11:26 |只看该作者
我们不了解你的具体算法/原理。但可以肯定,数据必然可以区域化,也必然可以通过综合区域化的数据得到最终结果。

至不济,不能/不会通过算法改进,我们还可以利用现成的系统虚拟内存;甚至可以自己定制虚存管理算法——泛泛而言,如果你的计算真的“很复杂”,那么它必然是局部性的(也就是必然会连续多次访问局部内存);那么,“当前数据中心”有较大迁移后,利用DMA或仅仅是另外的线程来同步加载/淘汰“边缘数据”,效率可以非常高。甚至可能可以证明,在物理内存达到某个量级(也许4G足矣)时,和真的用了100G内存,计算速度几乎是一样的:这就是所谓“自己定制虚存管理算法”。

当然,以上只是一种解决海量数据+超大计算压力任务的普适方案;如果你对自己面对的问题有更深、更精确的了解,那么完全可以搞出更加高效的方案。

论坛徽章:
0
43 [报告]
发表于 2012-02-28 11:57 |只看该作者
非常感谢楼上的朋友给予的指教!!!

开始确实是准备一次性将所有数据读入内存,然后再进行计算,因为这样的效率是很高的,但由于数据量太大,远远超过内存而无法进行。在各位朋友的指教下,特别是楼上这位兄弟的帮助,决定采用分时、分区的办法。不过这种方法由于会重复多次读取数据,会明显降低计算效率;同时正是由于分时、分区计算,在形成的最后结果文件时,会有一定困难。

论坛徽章:
0
44 [报告]
发表于 2012-02-28 12:29 |只看该作者
hadoop,分布式系统。
大数据量叫海量数据,还有就是,这个数据量似乎不大。
不想改代码的话,你试试64位编译吧

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
45 [报告]
发表于 2012-02-28 12:50 |只看该作者
你这个帖子反映的问题在于:
1. 你不懂如何对这种领域问题提问, 应该有对基本的算法的描述(想要得到什么样的结果, 需要哪些输入数据). 一开始别管内存限制, 就假设内存是无限的.
2. 不熟悉把问题化整为零, 分别计算, 再汇总为最终结果的思路.


btw: 应该把后面补充的需求和解答追加到主贴上.(不要覆盖原来的问题, 以方便理解)

论坛徽章:
0
46 [报告]
发表于 2012-02-28 13:36 |只看该作者
pprpg 发表于 2012-02-28 12:50
2. 不熟悉把问题化整为零, 分别计算, 再汇总为最终结果的思路.


是的。

前面有说用hadoop的,其实hadoop本身就是一套标准化的map-reduce框架,map就对应“化整为零”,reduce对应“汇总”。

所以,如果没有这个“在小内存计算小区域”的分析能力,别说几台/几十台机器的hadoop,抢到google的bigtable集群也无济于事。因为map/reduce还是必须你自己去设计、去写。

论坛徽章:
0
47 [报告]
发表于 2012-02-28 17:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
48 [报告]
发表于 2012-03-21 14:28 |只看该作者
狗蛋 发表于 2012-02-28 11:26
我们不了解你的具体算法/原理。但可以肯定,数据必然可以区域化,也必然可以通过综合区域化的数据得到最终结 ...



学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP