Hypertable hbase hdfs kfs java与c++的较量
生活随笔
收集整理的這篇文章主要介紹了
Hypertable hbase hdfs kfs java与c++的较量
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
曾經做過一個測試,用hdfs和 kfs分別作hadoop的底層,發現還是hdfs快,可能hdfs更符合hadoop的生態系統,但是一個很明顯的現象就是用hdfs的時候,系統的內存緩存量很大幾乎等于全部內存,iowait 也很高,kfs則沒那么嚴重,這也是kfs慢的原因吧,因此如果在一個繁忙的集群上測試,哪個效果好,還是難以下定論,c++比java省內存和cpu,好多人都這么說,具體原因,我還不清楚,需要進一步學習。下面引用了另一位高人的隨筆:
? Hypertable C++ vs Hbase Java?
Hypertable 和Hbase二者同源,設計也有諸多相似之處,最主要的區別當然還是編程語言的選擇。Hbase選擇Java主要是因為Apache和Hadoop的公共 庫、歷史項目基本都采用該語言,并且Java項目在設計模式和文檔上一般都比C++項目好,非常適合開源項目。C++的優勢當然還是在性能和內存使用上。 Yahoo曾經給出了一個很好的Terasort結果(perspectives.mvdirona.com/2008/07/08/HadoopWinsTeraSort.aspx), 它們認為對于大多數Mapreduce任務,比如分布式排序,性能瓶頸在于IO和網絡,Java和C++在性能上基本沒有區別。不過,使用Java的 Mapreduce在每臺服務器上明顯使用了更多的CPU和內存,如果用于分布式排序的服務器還需要部署其它的CPU/內存密集型應用,Java的性能劣 勢將顯現。對于Hypertable/HBase這樣的表格系統,Java的選擇將帶來如下問題: 1.? Hyertable/Hbase是內存和CPU密集型的。Hypertable/Hbase采用Log-Structured Merge Tree設計,系統可以使用的內存直接決定了系統性能。內存中的memtable和表格系統內部的緩存都大量使用內存,可使用的內存減少將導致 merge-dump頻率加大,直接加重底層HDFS的壓力。另外,讀取和dump操作大量的歸并操作也可能使CPU成為一個瓶頸,再加上對數據的壓縮/ 解壓縮,特別是Bigtable中最經常使用的BM-diff算法在壓縮/解壓縮過程完全跑滿一個CPU核,很難想象Java實現的Hbase能夠與 C++實現的Hypertable在性能上抗衡。 2. Java垃圾回收。目前Java虛擬機垃圾回收時將停止服務一段時間,這對Hypertable/HBase中大量使用的Lease機制是一個很大的考 驗。雖然Java垃圾回收可以改進,但是企圖以通用的方式完全解決內存管理問題是不現實的。內存管理沒有通用做法,需要根據應用的訪問模式采取選擇不同的 策略。 當然,Hadoop由于采用了Java設計,導致開源合作變得更加容易,三大核心系統之上開發的輔助系統,如Hadoop的監控,Pig等都相當成功。所 以,我的觀點依然是:對于三駕馬車的核心系統,采用C++相對合理;對于輔助模塊,Java是一個不錯的選擇。轉載于:https://www.cnblogs.com/qianxun/archive/2011/04/26/2029321.html
總結
以上是生活随笔為你收集整理的Hypertable hbase hdfs kfs java与c++的较量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java复习题_java习题-(stat
- 下一篇: python二级最后一题_python二