我和我的團隊正在開發一個應用程序,使得使用弗林克的。數據將使用計算量大的數值算法進行處理。 爲了儘可能優化它,我想用C/C++而不是Java編寫這個算法。使用C/C++在Apache的弗林克
的問題是:它是能夠使用C/C++代碼內弗林克?也許通過將它包裝到Java庫中?
我和我的團隊正在開發一個應用程序,使得使用弗林克的。數據將使用計算量大的數值算法進行處理。 爲了儘可能優化它,我想用C/C++而不是Java編寫這個算法。使用C/C++在Apache的弗林克
的問題是:它是能夠使用C/C++代碼內弗林克?也許通過將它包裝到Java庫中?
我從來沒有測試這種情況下尤其如此。一般而言,您始終可以使用Java Native Interface的JNI來使用Java本機代碼。
的想法是有一個Java門面暴露你的原生代碼和Java中與弗林克定義(或其他JVM語言,比如Scala)的計算圖形使用這些方法。您將不得不在所有涉及的節點上都提供Java庫和本地庫,以使其工作。如果您擁有Hadoop羣集,則可以利用YARN將文件與作業一起發送(文檔here,請參閱--yarn-ship
CLI選項)。
我建議你逐步測試,暴露一個非常小的本地函數。此外,不要低估Java在性能方面的能力:通過一些精心設計的編程和利用JIT和其他運行時優化,長時間運行的進程可以享受到比非託管內存的類似本地代碼更好的性能。
請記住,這當然是求助於原生代碼將意味着限制你的代碼的可移植性而您編譯庫的平臺。