因为python库并不是为分布式设计的,实际业务中数据量并不是一部高性能计算机就能handle得来的。下面听我细细道来。
打个比喻:
有个年轻人,他参加了蓝翔烹饪学校的课程,立志成为一名厨师。
毕业后,他开了一家小餐馆。在他看来,他每天的任务就是早上把食材准备好,放在厨房的一个冰箱里,他开工时,按照客户的点单,从冰箱取出相应食材进行烹饪。
这种日子也挺惬意,厨师度过了开店前六个月安稳的小日子。
有一天,顾客A对他说:你的菜很棒,我想请你为我们工厂提供工作餐,你看可以吗?
厨师立马就答应下来了。但是他坐下来一想,可能要准备很多食材,现在的冰箱恐怕是放不下了。
有两个选择:1.买多几个冰箱 2.换更大的冰箱。
厨师选择了1。他认为,现在有顾客在这里大量订餐,以后也会有顾客大量订餐,生意一定是蒸蒸日上的。如果现在买了大冰箱,可能过两个月,又得买更大的。
买了冰箱,食材的放置就要有一定的规划了。这样会使得工作效率最大化。例如肉类放冰箱A,蔬菜放冰箱B,这样就不用为了准备一个菜,要去翻来覆去的把每个冰箱找一次。
当然有了冰箱,他一个人也不够人手来准备这么多菜。他请了几个伙计,一个负责做水煮鱼、一个负责做沙拉。
这个餐厅倍受好评。在当地三个镇都有订单。为了减少来回成本,这个厨师决定在三个镇都开分店,按照统一的标准进行管理。当某地食材不足时,可以从其他地区补充。
就这样,这个餐厅一直扩张,这位蓝翔毕业的厨师,终于在2019年最后一个月,实现了小康生活。
把上面文章用大数据的语言翻译下:
毕业后,他开了一家小餐馆。(一个数据节点,一个处理单元)
这种日子也挺惬意,厨师度过了开店前六个月安稳的小日子。(业务不多,数据量不大,一台服务器处理得来)
有两个选择:1.买多几个冰箱(买多几个服务器) 2.换更大的冰箱(更高性能服务器)。
厨师选择了1。(几个服务器搭建分布式数据系统,扩展业务只需添加新服务器)
他认为,现在有顾客在这里大量订餐,以后也会有顾客大量订餐,生意一定是蒸蒸日上的。如果现在买了大冰箱,可能过两个月,又得买更大的。(扩展数据系统只需要添加)
买了冰箱,食材的放置就要有一定的规划了。这样会使得工作效率最大化。例如肉类放冰箱A,蔬菜放冰箱B,这样就不用为了准备一个菜,要去翻来覆去的把每个冰箱找一次。(数据的indexing)
当然有了冰箱,他一个人也不够人手来准备这么多菜。他请了几个伙计(worker node),一个负责做水煮鱼(task1),红烧牛肉(task2)、一个负责做沙拉(task3),意面(task4)。
这个餐厅倍受好评。在当地三个镇的工厂都来订餐。为了减少来回成本,这个厨师决定在三个镇都开分店,按照统一的标准进行管理(cluster manager)。当某地食材不足时,可以从其他地区补充(data shuffle)。
就这样,这个餐厅一直扩张,这位蓝翔毕业的厨师,成为了镇上的小康之家(建立了稳定的大数据系统),在2019年最后一个月,完全脱贫。
为了再加深理解,我在Spark结构图上面标注了餐厅的一些「术语」。
看完这个图,你对我们蓝翔的厨师专业,啊不,你对spark还有什么想了解的吗。