官术网_书友最值得收藏!

1.1 Spark SQL的前世今生

1.Spark的誕生

相信大家都聽說過MapReduce這個框架,MapReduce是對分布式計算的一種抽象。程序員對map方法和reduce方法進行簡單的編寫就能迅速地構建出并行化的程序,而不用擔心工作在集群上的分布和集群當中數據的容錯,這就大大地降低了程序的編寫和部署難度。

遺憾的是,MapReduce這個框架缺少了對分布式內存利用的抽象,這就導致了在不同的計算任務間(比如說兩個MapReduce工作之間)對數據重用的時候只能采用將數據寫回到硬盤中的方法。而計算機將數據寫回到磁盤的這個過程耗時是很長的。如今,許多機器學習的算法都需要對數據進行重用,并且這些算法中都包含著大量的迭代計算,比如說PageRank、K-means等算法。如果使用MapReduce來實現這些算法,那么在執行的時候,將會有大量的時間被消耗在I/O上面。針對這個問題,伯克利大學提出了RDDs(彈性分布式數據集RDDs是一個具有容錯性和并行性的數據結構,它可以讓我們將中間結果持久化到內存中)的思想,RDDs提供了對內存的抽象,然后伯克利大學根據RDDs的思想設計出了一個系統,Spark就這樣誕生了。

2.從Shark到Spark SQL

Spark誕生之后,人們開始使用Spark,并且喜歡上了Spark。漸漸的,使用Spark的人越來越多。突然有一天,一部分人產生了一個大膽的想法:Hadoop上面有Hive,Hive能把SQL轉成MapReduce作業,這多么方便啊!Spark這么好用的系統卻沒有配備類似Hive這樣的工具,要不我們也造一個這樣的工具吧!于是Shark被提了出來,Shark將SQL語句轉成RDD執行。這就仿照了Hadoop生態圈,做出了一個Spark版本的“Hive”。做出這個工具之后人們十分開心,因為他們終于也能愉快地使用SQL對數據進行查詢分析了,可以大大地提高程序的編寫效率。圖1-1所示是Shark的架構示意圖,來自https://amplab.cs.berkeley.edu/wp-content/uploads/2012/03/mod482-xin1.pdf。

圖1-1

隨著越來越多的人使用Shark和其版本的更新,人們發現Shark具有一定的局限性。細心的小伙伴會發現圖1-1中Shark的框架使用了HiveQL Parser這一模塊。這樣一來Shark對Hive有了依賴,導致Shark添加一些新的功能或者修改一些東西時特別不方便。這樣Shark的發展受到了嚴重的限制。

由于Shark這樣的一些弊端,在2014年左右人們決定終止Shark這個項目并且將精力轉移到Spark SQL的研發當中去。之后一個新的SQL引擎——Spark SQL就誕生了。

主站蜘蛛池模板: 礼泉县| 濮阳市| 历史| 卢氏县| 通渭县| 靖宇县| 河间市| 当雄县| 兴山县| 广饶县| 武乡县| 上蔡县| 梅河口市| 科技| 溆浦县| 五寨县| 阳新县| 志丹县| 木兰县| 招远市| 宣汉县| 长白| 屯留县| 济南市| 中方县| 小金县| 大悟县| 稻城县| 册亨县| 华蓥市| 奉节县| 岑巩县| 景洪市| 昌宁县| 鹤山市| 九龙坡区| 筠连县| 双牌县| 乐平市| 黑河市| 乌拉特前旗|