1、執行計劃不同:
Impala:把執行計劃表現為壹棵完整的執行計劃樹,可以更自然地分發執行計劃到各個Impalad執行查詢,而不用像Hive那樣把它組合成管道型的map-reduce模式,以此保證Impala有更好的並發性和避免不必要的中間sort與shuffle。
Hive的執行計劃分成map-shuffle-reduce-map-shuffle-reduce…的模型。如果壹個Query會被編譯成多輪MapReduce,則會有更多的寫中間結果。由於MapReduce執行框架本身的特點,過多的中間過程會增加整個Query的執行時間。
2、數據流不同:
Impala:采用拉的方式,後續節點通過getNext主動向前面節點要數據,以此方式數據可以流式的返回給客戶端,且只要有1條數據被處理完,就可以立即展現出來,而不用等到全部處理完成,更符合SQL交互式查詢使用。
Hive:采用推的方式,每壹個計算節點計算完成後將數據主動推給後續節點。
3、所使用的內存不同:
Impala:在遇到內存放不下數據時,會直接返回錯誤,而不會利用外存,這使用得Impala目前處理Query會受到壹定的限制,最好還是與Hive配合使用。Impala在多個階段之間利用網絡傳輸數據,在執行過程不會有寫磁盤的操作(insert除外)。
Hive:在執行過程中如果內存放不下所有數據,則會使用外存,以保證Query能順序執行完。每壹輪MapReduce結束,中間結果也會寫入HDFS中,同樣由於MapReduce執行架構的特性,shuffle過程也會有寫本地磁盤的操作。
4、調度不同:
Impala:調度由自己完成,目前只有壹種調度器simple-schedule,它會盡量滿足數據的局部性,掃描數據的進程盡量靠近數據本身所在的物理機器。
Hive:任務調度依賴於Hadoop的調度策略。