+
前幾天突發奇想,在 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
沒有留言:
張貼留言