我有20个整数,一把全装进内存,调用个sort,完事了。
我有2GB那么多的整数,一把全装进内存……恩恩,如果机器不那么破,勉强也完事吧。
我有20GB那么多的整数,对,往你家PC里多插几条8GB的内存条试试?
那我现在有200GB那么多的整数……看你丫的怎么装内存,哈哈哈哈哈哈!
吓尿了吧!?写外排序?你写啊!It's ONLY the beginning!很多人可是连内存里的快排都写不出的哦~
200GB算个啥大数据啊,苍老师的合集都不止咳咳……
OK,显然我们已经意识到1台机器装不下了。咋办?多找几台机器呗。多找几台机器意味着啥啊?分布式计算懂不懂,连分布式都不懂说个毛大数据啊!!!
好,现在有200GB的整数,排个序吧……呃,给你10台机器吧。
- 这200GB的整数,如何分配?
- 这10台机器之间如何通讯?没错,我不止坑了你去写外排序,我还得坑你去玩网络编程。
- 假设每一台机器上的数据都已经完全排好,如何多快好省地把各自排序好的结果merge在一起?
- 如何设计有效的merge逻辑减少10台机器之间的网络IO。
- 别以为10台机器不需要维护,万一在排序的时候其中一台机器挂了,怎么办?具体包括但不限于:他在挂之前有响应其他机器发给他的request吗?他在挂之前自身的任务完成了多少了?假设这台机器在挂的时候正在跟隔壁的机器互相传输数据肿么办?
- 谁去监听这10台机器的健康?或者是其他机器怎么知道某台机器挂了?如果是连接超时,怎么知道是网络阻塞还是目标机真的挂了?
- 如果某台机器真的挂了无法恢复,又或者由于隔壁的黄大牛要打魔兽了劫走了一台(集群升级,集群中的节点被临时撤走的事常有哦),如何把那台机器上那20GB的数据分给其余的9台?
如果数据不是200GB,而是2TB,2PB……
- 这么大的数据,这么大的集群,同一时间挂掉的机器数量可能会很多。如果这个集群用来做存储(例如百度云),怎么保证用户的数据不丢失?
- 如果这个集群用来做离线计算,怎么设计调度程序提高每台机器的资源利用率,减少集群内的网络IO和尽可能地提高每台机器的响应速度?
- 我希望集群是可扩展的,最好架构能支持我只要简单地增加机器数目就能扩充集群的计算和存储能力,这个架构要怎么设计?
建议题主有空去了解下mapreduce,hadoop,yarn,mpi,vfs等等内容。
“传统行业的数据,收集和分析慢,互联网时代特别是移动互联网时代,数据收集和分析都变得更快更智能,仅此而已吧。”
只所以题主会这么说,是因为题主作为局外人,能看到的就只有这些表面的最直观的现象。一句简单的“数据分析变得智能了更快了”的背后,实际上是无数人付出的勤奋、创造力、勇敢还有艰辛!
马云爸爸说,未来是DT时代,大数据是最重要的资产。
未来三至五年,中国需要180万数据人才,但目前只有约30万人。到2020年,企业基于大数据计算分析存储、数据挖掘、数据分析等数据产业的发展,我国需要更多的数据人才。