spark為什么比mapreduce運行速度快很多


  • 比較重要的2個原因

–            1、基於內存

               mapreduce任務每次都會把結果數據落地到磁盤,后續有其他的job需要依賴於前面job的輸出結果,這里就需要進行大量的磁盤io操作,獲取前面job的輸出結果。性能非常低

    例如:select name,age from ( select * from user where address = 'beijing')
        ------------job2--------  ------------------job1-----------------------
    spark任務的輸出結果可以保存在內存中,后續有其他的job需要依賴於前面job的輸出結果,這里就只需要直接從內存中獲取得到,大大減少磁盤io操作。

    spark框架適合於迭代計算
    job1----->job2----->job3----->job4----->job5----->jobN......

–            2、進程和線程

               mapreduce任務它是以進程的方式運行在yarn集群中,比如說一個mapreduce任務有100個MapTask,后期需要運行這100個task,就需要啟動100個進程。
    spark任務它是以線程的方式運行在worker節點的executor進程中,比如說一個spark任務有100個MapTask,這里后期需要運行100個線程就可以了。
    可以這樣極端一點:只需要啟動一個進程,在一個進程中運行100個線程就可以了.開啟一個進程比開啟一個線程需要的時間和資源調度肯定是不一樣,開啟一個進程需要的時間遠遠大於線程.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM