[SQL]spark sql 直接查詢hive或impala中的數(shù)據(jù)


SparkSQL結(jié)合SparkStreaming,使用SQL完成實(shí)時(shí)計(jì)算中的數(shù)據(jù)統(tǒng)計(jì) – lxw的大數(shù)據(jù)田地
http://lxw1234.com/archives/2015/11/552.htm

Flume+Kafka+SparkStreaming已經(jīng)發(fā)展為一個(gè)比較成熟的實(shí)時(shí)日志收集與計(jì)算架構(gòu),利用Kafka,即可以支持將用于離線分析的數(shù)據(jù)流到HDFS,又可以同時(shí)支撐多個(gè)消費(fèi)者實(shí)時(shí)消費(fèi)數(shù)據(jù),包括SparkStreaming。然而,在SparkStreaming程序中如果有復(fù)雜業(yè)務(wù)邏輯的統(tǒng)計(jì),使用scala代碼實(shí)現(xiàn)起來比較困難,也不易于別人理解。但如果在SparkSteaming中也使用SQL來做統(tǒng)計(jì)分析,是不是就簡(jiǎn)單的多呢?

本文介紹將SparkSQL與SparkStreaming結(jié)合起來,使用SQL完成實(shí)時(shí)的日志數(shù)據(jù)統(tǒng)計(jì)。
SparkStreaming程序以yarn-cluster模式運(yùn)行在YARN上,不單獨(dú)部署Spark集群。


簡(jiǎn)單之美 | Spark-1.3.1與Hive整合實(shí)現(xiàn)查詢分析
http://shiyanjun.cn/archives/1113.html
總結(jié)

根據(jù)上面我們實(shí)踐的整合Spark+Hive,在執(zhí)行復(fù)雜統(tǒng)計(jì)分析時(shí),完全可以使用Spark SQL來替代Hive,至少會(huì)提高幾倍的速度,對(duì)于一些基于Hive統(tǒng)計(jì)應(yīng)用,可能每天晚上要執(zhí)行6個(gè)小時(shí)以上的統(tǒng)計(jì)計(jì)算,導(dǎo)致第二天結(jié)果數(shù)據(jù)都無法出來,如果統(tǒng)計(jì)需求再次增加,可能時(shí)間還會(huì)更長(zhǎng)。除了對(duì)Hive查詢語句進(jìn)行優(yōu)化之外,應(yīng)該說優(yōu)化空間不大,所以這個(gè)時(shí)候可以考慮使用Spark平臺(tái)來實(shí)現(xiàn)統(tǒng)計(jì)分析,而且,Spark集群可以線性擴(kuò)展,對(duì)于一些調(diào)優(yōu)也更容易一些。

這樣我們可以直接在Spark SQL Shell上輸入Hive查詢語句就可以執(zhí)行查詢分析計(jì)算。


解讀2015之Spark篇:新生態(tài)系統(tǒng)的形成
http://www.infoq.com/cn/articles/2015-Review-Spark
DataFrame和SQL API

Spark從API的角度看,可以分為兩大類:

類似于Python的Pandas和R語言的DataFrame API,用戶可以使用Scala/Java/Python/R四種語言調(diào)用這個(gè)API處理數(shù)據(jù);
SQL語言API。又分為兩種:一個(gè)是普通的Spark SQL,一種是Hive SQL。
雖然API不同,但是背后解析出來的算子是一樣的,DataFrame的各種算子其實(shí)就是各種SQL的語法。Spark在SQL語法的支持越來越豐富的同時(shí)內(nèi)置的SQL函數(shù)得到了很大的增強(qiáng),目前已經(jīng)有超過100個(gè)這樣的常用函數(shù)(string, math, date, time, type conversion, condition),可以說最常見的SQL內(nèi)置函數(shù)都有了。

作為一個(gè)類SQL的分析工具,聚合函數(shù)是非常核心的。Spark 1.5和1.6在聚合函數(shù)上都有很大改進(jìn):實(shí)現(xiàn)了一個(gè)新的聚合函數(shù)接口,支持了一些build-in的聚合函數(shù)(例如max/min/count/sum/avg/first/corr/stddev/variance/skewness/kurtosis以及一些窗口函數(shù)等),同時(shí)基于新接口實(shí)現(xiàn)了相應(yīng)的UDAF接口。新的聚合函數(shù)接口是AggregateFunction,有兩種具體的實(shí)現(xiàn):ImperativeAggregate和DeclarativeAggregate。ImperativeAggregate類型的聚合操作就是通過用戶定義三個(gè)動(dòng)作 initialize/update/merge的邏輯來實(shí)現(xiàn)聚合的;而DeclarativeAggregate則是通過指定initialValues/updateExpressions/mergeExpressions這三個(gè)表達(dá)式然后通過代碼生成的方式來做聚合的操作。這兩種方式各有利弊,一般來說代碼生成效率更高,但是像variance/stddev/skewness/kurtosis這樣的多個(gè)表達(dá)式需要依賴同一個(gè)中間表達(dá)式的場(chǎng)景下,代碼生成的執(zhí)行路徑由于不能共享中間的結(jié)果,從而導(dǎo)致其不如ImperativeAggregate效率更高,所以在Spark內(nèi)部的實(shí)現(xiàn)中這幾個(gè)聚合函數(shù)也是通過ImperativeAggregate來實(shí)現(xiàn)的。


spark sql根本使用方法介紹 - SQL
http://www.myexception.cn/sql/2043136.html
通過spark sql 直接查詢hive或impala中的數(shù)據(jù)


spark SQL和hive到底什么關(guān)系_百度知道
http://zhidao.baidu.com/link?url=49EH5W3f2KKDqhcnuB2CtP3hN03KJMIpDVMUYHl564UiB9uix5l7zZ4KeX1i2hB8CGwnoHkbokNk2E-QBLpD5XSghr2pdTepFby6tgQXgjK
歷史上存在的原理,以前都是使用hive來構(gòu)建數(shù)據(jù)倉庫,所以存在大量對(duì)hive所管理的數(shù)據(jù)查詢的需求。而hive、shark、sparlSQL都可以進(jìn)行hive的數(shù)據(jù)查詢。shark是使用了hive的sql語法解析器和優(yōu)化器,修改了執(zhí)行器,使之物理執(zhí)行過程是跑在spark上;而sparkSQL是使用了自身的語法解析器、優(yōu)化器和執(zhí)行器,同時(shí)sparkSQL還擴(kuò)展了接口,不單單支持hive數(shù)據(jù)的查詢,可以進(jìn)行多種數(shù)據(jù)源的數(shù)據(jù)查詢。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容