2012年6月11日 星期一

[LLVM] Using Bitcode on Hadoop Streaming @ Ubuntu 10.04

 + 


前幾天突發奇想,在 LLVM/Bitcode 的架構可以用在哪邊,結果看了一下 LLVM 官網介紹,其實 bitcode 也可以像 script 一樣被執行:


lli - directly execute programs from LLVM bitcode
Getting Started with the LLVM System#Optional Configuration Items


故 bitcode 也能像 script 一樣被系統認出、執行,只是這樣的情況就是每一台 node 都必須必備 LLVM 環境才能執行 bitcode ,跟每台 node 都要安裝 JVM 才能跑 Hadoop 一樣。


此外,在 2009 年有篇文章提出 Hadoop should target C++/LLVM, not Java (because of watts) 設計觀點也可以參考一下,但這一切就是取捨,想要好效能就得付出些什麼,一切都是等價交換啦!


簡易 LLVM/clang 操作範例:



  • 從 source code 產生 native code 


    • $ clang -o source.exe source.c


  • 從 source code 產生 bitcode


    • $ clang -emit-llvm -c -o source.bc source.c


  • 從 bitcode 產生 native code


    • $ llvm-ld source.bc -native -o source.exe


  • 從 bitcode 執行


    • $ lli source.bc



因此,在 Hadoop 的架構下,可以用 Hadoop Streaming 與 lli bitcode.bc 來結合:


$ hadoop jar /path/Streaming.jar -file /path/my_mapper.bc -mapper "lli my_mapper.bc" -file /path/my_reducer.bc -reducer "lli my_reducer.bc" -input in -output out


測試方面,如同 Hadoop Streaming 之 Word Count 範例 技巧:


$ echo "A B AB BA B A" | lli /path/wordcount_mapper.bc | sort -k1,1 | lli /path/wordcount_reducer.bc


沒有留言:

張貼留言