* SparkSQL基礎(chǔ)
起源:
1邓厕、在三四年前,Hive可以說是SQL on Hadoop的唯一選擇,負(fù)責(zé)將SQL編譯成可擴(kuò)展的MapReduce作業(yè)宠哄。鑒于Hive的性能以及與Spark的兼容垫蛆,Shark項(xiàng)目由此而生禽最。
2、Shark即Hive on Spark袱饭,本質(zhì)上是通過Hive的HQL解析川无,把HQL翻譯成Spark上的RDD操作,然后通過Hive的metadata獲取數(shù)據(jù)庫(kù)里的表信息虑乖,實(shí)際HDFS上的數(shù)據(jù)和文件懦趋,會(huì)由Shark獲取并放到Spark上運(yùn)算。
3疹味、Shark的最大特性就是快和與Hive的完全兼容仅叫,且可以在shell模式下使用rdd2sql()這樣的API,把HQL得到的結(jié)果集糙捺,繼續(xù)在scala環(huán)境下運(yùn)算诫咱,支持自己編寫簡(jiǎn)單的機(jī)器學(xué)習(xí)或簡(jiǎn)單分析處理函數(shù),對(duì)HQL結(jié)果進(jìn)一步分析計(jì)算洪灯。
歷史:
1坎缭、在2014年7月1日的Spark Summit上,Databricks宣布終止對(duì)Shark的開發(fā),將重點(diǎn)放到Spark SQL上掏呼。
2坏快、Databricks表示,Spark SQL將涵蓋Shark的所有特性哄尔,用戶可以從Shark 0.9進(jìn)行無縫的升級(jí)假消。
3、Databricks推廣的Shark相關(guān)項(xiàng)目一共有兩個(gè)岭接,分別是Spark SQL和新的Hive on Spark(HIVE-7292)
4富拗、Databricks表示,Shark更多是對(duì)Hive的改造鸣戴,替換了Hive的物理執(zhí)行引擎啃沪,因此會(huì)有一個(gè)很快的速度。然而窄锅,不容忽視的是创千,Shark繼承了大量的Hive代碼,因此給優(yōu)化和維護(hù)帶來了大量的麻煩入偷。
SparkSQL與HIVE集成
1追驴、拷貝hive-site.xml到spark-conf目錄下
2、$ mkdir externaljars
3疏之、拷貝hive下面的mysql驅(qū)動(dòng)到spark的externaljars目錄下
4殿雪、啟動(dòng)Spark-Shell
$ bin/spark-shell --master local[2] --jars externaljars/mysql-connector-java-5.1.27-bin.jar
在SparkSQL中讀取表的兩種方式:
方式一:
直接使用sqlContext對(duì)象執(zhí)行sql語句,返回一個(gè)DataFrame對(duì)象锋爪,然后我們就可以show一下表中的內(nèi)容了
scala> val df = sqlContext.sql("select * from track_log")
scala> df.show
方式二:
使用DSL(Domain specific language)語句
scala> val df = sqlContext.table("track_log")
scala> df.select("id", "sessionid").show
測(cè)試練習(xí):
案例中涉及到的數(shù)據(jù)在之前的Hive章節(jié)中已經(jīng)有所介紹丙曙,數(shù)據(jù)也提供了傳送門下載地址,不再贅述其骄,內(nèi)容如下:
案例一:嘗試使用sqlContext查詢一張表亏镰,將部門編號(hào)相同的信息統(tǒng)一join到一起。
案例二:嘗試使用spark-sql運(yùn)行如下命令
Step1拯爽、啟動(dòng)spark-sql
$ bin/spark-sql
Step2索抓、將表直接緩存到內(nèi)存中,在4040端口即可查看緩存到的表數(shù)據(jù)占用內(nèi)存的大小毯炮,操作如下:
緩存表
spark-sql> cache table track_log
撤銷緩存的表
spark-sql>uncache table track_log
案例三:每個(gè)部門的工資按照降序排列
可以使用SparkSQL執(zhí)行如下代碼:
如果我們只想展示出每個(gè)部門前三名的工資逼肯,可以這樣操作:
當(dāng)然了,求個(gè)平均什么的否副,再正常不過了汉矿。
* 總結(jié)
只要你的SQL語句用得好崎坊,sparkCore理解的通透备禀,Hive玩的6,SparkSQL就會(huì)很簡(jiǎn)單。:)
IT全棧公眾號(hào):
QQ大數(shù)據(jù)技術(shù)交流群(廣告勿入):476966007
下一節(jié):SparkStreaming基礎(chǔ)