http://blog.csdn.net/wtq1993/article/details/52435563
http://blog.csdn.net/yeruby/article/details/51448188
hive on spark VS SparkSQL VS hive on tez
前一篇已經弄好了SparkSQL,SparkSQL也有thriftserver服務,這里說說為啥還選擇搞hive-on-spark:
- SparkSQL-Thriftserver所有結果全部內存,快是快,但是不能滿足查詢大量數據的需求。如果查詢幾千萬的數據,SparkSQL是搞不定的。而hive-on-spark除了計算用spark其他邏輯都是hive的,返回的結果會先寫hdfs,再慢慢返回給客戶端。
- SparkSQL-Thriftserver代碼的是全部用scala重寫的,和已有hive業務不一定兼容!!
- SparkSQL-Thriftserver有一個最大的優勢就是整個server相當於hive-on-spark的一個session,網頁監控漂亮清晰。而hive-on-spark不同的session那就相當於不同的application!!(2016-4-13 20:57:23)用了動態分配,沒感覺SparkSQLThriftserver快很多。
- SparkSQL由於基於內存,再一些調度方面做了優化。如[limit]: hive是死算,sparksql遞增數據量的一次次的試。sparksql可以這么做的,畢竟算好的數據在內存里面放着。
hive和sparksql的理念不同,hive的存儲是HDFS,而sparksql只是把HDFS作為持久化工具,它的數據基本都放內存。
查看hive的日志,可以看到返回結果后有寫HDFS的動作體現,會有類似日志:
2016-03-28 19:39:25,687 INFO exec.FileSinkOperator (Utilities.java:mvFileToFinalPath(1882)) - Moving tmp dir: hdfs://zfcluster/hive/scratchdir/hadoop/de2b263e-9601-4df7-bc38-ba932ae83f42/hive_2016-03-28_19-38-08_834_7914607982986605890-1/-mr-10000/.hive-staging_hive_2016-03-28_19-38-08_834_7914607982986605890-1/_tmp.-ext-10001 to: hdfs://zfcluster/hive/scratchdir/hadoop/de2b263e-9601-4df7-bc38-ba932ae83f42/hive_2016-03-28_19-38-08_834_7914607982986605890-1/-mr-10000/.hive-staging_hive_2016-03-28_19-38-08_834_7914607982986605890-1/-ext-10001
- tez的優勢spark都有,並且tez其實緩沖優勢並不大。而spark的緩沖效果更明顯,而且可以快速返回。例如:你查3萬條數據,tez是要全部查詢然后再返回的,而sparksql取到3萬條其他就不算了(效果看起來是這樣子,具體沒看源碼實現;md hive-on-spark還是會全部跑)。
- tez任務緩沖不能共享,spark更加細化,可以有process級別緩沖(就是用上次計算過的結果,加載過的緩沖)!例如,你查數據記錄同時又要返回count,這時有些操作是prcess_local級別的,這個tez是不能比的!
- spark的日志UI看起來更便捷,呵呵
單就從用的角度,spark全面取勝啊。