? hive on Spark是由Cloudera發起,由Intel、MapR等公司共同參與的開源專案,其目的是把Spark作為Hive的一個計算引擎,將Hive的查詢作為Spark的任務提交到Spark集群上進行計算。 通過該專案,可以提高Hive查詢的性能,同時為已經部署了Hive或者Spark的使用者提供了更加靈活的選擇,從而進一步提高Hive和Spark的普及率。
Hive on Spark與SparkSql的區別
? hive on spark大體與SparkSQL結構類似,只是SQL引擎不同,但是計算引擎都是spark! 敲黑板! 這才是重點!
我們來看下,在pyspark中使用Hive on Spark是中怎麼樣的體驗
#初始化Spark SQL #導入Spark SQL from pyspark.sql import HiveCoNtext,Row # 當不能引入Hive依賴時 # from pyspark.sql import SQLCoNtext,Row # 注意,上面那一點才是關鍵的,他兩來自于同一個包,你們區別能有多大 hiveCtx = HiveCoNtext(sc) #創建SQL上下文環境 input = hiveCtx.jsonFile(inputFile) #基本查詢示例 inp ut.registerTempTable("tweets") #註冊輸入的SchemaRDD(SchemaRDD在Spark 1.3版本後已經改為DataFrame) #依據retweetCount(轉發計數)選出推文 topTweets = hiveCtx.sql("SELECT text,retweetCount FROM tweets ORDER BY retweetCount LIMIT 10")
我們可以看到,sqlcoNtext和hivecoNtext都是出自于pyspark.sql包,可以從這裡理解的話,其實hive on spark和sparksql並沒有太大差別
結構上Hive On Spark和SparkSQL都是一個翻譯層,把一個SQL翻譯成分散式可執行檔Spark程式。 而且大家的引擎都是spark
SparkSQL和Hive On Spark都是在Spark上實現SQL的解決方案。 Spark早先有Shark專案用來實現SQL層,不過後來推翻重做了,就變成了SparkSQL。 這是Spark官方Databricks的專案,Spark專案本身主推的SQL實現。 Hive On Spark比SparkSQL稍晚。 Hive原本是沒有很好支援MapReduce之外的引擎的,而Hive On Tez專案讓Hive得以支援和Spark近似的Planning結構(非MapReduce的DAG)。 所以在此基礎上,Cloudera主導啟動了Hive On Spark。 這個專案得到了IBM,Intel和MapR的支援(但是沒有Databricks)。
Hive on Mapreduce和SparkSQL使用場景 Hive on Mapreduce場景 Hive的出現可以讓那些精通SQL技能、但是不熟悉MapReduce 、 程式設計能力較弱與不擅長JAVA語言的使用者能夠在HDFS大規模資料集上很方便地利用SQL 語言查詢、匯總、分析資料,畢竟精通SQL語言的人要比精通JAVA語言的多得多 Hive適合處理離線非即時資料 SparkSQL場景 Spark既可以運行本地local模式,也可以以Standalone、cluster等多種模式運行在Yarn、Mesos上,還可以運行在雲端例如EC2。 此外,Spark的資料來源非常廣泛,可以處理來自HDFS、HBase、 Hive、Cassandra、Tachyon上的各種類型的資料。 即時性要求或者速度要求較高的場所 Hive on Mapreduce和SparkSQL性能對比
結論:sparksql和hive on spark時間差不多,但都比hive on mapreduce快很多,官方資料認為spark會被傳統mapreduce快10-100倍